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;
分享到:
相关推荐
- `Resource`对象包含了一个或多个`EObject`,这些对象对应于XML中的元素,可以通过遍历这些对象来访问XML数据。 5. **解析和操作XML** - 解析后的XML数据以EMF对象的形式存在,可以直接操作这些对象,例如修改...
SVG(Scalable Vector Graphics)和EMF(Enhanced Metafile)是两种常见的矢量图形格式,但它们在不同的环境中有着不同的应用。本示例代码是关于如何使用Java将SVG转换为EMF,这在需要在Windows系统中处理矢量图形时...
EMF (Enhanced Metafile) 是Windows操作系统中用于存储矢量图形和光栅图像的文件格式,它在处理复杂的图形和图像是非常有效。而PNG(Portable Network Graphics)则是一种无损压缩的位图格式,广泛应用于网页设计、...
4. 生成代码:使用EMF的代码生成器,将模型转换为Java类和XML序列化代码。 5. 编写应用程序:使用生成的Java类进行编程,利用EMF提供的API操作模型。 总结,Java开发工具EMF插件是Eclipse IDE中的一个强大工具,它...
EMF的核心理念是将数据结构转换为Java类,这些类能够直接在代码中使用,也可以通过XML或其他序列化格式进行持久化。这种模型-视图-控制器(Model-View-Controller, MVC)的设计模式允许开发者分离业务逻辑和用户界面...
EMF 是一种在 Windows 操作系统中广泛使用的矢量图形格式,而 JPG 则是常见的位图图像格式,适用于网络传输和存储。这个源码提供了将 EMF 文件转换为 JPG 的功能,方便在不同场景下使用和分享。 源码的核心技术主要...
EMF图片转为JPG/PNG 需安装GraphicsMagick 提供实例代码
EMF提供了运行时环境(EMF Runtime),使得模型可以在应用程序中被实例化、修改和保存。这个环境支持动态加载和解析模型,以及持久化模型到磁盘。 6. **EMF插件** 插件是EMF生态系统的重要组成部分,它们扩展了...
4. EMF模型的生成与使用:讲解如何定义XML Schema,由EMF自动生成Java类,以及如何在代码中操作这些模型对象。 5. 数据持久化:介绍如何利用EMF的持久化服务将模型数据保存和加载到文件中。 6. 插件开发:讲解如何在...
将现有的XML或UML模型导入到EMF中,然后利用EMF的工具对其进行扩展和维护。 ##### 2.2 EMF编辑器与代码生成 **2.2.1 生成的插件** EMF自动生成的插件包含了编辑器、视图和其他相关组件。 **2.2.2 通过GenModel...
EMF(Enhanced Metafile)和WMF(Windows Metafile)是两种常见的矢量图形文件格式,主要用于存储图像数据,特别是在Windows操作系统环境下。这两种格式都允许无损缩放和复杂图形的绘制,但EMF是WMF的增强版本,提供...
在这个“EMF开发过程整合资料”中,包含了丰富的信息和实践经验,旨在帮助开发者解决在使用EMF时可能遇到的问题。 EMF的核心概念包括: 1. **元模型(Metamodel)**:元模型是描述数据结构的模型,定义了模型元素...
Java组件EMF(Eclipse Modeling Framework)和SDO(Service Data Objects)是Java开发中用于数据建模和数据访问的重要工具。EMF是基于模型的软件开发框架,它提供了生成Java代码、运行时库和XML序列化的能力,常用于...
EMF是一个Java框架,其核心功能是代码生成,旨在帮助开发者基于结构化模型快速构建工具和其他应用程序。无论你是对面向对象建模有深厚理解的开发者,还是对此不太熟悉的新手,EMF都能以较低的学习成本提供高效、准确...
- **软件建模**:EMF广泛应用于UML(统一建模语言)和其他业务流程建模,帮助开发者以模型为中心进行系统设计。 - **数据交换**:通过XML或其他格式,EMF可以实现不同系统间的数据交换和集成。 - **插件开发**:...
This is the API specification of the FreeHEP VectorGraphics package for converting emf to svg.
- 新版 EMF 支持扩展 Ecore 建模,实现 XML、UML 与 Java 的完全统一。这种统一不仅简化了模型设计,还提高了代码的可读性和可维护性。 3. **代码生成**: - EMF 支持根据定义好的模型自动生成高质量的 Java 代码...