EMF指导

1 篇文章 0 订阅

EMF指导

 

1.模型和EMF

 

1.1 数据模型

数据模型,有时也叫做“域模型(domain model),意思就是代表了你想要针对于业务的数据。比如说,如果你要开发一个在线的机票预订应用,你可能建立的模型有“Person”,“Flight”,“Booking”等。一般建议你建立的数据模型要独立于应用程序的逻辑。这种方法会导致这些类几乎没有逻辑性和大量的属性。比如:“Person”类将会有“firstName,lastName”,“Address”属性。

 

1.2 Eclise EMF

Eclipse EMF可以被用来建立你的数据模型。EMF是一个可以区别元模型和真实模型的框架。元模型描述了一个模型的结构。一个模型作为这个元模型的实例。EMF提供了插件式的框架去存储模型的信息,默认就是使用XMIXML Metadata Interchange)来保持模型的定义。EMF允许你使用不同的渠道去创建一个元模型,比如说,XMIJAVA注释,UML或者一个XML图解。而下一个描述的将要用EMF工具直接去创建一个EMF模型。

一旦EMF元模型被指定了,你就可以建立和这个模型相对应的实现类了。EMF提供了用户可以安全地去继承的生成代码。

 

1.3 元模型--EcoreGenmodel

我们之前说EMF有元模型的概念。实际上,EMF是基于两个元模型的——EcoreGenmodelEcore元模型包含了定义的类的信息。Genmodel包含了生成的代码的额外信息,比如说:文件的信息和路径。Genmodel也包含了如何生成代码的控制参数。

Ecore模型允许去定义不同的元素。

 

EClass:描述了一个类,包含了0至多个属性或者引用。

EAttribute:描述了一个包含有名字和数据类型的属性

EReference:描述了两个有关联的类之间的关系。它的标志表明了它是否代表了包含类之间的关系。

EDataType:描述一个属性的数据类型。比如说:intfloat或者java.util.Date

 

Ecore模型通过展现出一个原始的对象来表现出完整的模型。这个模型有子模型来表现它的包。

 

 

1.4  使用EMF的优势

 

通过使用EMF框架,可以使你建立的模型可以更加清晰的展现在你的眼前。一旦模型发生了改变的话,EMF也可以提供一些方法来通知你模型确实发生了改变。EMF将会生成接口和工厂去创建你的模型对象。因此,EMF会帮助你保持好应用的整洁性从个体的类那里实现的。

EMF其他的优势就是你可以在任何时候从模型那里再生成JAVA代码

 

2.安装

安装EMF可以通过Eclipse Update manager .选择“Modeling”和安装”EMF-Eclipse Modeling Framework SDK”.并且选择“Ecore Tools”这些将允许你可以从模型那里来创建UML视图.


1.定义EMF模型

 

3.1创建项目

 

创建一个新项目“de.vogella.emf.webpage.model”保存在文件File / New / Project... / Eclipse Modeling Framework /Empty EMF project里面


3.2 创建Ecore视图

选择文件“model”,右击文件夹并且选择New / Other... / Ecore Tools / Ecore Diagram 


定义你的文件名字"Domain File Name" "webpage.ecore".


这将打开一个虚拟的编辑器去创建EMF模型


打开“Peopertise”视图通过:Window -> ShowView -> Other -> “Perpertise” 这个视图将会允许你去修改你的模型元素的属性。

 

点击EClass图标拖拽到编辑器中去来创建一个新的类。创建类:“MyWeb”,”Webpage”,”Category”和”Article”


通过EAttribute 图标来设计每一个对象的属性比如”name”属性,它的数据类型是字符串类型”EString”




给类:“MyWeb”和“Webpage”增加属性“title”,“description”和“keywords”


我们想要去用calendar的数据类型给我们的模型。就去选择“EDataType”并且给它属性名“calendar”而属性的数据类型就是“java.util.Calendar”.给类“Article”增加属性“created”,而这个属性就用到了你创建的新的类型


选择EReferences 图标来创建一个类似箭头的关系线段。确保上限的标志为“*”,代表了“包含其他”的含义


3.3  查看Ecore视图

 

