我尝试使用 Dresden OCL 来描述 UML 类图的约束。看起来它可以很好地生成 AspectJ 代码,但我找不到生成表示建模类(及其属性和方法)的 Java 代码的方法。Dresden OCL Toolkit 提供的示例还展示了在 Java 代码已经存在后如何生成 AspectJ 代码(OCL22Java 教程)。
是否可以生成嵌入了约束的 Java(不是 AspectJ)代码?如果是,那么它是如何完成的?
我尝试使用 Dresden OCL 来描述 UML 类图的约束。看起来它可以很好地生成 AspectJ 代码,但我找不到生成表示建模类(及其属性和方法)的 Java 代码的方法。Dresden OCL Toolkit 提供的示例还展示了在 Java 代码已经存在后如何生成 AspectJ 代码(OCL22Java 教程)。
是否可以生成嵌入了约束的 Java(不是 AspectJ)代码?如果是,那么它是如何完成的?
使用 Dresden OCL Toolkit 无法做到这一点,因此必须使用其他一些工具。我将 Uml2Java 用于 Acceleo。
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 函数)才能实际使用它。
Eclipse OCL 支持使用嵌入在 Ecore 中的 OCL 的完整内联 Java 代码来丰富从 Ecore 模型生成的 Java。Eclipse UML2 支持将带有嵌入式 OCL 的 UML 转换为带有嵌入式 OCL 的 Ecore。现在,这提供了您所要求的一切。它已经可用了几年。有关示例和更多信息,请参阅 Eclipse OCL 文档中的代码生成器教程。