Eclipse Modeling Framework(EMF)
“粘合”Java,XML和UML
为了更好的理解EMF,我们举一个简单例子。假如让你写个程序来管理某个厂商的顾客信息(Customer),每个顾客都有一个姓名(name)和一些订单(orders),同时每个订单(Order)都有一个编号(id)和价格(price),为此我们创建以下Java接口:
publicinterface Customer {
String getName();
void setName(String name);
List getOrders();
}
publicinterface Order {
long getId();
void setId(long id);
float getPrice();
void setPrice(float price);
}
有了这两个接口,接下来我们考虑如何设计用户界面和持久化等等。
当然,你可能刚开始并没有急于创建这两个接口,也许你会首先用UML创建模型:
接下来,你要考虑如何保存模型,是保存到数据库中还是XML文件中,如果把模型持久化到XML文件中,我们要定义XML Schema来定义XML文件的结构。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/SimplePO"
xmlns:PO="http://www.example.com/SimplePO">
<xsd:complexType name="Customer">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="orders" type="PO:Order"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Order">
<xsd:sequence>
<xsd:element name="id" type="xsd:long"/>
<xsd:element name="price" type="xsd:float"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
现在我们应用的“数据模型”有了三种表现方式(Java Interface,UML diagram,XML Schema),不知道你是否想过,能否从其中一种表现方式生成其它两种,或者更深一步,如果给这些模型再增加些信息,能否可以生成我们所需要的代码。这就是EMF产生的原因,它是一个代码生成工具,你可以定义以上三种表现方式的任何一种,然后借助于EMF,就可以生成其它的表现方式以及具体的代码。
从上图可以看到EMF能把Java,UML,XML这三种技术“粘合”在一起,无论你从哪种技术开始(这取决于你对这种技术的熟悉程度),都可以通过EMF在三者之间进行转化。
比较这三种表现方式,我们可以看出:
1. Customer和Order,在UML和Java对应着接口定义,而在XML Schema对应着complexType定义;
2. name,id和price,在UML中对应着属性定义,在Java中对应者get()/set()方法对,在XML Schema中是嵌入的element声明;
3. orders:在UML中对应者聚合关系,在Java中对应着get()方法,在XML Schema对应着一个引用complexType的元素;
为了在这三种模型之间互相转化,我们需要一个描述它们的“公共语言”,也就是我们需要一种模型来描述EMF模型,即原模型(ecore)。
下面我们简单解释一下Ecore模型:
1. EClass:用来代表模型类,它有一些属性(name,abstract等),0或者多个属性和引用;
2. EAttribute:用来代表模型属性,它有一些属性(name,eType等);
3. EReference:用来代表类之间关联的一端,它有一些属性(name,containment等);
4. EDataType:用来代表属性的类型,可以是个基本类型int等,也可以是对象类型java.util.Date;
分享到:
相关推荐
EMF读取XML
EMF图片转为JPG/PNG 需安装GraphicsMagick 提供实例代码
矢量格式转换程序,基于JAVA实现的SVG转EMF的的示例代码,下载后导入到eclipse即可运行。
使用freehep将EMF转换为png,项目下载导入eclipse即可运行。
java开发工具EMF插件
emf和wmf文件的互转,有源码,供大家学习,交流!
This is the API specification of the FreeHEP VectorGraphics package for converting emf to svg.
java EMF,图形开发框架。也可用作eclipse的插件开发.
StarUML是一款非常好的UML建模工具,可绘制9款UML图:用例图、类图、序列图、状态图、活动图、通信图、模块图、部署图以及复合结构图等。 StarUML 支持多种格式的影像文件,可导出JPG、...安装包中自带JAVA和C++插件
EMF治疗癌症疾病的领域正在Swift扩展,我们的研究可能会邀请进行进一步的实验和临床研究,在这些研究中,可以系统地应用各种潜在的EMF治疗方案(组合频率和调制频率)以获得更有效的EMF抗癌治疗方法。
emf文件是windows的一种打印格式,该资源可以对emf文件进行文本提取和推送打印机打印以及转换成图像
EMF和BMP文件格式的相互转换:BOOL CConvertEMFToBMP::ConvertBMPToEMF(const char*pszBMPFile,const char* pszEMFFile)
基于Eclipse的模型框架 它是Eclipse MDA(Model Driven Architecture)的一个重要组成部分 是Eclipse中许多项目的基础 e g GEF EMF可以将模型转换成高效的 正确的 和易于定制的Java代码
emf入门教程,并附有插件。比较适合初学者
Defining EMF via UML tools, XML schema, annotated Java interfaces, and the Ecore metamodel Generating Java code with EMF: clear explanations, step-by-step instructions Expert analyses of key ...
Designed to make modeling practical and useful to the mainstream Java programmer, EMF unifies three important technologies: Java, XML, and UML. Models can be defined using a UML modeling tool or an ...
包含3个文件: 微软emf文件格式详解.pdf emf.hlp (Enhanced Metafiles in Win32) emfexplorer_src.zip
EMF 自学笔记
详细讲述了emf和gef的用法,和模型开发过程,有很多实例的
很全的使用eclipse模型框架资料,帮大家排除开发过程中的难题,一些经验的总结。希望对大家有帮助