现在的位置: 首页 > 综合 > 正文

emf技术研究一

2013年08月07日 ⁄ 综合 ⁄ 共 2060字 ⁄ 字号 评论关闭

部分内容参考emf指南

 

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;
 
 

 

抱歉!评论已关闭.