关闭刚刚打开的会话框,打开文件“webpage.ecore”。接下来你会到下面的结果.


3.4创建EMF发生器模型(EMF Generator Model)

 

选择你的文件“webpage.ecore”->选择文件->New->Other->“EMF Generator model”并且创建“webpage.genmodel”基于你的“Ecore model”




选择你的模型,并且点击“load”来加载它



3.5 设置包

 

打开“webpage.genmodel”并且选择图标“Webpage”.设置“base package”属性为“de.vogella.emf.webpage.model”


1.生成的模型类(Generating the domain classes)

 

4.1 生成的JAVA代码

 

在这里,你需要创建两个模型,“.ecore”和“.genmodel”。基于这两个模型你可以生成JAVA代码。右击genmodel的根节点图标,并且选择“Generate Model Code”。这将根据当前项目的EMF模型去创建实现的类.


4.2 复审生成的代码

 

生成的代码将会由一下构成:

 

*model -- 接口和工厂去创建JAVA的类

*model.impl -- 在模型中定义的接口的具体实现

*model.util -- 适配器工厂(AdapterFactory)

 

工厂中通过方法:createObjectName()来创建所有已定义的对象。#但是没有找到这个方法啊~

每一个属性生成的接口和它的实现包含了getter方法和(如果允许模型定义的话)setter方法。每一个setter方法也会生成一个模型的观察者。这代表了其他的对象模型可以关联(attach)住它自身的对象模型并且影响到模型的改变。

每一个接口所继承的原始接口:EObject。EObject是每一个EMF类的基类并且这个EObject将相当于java.lang.Object。EObject的实现类就相当于是EObjectImpl,它提供一个轻量级的基类,允许生成的接口和类参与EMF通知和持久性框架

 

每一个生成的方法会被标记为@generated.如果你想去手动去调整方法或者你想去阻止EMF在下一次运行的期间重写这个方法的话,你就需要去移除掉这个标签:@generated

如果你改变你的ecore模型那么你就需要通过重载来调整genmodel


1.创建EMF编辑器插件

 

EMF可以通过生成的产检来提供创建新的模型的例子和编辑器来允许你去维持你的模型信息。关于更多的Eclipse插件开发信息请看:Eclipse Plugin Tutorial

 

5.1 生成的  编辑/编辑器代码 (edit/editor code)

 

Eclipse EMF允许你去创建一个编辑器给你的模型。选择你的genmodel,右击它并且选择“Generate Edit Code”然后选择“Generate Editor Code”

 

两个Eclipse插件项目就被创建了:

"de.vogella.emf.webpage.model.edit" "de.vogella.emf.webpage.model.editor".

5.2 运行你的插件

 

选择后缀是“.editor”的项目文件并且运行它。选择“plugin.xml”,选择“Overview”标签,点击进去之后点击“Launch an Eclipse application”

(详细的信息的你可以去看Eclipse plugin Tutorial的介绍)

 

  到这里你就已经开启了一个新的Eclipse运行时的实例了.

 

5.3 创建你的模型

 

在你新的Eclipse实例中——创建一个新项目“testing”和一个新的文件夹“website”(选择这个文件夹,右击它,选择 New->Other->Example EMF Model Creation Wizards -> Webpage Model)


命名为“My.webpage”


选择模型对象“My Web”并且点击finish


5.4 编辑你的模型

 

你现在应该看见一个针对于你的模型(website.model)生成的一个新的编辑器.

 

右击项目“My Web”并且创建一个新的元素。去编辑这个元素通过使用“Properties View”然后可以在下面可以找到 Window->Show View -> Properties



保存你创建的模型

 

1.使用模型代码

 

6.1 重写

 

生成的模型代码可以使用标准的Java代码来代替。在接下来的示范中将会交给您如何去创建基于生成代码的对象。

 

6.2 示例

 

创建一个新的插件项目“de.vogella.emf.webpage.usingmodel”,给你的“plugin.xml”添加从属关系

· org.eclipse.emf.ecore

· De.vogella.emf.webpage.model

导入这两个类。

package de.vogella.emf.webpage.usingmodel;

 

