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)匹配;
EPackage的nsURI和nsPrefix属性不能在UML Model中直接表示出来,这些属性的缺省值都是自动根据Package的名称产生;
EPackage的name属性和UML Model中Package的名称是一样的;
<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)和可以匹配EClass,EEnum,EDataType,具体匹配哪个,取决于类的版型(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>
如果类的版型是interface,interface属性为true,默认值为false
EAttribute 和EReference
UML 类中的每个属性和EAttribute匹配
UML中属性的name和EAttribute的name一样。
EAttribute 的eType属性来源于UML中属性的类型,这个类型必须是一个基本的 Java 类型,或者是在UML Model中定义的 EEnum 或者 EDataType。l.
UML类中每个有箭头的关联(navigable association)和Ereference匹配
<eStructuralFeatures xsi:type="ecore:EReference" name="orders" upperBound="-1"
eType="#//Order" containment="true"/>
EReference的lowerBound 和 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模型的代码如下:
name属性对应着操作名,eType属性对应着操作返回值类型。
<eOperations name="setName">
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
eParameters子元素对应着操作的参数,它的name属性对应参数的名字,eType属性对应着参数类型。
分享到:
相关推荐
EMF不仅支持模型到代码的转换,还支持从代码到模型的逆向工程,这意味着开发人员可以在开发过程中随时调整模型,并自动更新相应的代码。此外,EMF还支持模型之间的互操作性,确保不同工具之间模型的一致性和可交换性...
在科学研究中,EMF可以用于定义实验模型、分析模型、仿真模型等。 总之,EMF提供了一种灵活、高效、强大的模型驱动开发方式,它不仅简化了开发过程,提高了开发效率,而且促进了软件工程的标准化和自动化,为构建高...
EMF(Eclipse Modeling Framework)模型文件对比/比较(emf.compare)是针对基于EMF构建的模型文件进行差异分析的工具。EMF是Eclipse项目中的一个子项目,它提供了一种创建、操作和共享复杂的领域特定语言(DSL)...
《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...
EMF提供了运行时环境(EMF Runtime),使得模型可以在应用程序中被实例化、修改和保存。这个环境支持动态加载和解析模型,以及持久化模型到磁盘。 6. **EMF插件** 插件是EMF生态系统的重要组成部分,它们扩展了...
【标签】"emf runtime 2.7.2" 指的是这个组件是EMF框架的运行时部分,主要负责在Eclipse环境中运行由EMF生成的模型驱动的应用程序。版本2.7.2表示这个运行时环境包含了针对该框架的一系列改进和修复,以确保与不同...
通过EMF QL,开发者可以方便地检索、分析和修改模型数据。 总结来说,EMF Eclipse是一个强大的元建模框架,广泛应用于软件建模和代码生成。通过学习EMF,开发者能够构建自己的领域特定语言(DSL),创建模型并自动...
EMF(Eclipse Modeling Framework)是Eclipse基金会提供的一种强大的模型化框架,它主要用于构建基于模型的应用程序。在处理XML数据时,EMF提供了一种高效且灵活的方式,能够将XML文档转换为可操作的对象模型,进而...
Eclipse Modeling Framework(EMF)是Eclipse项目中的一个核心组件,它提供了一种模型到代码的转换机制,使得开发者可以构建基于模型的软件系统。EMF是基于OMG的Meta-Object Facility(MOF)标准,允许开发人员创建...
将现有的XML或UML模型导入到EMF中,然后利用EMF的工具对其进行扩展和维护。 ##### 2.2 EMF编辑器与代码生成 **2.2.1 生成的插件** EMF自动生成的插件包含了编辑器、视图和其他相关组件。 **2.2.2 通过GenModel...
虽然传统的面向对象分析与设计(OOA/D)工具可能成本较高,但EMF只需要定义类及其属性和关系的简单模型,因此降低了入门门槛。 **定义EMF模型** 在EMF中,开发者首先定义模型元数据,这包括类、属性和关系。元数据...
在EMF中,元模型通常使用Ecore语言编写,这是一种XML-based的语言。 2. **模型实例(Model Instance)**:基于元模型创建的具体数据结构实例,是元模型的具体化,可以理解为实际的数据对象。 3. **生成代码(Code ...
在Eclipse VE(Visual Editor)环境中,EMF提供了模型和视图之间的桥梁,使得开发人员可以更直观地设计和修改应用模型。通过持续更新和改进,EMF已经成为许多大型企业级软件项目的核心组成部分。
EMF(Enhanced Metafile)是一种图形文件格式,主要用于存储矢量图形和光栅图像,常见于Windows操作系统中。这种格式被设计为增强型的WMF(Windows Metafile)格式,支持更多的颜色和更高的分辨率。EMF文件可以包含...
EMF(Enhanced Metafile Format)是Windows操作系统中用于存储图形图像的一种文件格式,它扩展了早期的WMF(Windows Metafile Format)格式,提供了更高级的功能和更高的图像质量。这个压缩包包含了深入理解EMF文件...
Ecore是EMF中定义的元模型,用于描述模型的结构。Ecore是一种自描述的模型,它位于MOF规范中的M2层,与UML元模型的位置相同。使用Ecore元模型可以定义具体的.ecore模型文件,这些模型文件位于M1层,而它们的实例则...
Eclipse的EMF(Eclipse Modeling Framework)插件是一个强大的模型驱动开发工具,它基于Java构建,用于创建、编辑和管理复杂的数据模型。这个插件是Eclipse IDE的一个重要组成部分,特别适合那些需要进行领域特定...