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

EMF中的ecore模型分析

    博客分类:
  • EMF
阅读更多
ecore模型分析
 
目前生成ecore模型主要由四种途径,如图:
       这里我们采用从UML Model产生ecore模型,首先用Rose设计包emf,然后在包中新建如下类图:
    生成的ecore模型如下
 
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="emf"
    nsURI="http:///emf.ecore" nsPrefix="emf">
 <eClassifiers xsi:type="ecore:EClass" name="Customer" eSuperTypes="#//Element">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="orders" upperBound="-1"
        eType="#//Order" containment="true"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="Order" eSuperTypes="#//Element">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="price" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="bool" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
 </eClassifiers>
</ecore:EPackage>
 
       下面我们就来分析一下这个文件:
EPackage
eocre模型的顶层元素是EPackage,它和UML Model中的包(Package)匹配;
 
EPackagensURInsPrefix属性不能在UML Model中直接表示出来,这些属性的缺省值都是自动根据Package的名称产生;
 
EPackagename属性和UML ModelPackage的名称是一样的;
<ecore:EPackage xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="emf"
nsURI="http:///emf.ecore" nsPrefix="emf">
...
</ecore:EPackage>
EClass,EEnum,EDataType
UML Model中类(Class)和可以匹配EClassEEnumEDataType,具体匹配哪个,取决于类的版型(stereotype)。
 
l         如果UML中的类的版型为空或者为Interface,则匹配EClass;
l         如果UML中的类的版型为enumeration,则匹配EEnum;
l         如果UML中的类的版型为datatype,则匹配EDataType;
 
在我们的UML Model中,类Customer的版型为空,所以匹配EClass
<eClassifiers xsi:type="ecore:EClass" name="Customer">
    ...
</eClassifiers>
 
类的名称就是name属性,
<eClassifiers xsi:type="ecore:EClass" name="Customer">
    ...
</eClassifiers>
如果这个类有父类,可以在属性eSuperTypes指定:
<eClassifiers xsi:type="ecore:EClass" name="Customer" eSuperTypes="#//Element">
    ...   
 </eClassifiers>
如果是抽象类,abstract属性为true,默认值为false
<eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
    ...
</eClassifiers>
如果类的版型是interfaceinterface属性为true,默认值为false
 
EAttribute 和EReference
UML 类中的每个属性和EAttribute匹配
 
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
 
UML中属性的name和EAttribute的name一样。
 
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
 
EAttribute 的eType属性来源于UML中属性的类型,这个类型必须是一个基本的 Java 类型,或者是在UML Model中定义的 EEnum 或者 EDataType。l.
 
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
 
UML类中每个有箭头的关联(navigable association)和Ereference匹配
<eStructuralFeatures xsi:type="ecore:EReference" name="orders" upperBound="-1"
        eType="#//Order" containment="true"/>
 
EReferencelowerBound upperBound属性值来自于UML 关联的阶元(multiplicty)。例如, 假如你指定阶元是 0..1,则属性lowerBound 0 ,而 upperBound 1,假如阶元是 0..n, 则属性lowerBound 0 upperBound -1 (unbounded)
 
如果UML 关联是聚合并且目标类的containment "by value",则EReference containment 属性为true ,缺省是false
eOperations
在UML类图中每个操作和eOperations匹配,例如如果在Customer增加name的get和set方法,如图:
ecore模型的代码如下:
<eOperations name="getName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
 
name属性对应着操作名,eType属性对应着操作返回值类型。
 
<eOperations name="setName">
      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
 
eParameters子元素对应着操作的参数,它的name属性对应参数的名字,eType属性对应着参数类型。
 

 

 

分享到:
评论

