0

ドレスデン OCL を使用して、UML クラス図の制約を記述してみました。AspectJ コードを正常に生成できるように見えますが、モデル化されたクラス (およびその属性とメソッド) を表す Java コードを生成する方法が見つかりませんでした。Dresden OCL Toolkit で提供される例は、Java コードがすでに存在する場合に AspectJ コードを生成する方法も示しています (OCL22Java チュートリアル)。

内部に制約が埋め込まれた Java (AspectJ ではない) コードを生成することは可能ですか? もしそうなら、それはどのように行われますか?

4

3 に答える 3

1

DresdenOCL (StandaloneFacade) のスタンドアロン エンジンには、generateJavaCode という関数が含まれています。この関数が実際に「完全」であり、考えられるすべての OCL 制約に対して正しい Java コードを生成するかどうかはわかりません。また、Google でその関数に関する情報を見つけることはできません。スタンドアロンの例で使用されているだけです。

編集:例として、それが生成するJavaコード:

この OCL 式 (私が作成した単純な UML モデル) の場合

context person
inv: self.age >= 0

このJavaコードを取得します

(aClass.age >= new Integer(0))

そして、このOCL式について

context person::havingBirthday()
post: self.age = self.age@pre+1

あなたはこれを得る:

((Object) aClass.age).equals((atPreValue1 + new Integer(1)))

したがって、生成された Java コードはそれほど使いやすいわけではありません。実際に使用するには、コード (または Java 関数) を少し変更する必要があります。

于 2012-05-01T19:13:58.377 に答える
1

Dresden OCL Toolkit ではこれを行うことができないため、そのためには他のツールを使用する必要があります。Acceleo には Uml2Java を使用しました。

于 2012-03-28T21:21:56.143 に答える