2012-02-23 2 views
2

今日OCLで教授と話し合いました。彼は、不変条件、事後条件、および事前条件が、定義された関数の文脈内で許容されると考えている。OCL - 不変量についての説明が必要ですか?

私のソフトウェア開発者は、OCLが一般的な制約をモデル上に置くことができると信じたいと思っています。このモデルのPersonクラスのすべてのオブジェクトのような制約は男性の性別を持っているか、クラスcarのすべてのオブジェクトは4つのホイールが非常に有用であると思われ、私のモデルに対して宣言的なパラダイムを使用するのは正しいと感じます。

私はそれを物理的な世界のように見ています。私たちがボルトにナットをねじ込むと、ナットは片方の方法でフィットすることができます。これらはボルトにナットをねじ込むような行動を取っても違反しないか、基本的な方法でモデルを無効にしたという物理的な制約です。

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

誰かが私のためにこれをクリアすることはできますか?

答えて

2

実際の機能の内容がどういう意味か分かりませんか。しかし、OCLは不変量/前後の条件を超えています。 OMG OCL 2.3.1仕様から

[1] 7.2.1 どこOCLを使用するには:

OCLが異なる多くの目的のために使用することができる:クエリ言語として

  • 、ステレオタイプのための不変の型を指定する
  • 、クラスモデルにクラスとタイプの不変条件を指定しますガードを記述するための操作と方法に事前・事後条件を記述するための
  • 操作上の制約を指定する
  • 、メッセージとアクションのためのターゲット(セット)を指定し、
  • しますUMLモデル上の任意の式の属性の導出規則を指定します。

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

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

2

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

OCLには基本的に任意のUML分類子(型、クラス、インタフェース、関連、データ型など)を参照できるcontextというキーワードがあります。

コンテキスト人物INV:

あなたが言及例は、次のような単純な式を通じて、実際にOCLに対処するのが最も簡単です 自己。= 120

コンテキスト者INV年齢<:UML仕様による self.countChildren()< = 20

1

(時刻書き込みで2.5まだベータ)制約コンテキストのコンテキストの名前空間でありますモデル、分類子が含まれています(クラス)。制約は、たとえばOCLを介して定義されたOpaqueExpressionによって指定できます。一例として、

は、この記事を考慮してください。http://lowcoupling.com/post/57689107913/constraining-uml-models-through-ocl

0

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

関連する問題