相关推荐

    使用EMF开发基于模型的Eclipse插件

    EMF不仅支持模型到代码的转换,还支持从代码到模型的逆向工程,这意味着开发人员可以在开发过程中随时调整模型,并自动更新相应的代码。此外,EMF还支持模型之间的互操作性,确保不同工具之间模型的一致性和可交换性...

    EMF 自学笔记5

    在科学研究中,EMF可以用于定义实验模型、分析模型、仿真模型等。 总之,EMF提供了一种灵活、高效、强大的模型驱动开发方式,它不仅简化了开发过程,提高了开发效率,而且促进了软件工程的标准化和自动化,为构建高...

    EMF模型文件对比/比较(emf.compare)

    EMF(Eclipse Modeling Framework)模型文件对比/比较(emf.compare)是针对基于EMF构建的模型文件进行差异分析的工具。EMF是Eclipse项目中的一个子项目,它提供了一种创建、操作和共享复杂的领域特定语言(DSL)...

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...

    emf教程入门和插件

    EMF提供了运行时环境(EMF Runtime),使得模型可以在应用程序中被实例化、修改和保存。这个环境支持动态加载和解析模型,以及持久化模型到磁盘。 6. **EMF插件** 插件是EMF生态系统的重要组成部分,它们扩展了...

    emf-runtime-2.7.2

    【标签】"emf runtime 2.7.2" 指的是这个组件是EMF框架的运行时部分,主要负责在Eclipse环境中运行由EMF生成的模型驱动的应用程序。版本2.7.2表示这个运行时环境包含了针对该框架的一系列改进和修复,以确保与不同...

    emf eclipse

    通过EMF QL,开发者可以方便地检索、分析和修改模型数据。 总结来说,EMF Eclipse是一个强大的元建模框架,广泛应用于软件建模和代码生成。通过学习EMF,开发者能够构建自己的领域特定语言(DSL),创建模型并自动...

    EMF读取XML

    EMF(Eclipse Modeling Framework)是Eclipse基金会提供的一种强大的模型化框架,它主要用于构建基于模型的应用程序。在处理XML数据时,EMF提供了一种高效且灵活的方式,能够将XML文档转换为可操作的对象模型,进而...

    emf-runtime,eclipse modeling framework

    Eclipse Modeling Framework(EMF)是Eclipse项目中的一个核心组件,它提供了一种模型到代码的转换机制,使得开发者可以构建基于模型的软件系统。EMF是基于OMG的Meta-Object Facility(MOF)标准,允许开发人员创建...

    eclipse emf&gef

    将现有的XML或UML模型导入到EMF中,然后利用EMF的工具对其进行扩展和维护。 ##### 2.2 EMF编辑器与代码生成 **2.2.1 生成的插件** EMF自动生成的插件包含了编辑器、视图和其他相关组件。 **2.2.2 通过GenModel...

    EMF Developer Guide

    虽然传统的面向对象分析与设计(OOA/D)工具可能成本较高,但EMF只需要定义类及其属性和关系的简单模型,因此降低了入门门槛。 **定义EMF模型** 在EMF中,开发者首先定义模型元数据,这包括类、属性和关系。元数据...

    EMF开发过程整合资料

    在EMF中,元模型通常使用Ecore语言编写,这是一种XML-based的语言。 2. **模型实例(Model Instance)**:基于元模型创建的具体数据结构实例,是元模型的具体化,可以理解为实际的数据对象。 3. **生成代码(Code ...

    emf-runtime-2.6.1

    在Eclipse VE(Visual Editor)环境中,EMF提供了模型和视图之间的桥梁,使得开发人员可以更直观地设计和修改应用模型。通过持续更新和改进,EMF已经成为许多大型企业级软件项目的核心组成部分。

    分析EMF文件的工具以及源代码

    EMF(Enhanced Metafile)是一种图形文件格式,主要用于存储矢量图形和光栅图像,常见于Windows操作系统中。这种格式被设计为增强型的WMF(Windows Metafile)格式,支持更多的颜色和更高的分辨率。EMF文件可以包含...

    emf文件格式详解

    EMF(Enhanced Metafile Format)是Windows操作系统中用于存储图形图像的一种文件格式,它扩展了早期的WMF(Windows Metafile Format)格式,提供了更高级的功能和更高的图像质量。这个压缩包包含了深入理解EMF文件...

    EMF建模框架

    Ecore是EMF中定义的元模型,用于描述模型的结构。Ecore是一种自描述的模型,它位于MOF规范中的M2层,与UML元模型的位置相同。使用Ecore元模型可以定义具体的.ecore模型文件,这些模型文件位于M1层,而它们的实例则...

    eclipse的emf插件

    Eclipse的EMF(Eclipse Modeling Framework)插件是一个强大的模型驱动开发工具,它基于Java构建,用于创建、编辑和管理复杂的数据模型。这个插件是Eclipse IDE的一个重要组成部分,特别适合那些需要进行领域特定...

Global site tag (gtag.js) - Google Analytics