0

我尝试使用 Dresden OCL 来描述 UML 类图的约束。看起来它可以很好地生成 AspectJ 代码,但我找不到生成表示建模类(及其属性和方法)的 Java 代码的方法。Dresden OCL Toolkit 提供的示例还展示了在 Java 代码已经存在后如何生成 AspectJ 代码(OCL22Java 教程)。

是否可以生成嵌入了约束的 Java(不是 AspectJ)代码?如果是,那么它是如何完成的?

4

3 回答 3

1

使用 Dresden OCL Toolkit 无法做到这一点,因此必须使用其他一些工具。我将 Uml2Java 用于 Acceleo。

于 2012-03-28T21:21:56.143 回答
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 代码不是那么可用的 atm,您需要稍微修改它(或您的 Java 函数)才能实际使用它。

于 2012-05-01T19:13:58.377 回答
0

Eclipse OCL 支持使用嵌入在 Ecore 中的 OCL 的完整内联 Java 代码来丰富从 Ecore 模型生成的 Java。Eclipse UML2 支持将带有嵌入式 OCL 的 UML 转换为带有嵌入式 OCL 的 Ecore。现在,这提供了您所要求的一切。它已经可用了几年。有关示例和更多信息,请参阅 Eclipse OCL 文档中的代码生成器教程。

于 2017-12-18T06:13:14.417 回答