EMF笔记-概念

      概念模型(conceptual model )可以以几种不同的方式定义:Java, UML, 或 XML Schema。为了从这各个不同的概念模型中定义一个统一的模型,就需要有一个统一的术语来对各个模型部分进行描述,这也是实现EMF tools和generator的必要条件。这样就是说,需要一个模型来描述所有EMF模型:一个元模型。

      用来表现所有EMF模型的模型叫做Ecore。Ecore本身也是一个EMF模型,因此它是自己的元模型,也可以把它叫做元元模型(一个模型的本身是元模型,就可以叫做元元模型)。

      EMF框架读取Ecore模型来产生实现的Java代码,而Ecore模型可以由Java Interfaces、XML Schema以及UML来产生。从UML文件来产生Ecore模型,有三种途径:1.直接用Ecore模型编辑器进行编辑 2.EMF 项目向导中导入Rose的UML文件 3.由UML工具直接导出Ecore模型。

      XMI(XML Metadata Interchange)是Ecore模型的主要的和标准的表现形式。如果采用Java code来表现Ecore模型的话,当每次重新产生模型时,都需要把所有的java文件都省视一遍和重写一遍,很不简洁。另外,选择XMI实际上与选择UML非常的相近了,但是问题是每个UML Tools都有自己的持久化的格式。

      概括来说:1.Ecore和它的XMI序列化是EMF的核心;2.core模型可以从至少三个来源创建:UML model,XML Schema,经过注释的Java interfaces;3.java Code、和其他形式的模型都可以由Ecore模型来产生。

 

     

产生模型类

    一个Ecore模型类实际上对应到Java中的两个东东:Java接口、接口对应的实现类。每个接口直接或者间接的继承了基础接口EObject,EObject等同于java的Object,也就是说它是所有模型对象的基础。扩展的EObject引入了三个主要的行为:1.eClass()(返回对象的元对象);2.eContainer() and eResource() (返回对象所包含的对象和资源)。;3.eGet(), eSet(), eIsSet(), and eUnset()(为通过反射方式访问对象提供API)。除此之外它还继承了另外一个接口Notifier,这样它就引入了一个重要的特征:支持观察者模式。
    通过一个模型产生的还有两个重要的类:一个工厂、一个包。工厂类包含了一个创建模型里所有类的方法,EMF强烈鼓励(但不是必须的)使用工厂类来创建对象。通过包类提供的访问器可以获取模型中所有的Ecore元数据。

产生的其他东东

    除了接口和实现类EMF还产生了其他的类:1.A skeleton adapter factory(这个类可以用来实现适配器工厂);2.A witch class(基于对象类型的回调机制);3.Plug-in manifest files and property files(使模型可以作为Eclipse的插件使用)

代码重新产生与合并

    EMF产生器产生的代码文件是产生的代码片段与手写代码片段的混合。编辑产生的类加入方法和实例变量,且可以在需要的重新产生代码,而加入的代码可以保留在重新产生的文件中。

    EMF在产生的接口和类的JavaDoc comments加入@generated标记,用来标识这是产生的代码部分。任何没有该标识的方法都会在重新产生时保留下来。如果新加入的方法与产生的方法产生冲突时,产生的方法就会丢失,而加入的方法会保留,如果想两个都保留的话,就需要在产生的方法名称后加入后缀"Gen".

产生器模型(The Generator Model --genmodel)

    诸如存放代码的路径、产生的工厂的前缀、包类名等等信息,这些都是产生代码或重新产生代码所需要的,而这些信息不是存在Ecore Model中,而是在genmodel中。

    可以说genmodel类是Ecore Model类的装饰器。例如,GenClass装饰EClass、GenFeature装饰EAttribute和EReference等等。

    最重要的是EMF代码产生器是运行在generate model上的,而不是运行在Ecore Model上。genmodel与ecore model可以进行同步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值