2

今日はOCLについて教授と話し合いました。彼は、関数の定義されたコンテキスト内で不変条件、事後条件、および事前条件が許可されると信じています。

私のソフトウェア開発者は、OCLによってモデルに一般的な制約を課すことができると信じたいと思っています。このモデルのクラスPersonのすべてのオブジェクトの性別が男性である、またはクラスの車のすべてのオブジェクトに4つの車輪があるなどの制約は非常に便利であり、モデルに対して宣言型パラダイムを使用することは正しいと感じます。

私はそれを現実の世界のように見ています。ボルトにナットをねじ込むと、ナットは一方向にフィットします。これらは、ボルトにナットをねじ込むなど、どのようなアクションを実行しても保持される物理的な制約であり、違反したり、基本的な方法でモデルを無効にしたりすることはできません。

彼の見解は、OCLでは、コンテキストが提供される関数内でのみ制約(前後の条件/不変条件)を定義できるというものです。

誰かが私のためにこれを片付けることができますか?

4

4 に答える 4

2

あなたが言ったように、あなたは間違いなくクラスの制約を定義することができます。あなた(そしてあなたの教授)はお互いを誤解しているかもしれないので、あなたは文脈であなたが何を意味するのかを明確にする必要があります。

OCLには、基本的に任意のUML分類子(タイプ、クラス、インターフェース、関連付け、データ型など)を参照できるコンテキストと呼ばれるキーワードがあります。

あなたが言及する例は、実際には、次のような単純な式を使用して、OCLで対処するのが最も簡単です。

コンテキストPersoninv:self.age <= 120

コンテキストPersoninv:self.countChildren()<= 20

于 2013-02-20T23:38:19.733 に答える
2

関数のコンテキストが何を意味するのか、私が本当に理解しているかどうかはわかりません。ただし、OCLは不変条件/前後の条件を超えています。

OMGOCL2.3.1仕様から[1]7.2.1OCLの使用場所

OCLは、さまざまな目的に使用できます。

  • クエリ言語として、
  • クラスモデルのクラスとタイプの不変条件を指定するには
  • ステレオタイプのタイプ不変を指定するには、
  • 操作とメソッドの前後の条件を説明するために
  • 警備員を説明するには、
  • メッセージとアクションのターゲット(セット)を指定するには、
  • 操作の制約を指定し、
  • UMLモデル上の任意の式の属性の派生規則を指定します。

つまり、あなたが正しいのは、あなたが説明するようなモデルクラスに制約(一般的に何を意味するのかわからない)を持つことができるということです。

[1] http://www.omg.org/spec/OCL/2.3.1

于 2012-11-25T12:25:02.057 に答える
1

UML仕様(執筆時点では2.5はまだベータ版)によると、制約コンテキストのコンテキストは、モデルの任意の名前空間であり、分類子が含まれます(クラス)。制約は、たとえばOCLを介して定義されたOpaqueExpressionを使用して指定できます。

例として、この投稿を検討してください:http: //lowcouple.com/post/57689107913/constraining-uml-models-through-ocl

于 2013-08-10T18:26:02.280 に答える
0

すでに述べたように、制約は任意のUML名前空間に配置できます。ただし、不変条件のセマンティクスはクラスに対してのみ定義されます。パッケージで定義された不変条件は指定されていません。これは、ユニバーサルトゥルースの定義(allInstances()で)​​をあるクラスの各インスタンスに関連付ける必要があるため、ナイーブOCLツールで冗長な再評価につながる可能性があるため残念です。将来のOCLにパッケージ不変条件が含まれることを楽しみにしています。

于 2017-12-18T06:21:18.973 に答える