`
yiliner
  • 浏览: 214518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个emf新手的学习笔记 --EMF 生成的Model Code阅读笔记(一)

    博客分类:
  • EMF
阅读更多

一个emf新手的学习笔记 --EMF 生成的Model Code阅读笔记(一)

在八进制的中讲述了从模型到应用程序的生成过程。我通过类似的方法生成了一个应用程序。

代码生成后,我就想看看EMF为我生成了什么样的代码。我如果需要修改的话该如何修改。
我的“Hellow world”是采用的“Using EMF”文中的模型。

根据这个模型建立了一个EMF Model:

根据这个模型生成model class的结构如下图所示:

从图中我们可以看到有三个包:

他们分别是:family,family.impl和family.util。

family和family.impl包之间的差别就是一个是Interface,另外一个是这些Interface的实现。

我们先来看看我们模型中出现过的类:

Family,FamilyTree,Female,Male以及Individual。
由于我是采用Annotated Java的方式生成的模型。所以在family包中的代码并没有太多的变化。
/**
  * Return the father
  * @return the father
  * @model
  */
  Male getFather();
 
  /**
  * Sets the value of the '{@link com.jet.swt.emf.family.Family#getFather <em>Father</em>}' reference.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @param value the new value of the '<em>Father</em>' reference.
  * @see #getFather()
  * @generated
  */
  void setFather(Male value);

他只是为我提供了Set方法。接口的继承也没有做修改。但是他对应的实现类就有了很多变化。

首先从类的申明来看:
public class FamilyImpl extends EDataObjectImpl implements Family {
我们可以看到我们的FamilyImpl是从EdataObjectImpl类继承而来。处于好奇我有在Hiberarchy中打开他的继承关系看了一下。

这里有一张图可以清晰的说明这个继承关系的职能。

我例子中的Business Layer是FamilyImpl类。

这样我们的就可以不写一行代码就可以使我们的对象具有Notification/Common的功能(关于Notification和Common的功能到底是怎样的,我会在后续的学习笔记中记下来。呵呵,是不是很爽啊)。另外在《Eclipse Modeling Framework: A Developer's Guide》一书的第二章也有提到这部分的内容,不过由于他讲解的EMF的版本比较老和我现在使用的版本有点出入,不过基本的功能还是讲到了。
好了,看完申明我们就来继续往下看吧。

在Family下面有三个属性,father,mother和children。

EMF给我们生成的对应的代码为:
protected Male father = null;

  /**
  * The cached value of the '{@link #getMother() <em>Mother</em>}' reference.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @see #getMother()
  * @generated
  * @ordered
  */
  protected Female mother = null;

  /**
  * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @see #getChildren()
  * @generated
  * @ordered
  */
  protected EList children = null;

以及一些get和set方法。

对于set方法中除了基本的赋值以外还加上了向所有对这次变动感兴趣观察者发送一个变更消息:
public void setFather(Male newFather) {
    Male oldFather = father;
    father = newFather;
    if (eNotificationRequired())
        eNotify(new ENotificationImpl(this, Notification.SET, FamilyPackage.FAMILY__FATHER, oldFather, father));
  }

对于get方法要分基本类型还是对象这两种类型来处理。

如果是基本类型,直接返回就好了。

如:
public String getName() {
    return name;
  }
如果是对象的话就有点麻烦了。先要判断该对象是否使用了代理(这一部分我还不是太清楚)如果是的话就获得他的代理对象,并判断获得代理对象是否和当前对象是否相等,如果不等就发送一个变更消息。最终返回对象(肯能是一个代理对象)。
public Male getFather() {
    if (father != null && ((EObject)father).eIsProxy()) {
        Male oldFather = father;
        father = (Male)eResolveProxy((InternalEObject)father);
        if (father != oldFather) {
          if (eNotificationRequired())
            eNotify(new ENotificationImpl(this, Notification.RESOLVE, FamilyPackage.FAMILY__FATHER, oldFather, father));
        }
    }
    return father;
  }

还有其他类将在下一篇记下。

参考文献:
1、 Using EMF, Author :Catherine Griffin

2、   EMF介绍系列(二、从模型生成应用程序) Author:八进制

3、 Mastering Eclipse Modeling Framework,Author:Vladimir Bacvanski(Vladimir@inferdata.com) Petter Graff(petter@inferdata.com)
Eclipse Modeling Framework: A Developer's Guide Author:Frank Budinsky, David Steinberg, Ed Merks, Raymond Ellersick, Timothy J. Grose

分享到:
评论

相关推荐

    emf-sdo-xsd-SDK-2.3.2.zip

    EMF-SDO-XSD SDK是一个工具集,用于帮助开发者利用EMF和SDO处理与XSD相关的任务。它包含以下组件: 1. **XSD解析器**:这个组件负责将XSD文件转换成EMF的模型表示,使得开发者可以利用EMF的API来操作和管理这些模型...

    emf-xsd-SDK-2.6.1

    EMF (Eclipse Modeling Framework) 是一个开源框架,用于构建基于模型的应用程序。它是Eclipse IDE中的一个重要组成部分,主要用于创建、存储和操作复杂的结构化数据模型。EMF提供了元数据驱动的开发方法,使得...

    emf-sdo-xsd-SDK-2.0.1.zip

    在EMF-SDO-XSD SDK中,"eclipse"可能指的是Eclipse集成开发环境(Integrated Development Environment),这是一个广泛使用的Java开发工具,也支持多种其他语言和框架,包括Struts。开发者可以使用Eclipse来导入和...

    emf-sdo-SDK-2.2.2

    5. **模型到代码生成(Model-to-Code Generation)**:EMF提供了一个工具链,可以根据元模型自动生成Java类和其他相关的代码,大大简化了开发过程。 6. **集成开发环境(IDE)支持**:`emf-sdo-SDK-2.2.2`作为一个...

    emf-xsd-Update-2.10.2

    【标题】"emf-xsd-Update-2.10.2" 是一个与Java可视化开发相关的软件更新版本,主要用于支持Visual Editor的安装和使用。这个版本是2.10.2,通常代表着修复了一些已知问题,增加了新功能,或者优化了性能。 【描述...

    emf-sdo-runtime-2.2.0.zip

    "emf-sdo-runtime-2.2.0.zip" 是一个包含EMF SDO运行时库的压缩包,用于在Eclipse环境中集成SDO功能。这个版本号2.2.0表明这是一个特定的稳定版本,包含了该版本中所有修复的bug和新增的功能。 在压缩包内的...

    emf-xsd-Update-2.7.2

    【标题】"emf-xsd-Update-2.7.2" 涉及到的是一个针对Eclipse集成开发环境的扩展,主要关注的是EMF(Eclipse Modeling Framework)和XSD(XML Schema Definition)的更新版本2.7.2。这个更新包包含了对EMF框架的增强...

    emf-sdo-runtime-2.2.0.zip、GEF-runtime-3.2.zip和VE-runtime-1.2.3_jem.zip

    myeclipse ,swing ,chajian,解压,添加

    emf-sdo-xsd-SDK-2.4.0.zip

    emf-sdo-xsd-SDK-2.4.0.zip emf是Eclipse modeling framework组建框架的缩写;SDO是服务数据对象的缩写,它是Java程序的一种数据编程框架;emf-sdo-xsd-SDK-2.4.0.zip是Eclipse编程器的组成员之一。

    EMF 自学笔记5

    EMF(Eclipse Modeling Framework)是Eclipse项目中的一个子项目,它提供了一套用于构建模型驱动的开发工具和应用程序的框架。EMF的主要目标是简化元数据驱动应用的开发过程,通过将模型与代码生成、编辑器、验证器...

    emf-sdo-xsd-SDK-2.2.1

    标题中的"emf-sdo-xsd-SDK-2.2.1"指的是Eclipse Modeling Framework (EMF) Service Data Objects (SDO) XSD SDK的一个特定版本,即2.2.1。EMF是Eclipse基金会开发的一个强大的建模框架,它允许开发者创建、操作和...

    emf-sdo-SDK-2.2.0(2) eclipse 可视化 界面设计

    emf-sdo-SDK-2.2.0(2) eclipse 可视化 界面设计。 因为size太大,所以分成了2部分,另一部分在 emf-sdo-SDK-2.2.0(1)里面。 emf-sdo-SDK-2.2.0(1)的下载地址: http://download.csdn.net/source/1002774

    emf-sdo-runtime-2.2.0 (emf build 2.2.0)

    eclipse可视化插件安装必备插件之一:emf-sdo-runtime-2.2.0。eclipse全部可视化插件正确配置是eclipse-SDK-3.2-win32,emf-sdo-runtime-2.2.0,GEF-runtime-3.2,VE-runtime-1.2,VE-SDK-1.2

    emf-sdo-xsd-SDK-2.3.1

    "emf-sdo-xsd-SDK-2.3.1" 是一个特定版本的EMF SDK,专注于SDO(Service Data Objects)和XSD(XML Schema Definition)的集成。XSD是一种用于定义XML文档结构的语言,它定义了元素、属性以及它们之间的关系。在这个...

    emf-xsd-Update-2.7.1

    【标题】"emf-xsd-Update-2.7.1" 涉及的是EMF(Eclipse Modeling Framework)的版本更新至2.7.1。EMF是Eclipse项目的一部分,它提供了一个用于构建基于模型的应用程序的框架和工具。在这一版本的更新中,开发者可能...

    emf-runtime-2.6.1

    EMF(Eclipse Modeling Framework)是Eclipse基金会开发的一个开源框架,主要用于构建基于模型的软件应用程序。它提供了元数据框架,使开发者能够定义、实施和使用复杂的领域特定语言(DSLs),并支持模型驱动的软件...

    swing的三个插件(emf-sdo-runtime-2.2.0.zip,GEF-runtime-3.2.zip,VE-runtime-1.2.2_jem.zip)

    SDO(Structured Data Objects)是EMF的一个子项目,它是一个数据访问接口,允许开发者在应用程序中处理结构化的数据。SDO Runtime插件为Swing应用提供了对这些数据模型的支持,使开发者能够轻松地管理、存储和传输...

    EMF XSD SDK

    这个SDK是Eclipse Modeling Framework (EMF) 的一个重要组成部分,特别适用于那些需要处理XML数据、构建基于XSD的模型或者实现MVC架构的开发者。 EMF是Eclipse IDE中的一个核心组件,主要用于构建和操作基于模型的...

Global site tag (gtag.js) - Google Analytics