import de.vogella.emf.webpage.model.webpage.MyWeb;

import de.vogella.emf.webpage.model.webpage.Webpage;

import de.vogella.emf.webpage.model.webpage.WebpageFactory;

import de.vogella.emf.webpage.model.webpage.impl.WebpagePackageImpl;

 

public class UsingEMFModel {

public static void main(String[] args) {

WebpagePackageImpl.init();

// Retrieve the default factory singleton

WebpageFactory factory = WebpageFactory .eINSTANCE;

// Create an instance of myWeb

MyWeb myWeb = factory.createMyWeb();

myWeb.setName("Hallo");

myWeb.setDescription("This is a description");

// Create a page

Webpage webpage = factory.createWebpage();

webpage.setTitle("This is a title");

// Add the page to myWeb

myWeb.getPages().add(webpage);

// and so on, and so on

// as you can see the EMF model can be (more or less) used as standard Java

 

 

}

}

 

提示:

*PackageImpl.init()方法需要在其他模型和监听者初始化之前进行声明。

 

7.创建 JavaDoc

你也可以生成Javadoc给你的类和方法.EMF通过使用一定的属性键来生成注释。最容易的方式是再去增加个视图。选择一个类和创建一个文件“GenModel Doc”


现在来看以下的ecore模型。模型的键"http://www.eclipse.org/emf/2002/GenModel"是必须的并且对象的key是“documentation”


7.生成的方法

每一个类都会被EMF框架默认生成getter和setter方法。你也可以增加一些你的业务进去或者比如说重写这些方法:toString()等。Article类的toString()方法的实现就会在ArticleImpl类中生成。

 

 * @generated

 */

@Override

public String toString() {

if (eIsProxy()) return super.toString();

 

StringBuffer result = new StringBuffer(super.toString());

result.append(" (name: ");

result.append(name);

result.append(", created: ");

result.append(created);

result.append(')');

return result.toString();

}

去重写这个方法,增加一个“EOperation”给你的模型使用方法名toString()包含属性“EType” 而EString作为它的返回类型.


增加一个注释资源"http://www.eclipse.org/emf/2002/GenModel" 并且维持一个入口使用键“body”,值就是方法生成的代码,你会发现它将在下面列出


if (eIsProxy()) return super.toString();

StringBuffer result = new StringBuffer(super.toString());

result.append("Article: ");

result.append(name);

return result.toString();

 

你也可以生成作为输入的参数的方法,只需添加EOperation参数的类型。



7.继承一个EMF Ecore模型

 

9.1  重写

 

EMF 允许通过继承来扩展一个已经存在的类。接下来将会定义一个基类和一个扩展这个基类的模型。比如说Eclipse e4应用模型就可以被用来扩展。接下来将会证明如何去使用EMF的ecore模型来在外部直接使用ecore工具

 

9.2 例子

 

创建一个新的EMF项目“de.vogella.emf.inheritance”。创建一个新的模型通过下面的步骤“File->New->’Eclipse Modeling Framework’->’Ecore Model’”模型命名为:“base.ecore”。选择“EPackage”作为基础并维持着这个包的属性。


右击这个包并且选择“New Child->EClass”.创建类“MyBaseClass”并且定义两个属性为“EString”的“EAttributes”。创建一个新的“Ecore”模型“extendedmodel.ecore”.保持“extended”作为包的名字。右击你的模型并且选择“Load resource”




创建一个新类“MyExtendedClass”并且点击“ESuperType”


新增你的“MyBaseClass”类



保持一个新的EAttribute “detailedField”在“MyExtendedClass”类中。


创建一个新的genmodel“extended.genmodel”基于extended.ecore. Generated Java code 并且你将看到“MyExtendedClass” 继承于“MyBaseClass”

 

10 设置空的字符串作为默认值

 

这里并不明显的看出如何去设置一个空的字符串作为默认值给一个EMF的string属性。要去设置一个空的字符串作为默认值要进行下面的操作:

 

*选择一个属性

*在属性视图中单击“Default Value Literal”的值字段

*不输入内容在这里

 

再次移除这个空值,在工具条中点击“Restore Default Value”.


 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值