emf java_使用EMF进行元建模:生成具体的可重用Java代码段

emf java

EMF是Eclipse平台的组成部分,也是相关技术和框架的基石,例如Eclipse Visual Editor,SDO,XSD和UML,其中许多已集成到IBM平台中,例如Rational®Application Developer和WebSphere。 ®业务建模器。 今天,EMF已经成长为包含Java技术功能,例如枚举类型,注释和泛型。 如果你是新的EMF,请参阅相关主题的文章,将帮助您开始。

在大多数文档和教程中,EMF用于建模数据和接口 (例如EMF发布文档中的Library and Books ),而非行为 。 当然,有一些为数据对象生成的默认方法实现,但是这些实现涉及模型元素之间的关系。 而且,除了Eclipse Foundation文章“使用EMF建模基于规则的系统”(请参阅参考资料 )外,几乎没有记录的EMF用作“元-元模型”的示例(但只有一个示例展示了如何扩展Ecore元模型。

最后,使用和扩展EMF JET模板的过程没有得到很好的记录。 此外,JET编辑器项目已移至另一个Eclipse项目(M2T)。 本文旨在澄清这些问题,并使您能够在EMF上下文中使用动态模板执行更多操作。 因此,它假定您对EMF基本熟悉。

为什么要扩展Ecore元模型?

Ecore元模型是用于设计模型驱动的体系结构(MDA)的强大工具,可以用作软件开发的起点。 通常,我们将在应用程序域中定义对象(类型为EClass ),它们的属性以及它们之间的关系。 我们还将使用EOperation模型元素定义属于那些对象的特定操作。 默认情况下,EMF将为这些操作生成框架或方法签名,但是我们必须返回并实现这些操作,通常一次又一次地重新编码类似的逻辑。

但是,如果我们想在模型中指定某种任意的实现行为,该怎么办? 一种方法是将基于文本的注释(类型为EAnnotation )添加到模型对象,并在代码生成过程中在模板中解释这些注释。 有关此示例,请参阅Eclipse Foundation文章“使用MDT OCL在EMF中实现模型完整性”(请参阅参考资料 )。 但是,我们的目的不是验证本文中描述的模型元素,而是对实现本身进行建模,以便将这些元模型元素与任何具体模型重用。 为此,我们需要扩展Ecore元模型。

扩展元模型

本文随附一个高度简化的编程模型,该模型扩展了Ecore。 它不是一个完整或连贯的元模型或框架; 严格来说,它是一组原型元素,用于说明使用EMF进行元建模代码实现的潜力。 图1显示了称为EcoreX的示例扩展元模型的快照,然后是每个元素的简短描述。

图1. EcoreX模型
EcoreX模型

EcoreX元素

EPackageX扩展了EPackage
这是Ecore元素 EPackage的简单“标记”扩展,没有其他属性。 这个元素是必要的,因为默认情况下,EMF编辑器插件的元素 EPackage不会允许的子类 EClass添加为一个子元素(见 EClassX ,下同)。 通过提供扩展 EPackage的模型元素,将自动生成代码以允许将 EClassX子元素添加到 EPackageX
EClassX扩展了EClass
同样,这是Ecore元素 EClass的简单标记扩展,没有其他属性。 与上面类似,此元素是必需的,因为默认情况下, EClass的编辑器插件不允许添加 EOperation子类-这是本文的目的。
EOperationImpl扩展EOperation
这是向Ecore模型添加具体的元功能的主要实体和切入点。 该元素具有Ecore的基本 EOperation元素中不存在的属性。 下面描述的所有其他元素都属于 EOperationImpl ,用于构成程序实现。 例如, EOperationImpl具有变量和语句,并且可以返回引用或值。
LocalVariable扩展ETypedElement
LocalVariable是局部范围的变量。 变量具有名称和Java类型(例如 StringIntegerObject ),并且由于这些属性已经存在于其超超类 EParameter ,因此 LocalVariable不需要其他属性。
Statement扩展了EClass
在我们的简化逻辑模型中, EOperationImpl包含许多 statement s,这些 statement将以给定的顺序求值。 Statement是一个抽象的超类。
LiteralAssignment扩展Statement
LiteralAssignment引用一个变量,并具有 String属性,该属性允许用户输入要解析的值并分配给变量(例如,“ hello”,“ 4.5”可以分别分配给 Stringfloat )。
Access扩展Statement
Access表示引用Java字段或操作的动作。
FieldReferenceAssignment扩展了Access
访问字段以分配值(例如 var1 = var2.name )。
Invoke扩展Access
调用操作(Java方法)。 可以将 Invoke的结果分配给变量(例如, myVar = obj.toString() )。

图2提供了更类似于UML的EcoreX元模型表示。

图2. Ecorex模型图
该图显示了Ecorex模型图

入门

本文有六个高级步骤:

  1. 扩展Ecore元模型,添加新的语义
  2. 为扩展的元模型创建一个genmodel
  3. 为该元模型生成EMF编辑器,然后安装其插件。
  4. 使用新的编辑器,建立描述程序行为的具体模型。
  5. 创建并配置一个genmodel的具体型号。
  6. 根据具体模型生成具体的Java代码。

您可以创建或导入上述元模型。 在这两种情况下,您都应该从现有的EMF项目开始或创建一个新项目(“ 新建”>“其他”>“ Ec

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值