没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记163(2007)29-43www.elsevier.com/locate/entcs使用面向对象技术改进元模型的重用*A. M. J. Torres Valderrama2塞维利亚大学语言和计算机系统系西班牙塞维利亚摘要元建模是模型驱动开发(MDD)研究领域的一个热点问题.为了在不同的MDD方法中可重用,元模型应该不知道被另一个元模型扩展。元模型的这种特性称为遗忘性。本文表明,目前的技术实现元模型不保持遗忘时,扩展元模型的一些元素和原模型的元素有关联关系。分析了三种不同的元模型重用方法。其中一种方法使用传统的面向对象技术。另外两种方法使用面向方面的技术。该论文表明,第三种方法,通过使用关系方面,将关系视为实现级别的一等公民,保证了元模型的遗忘性。保留字:元建模,面向对象编程,模型驱动架构。1介绍模型驱动开发(MDD)由两种主要方法支持:由Microsoft推广的软件工厂(SF)[11]和由对象管理组(OMG)[16,5]推广的模型驱动架构(MDA)[19软件工厂方法建议使用可扩展和可配置的工具来自动开发和维护不同的软件产品系列。自动化是通过不同组件的组成和配置来实现的因此,软件工厂方法集成了多种活动和技术。其中一项活动是开发各种建模语言和特定领域的工具。这项工作得到了西班牙科学和技术部和联邦经济发展研究基金(TIC-2003-369)的部分支助。1电 子 邮件地址:mailto:reinaqu@lsi.us.es2电子邮件地址:mailto:jtorres@lsi.us.es1571-0661 © 2007 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2006.10.01430上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)291. *源目标1. *符合1. *1元模型代码PSMPIMCIM转型模型模型驱动架构方法基于OMG提出的建模标准:统一建模语言(UML)[22]和Meta Object Facility(MOF)[20]。MDA提出了一个由不同层次的建模组成的框架:计算独立模型(CIM),平台独立模型(PIM),平台特定模型(PSM)和模型转换。因此,模型和转换已经成为一等公民。图1显示了MDA方法的主要元素的MOF图。Fig. 1. MDA方法除了CIM、PIM、PSM和转换之外,图1还显示了MDA的另一个重要元素:元模型。元模型是一种特殊的模型,它描述了另一个模型的抽象语法因此,元模型已经成为两种MDD方法的关键元素。在这种情况下,定义和实现可以重用的元模型是非常有前途的[2]。催化方法[7]引入了两种元模型重用机制:包扩展和包模板机制[4]。在本文中,我们将重点放在包扩展机制。 如果MMA指定MMB,则元模型MMA扩展元模型MMB。因此,MMA元模型的任何元素都与MMB元模型的任何元素有关系。这种机制允许分别定义MMA和MMB元模型,并将它们合并在一起。为了提高元模型的重用性,重要的是保持遗忘性,即MMB对MMA的不了解。我们分析了实现元模型的三种不同方法,以了解它们是否保持了元模型的遗忘性。 第一种方法使用继承来使原始元模型不被注意,以便使用传统的面向对象技术解决问题。第二种和第三种方法是基于面向方面的技术[9,10]。第二种方法引入了类型间声明,而第三种方法将元模型中的关系视为方面[23]。在本文中,我们表明,第三种方法保证遗忘的元模型,促进元模型重用。本文的结构如下:第2节介绍了主要的元建模概念。在第3节中,介绍了用于实现模型和元模型的Eclipse建模框架。第4节介绍了扩展元模型时出现的问题。第5节分析了扩展元模型的三种不同方法第6节从分析中得出结论上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2931M2:(元模型)UML类- 姓名UML属性- 姓名M0:系统<<实例>><<实例>>目标1:客户title =“博士”name =“无名氏”:客户title =“博士”姓名:Frank Else:订单名称=“某件事”编号=“12345678”<<实例>><<实例>><<实例>>实例M1:系统型号<<实例>>客户- 标题- 姓名秩序- 姓名<<>>-number的实例<<实例>>M3:(元-元-模型)MOF类+姓名2元建模根据[15],元模型是对创建语义模型所需的构造和规则的精确定义。元建模是一种组织相关模型的方法。OMG定义了四个不同层次的建模[14]。图2显示了OMG定义的级别M0、M1、M2和M3之间的关系。MOF位于层次结构的顶部,它被用来定义自己;因此,MOF之上的级别(M3)可以被视为MOF本身。 UML位于M2级别。UML的抽象语法已经使用MOF进行了描述。 UML元模型的一个实例可以看作是一个类图(M1级)。类图的实例化是一个对象图(M0级)。图二. OMG提出的四层元模型体系结构元模型存储库可以分为两大类:• 基于MOF的MOF [20]是对象管理组织(OMG)提出的元建模框架MOF规范与供应商和语言无关。通过MOF规范,OMG已经标准化了一组映射,这些映射指定了特定技术如何表示和管理元数据。例如,XMI [21]是工具之间模型交换的XML表示,而JMI [25]是Java应用程序中元数据的抽象语法定义。一些实现JMI接口的 存 储 库 是 : NetBeans 的 MDR [17] 或 NovoSoft 的 NSMDF [18] 。 CoralMetamodelling Framework [24]具有硬编码的MOF,尽管可以安装其他不同的元模型。Coral不是基于Java,而是基于Python。32上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)29Java代码+注释UML模型XML模式CCoorrreeeMMModeell其他Java代码+注释• 基于ecore的Ecore是Eclipse建模框架(EMF)中包含的元模型[3]。 这与MOF不同。EMF是一种低成本工具以获得正式建模和Java代码生成的好处,并且它依赖于语言。EMF的功能类似于MDR。3Eclipse建模框架(EMF)Eclipse建模框架(EMF)[3]是Eclipse的建模框架。EMF一方面是一个框架,另一方面是一种以下列形式之一定义模型的工具:Java接口,UML图或XML模式。Ecore是使用EMF表示模型的元模型。Ecore本身就是一个Ecore模型,它与MOF具有相同的OMG级别(图2)图3描述了核心模型的不同来源。图3.第三章。核心模型的来源有四个基本的元类来表示Ecore模型:EClass、EAt-tribute、EReference和EDataType。• EClass为类建模。它有一个名为name的属性来存储建模类的名称。它与EAttribute和EReference有组合关系。组合的基数意味着EClass可以有零个或多个属性和零个或多个引用。• EAttribute对属性进行建模。它有一个属性(名称)和与EDataType的关联。关联表示属性必须具有类型。• EReference对类之间关联的两端之一进行它有两个属性:名称和包含。如果关联端表示组合关系,则属性包含为真。最后,EReference与EClass有关联。这个关系对目标类型进行建模,即位于关联另一端• EDataType对属性的类型进行它可以是基本类型(int,float,.)或对象类型。我们使用Java接口来定义核心模型。对于模型的每个类,定义了对于类中包含的每个属性和每个引用,在接口中声明一个标准get()有了这些信息,EMF生成器将推导出模型属性和引用。Java接口和get()方法被注释,以帮助EMF生成器推断上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2933图书:EClass图书library.implBookImpl书模型属性。通过接口和注释,EMF生成两个文件:a.ecore文件和a.genmodel文件。.ecore是一个包含核心模型的XML文件的.genmodel是核心模型的一种包装器,带有额外的信息。生成模型的实现需要这些信息一旦生成了实现,每个Ecore类(也就是每个EClass)对应于Java中的两个东西:一个接口和它对应的实现类。例如,我们的Ecore模型中的类Book将被建模为EMF中的EClass,并且它将被映射到Java接口(公共接口Book)和实现类(公共类BookImpl... 实现Book)。图4描述了这些关系。见图4。 Ecore类与生成的学习之间的如果我们使用带注释的Java定义Ecore模型,我们将只负责编写接口和get()方法(如果需要)。之后,EMF生成器将使用更多的注释和set()方法来完成这些接口。此外,它将生成实现类和所有额外的代码needed.4问题陈述:元模型扩展如果一个元模型被重用,它应该被定义为完全不知道被另一个元模型扩展。为了引入这个问题,我们将两个模型(原始模型和扩展模型)的元素之间的可能关系分为两大类:继承关系和其他关系。下面的小节介绍了两个不同的例子来说明这两种关系对元模型的定义和实现的影响。4.1示例1:通过继承关系进行扩展这个例子是从[8]中得到的。 之所以选择它,是因为它是一个非常简单的介绍性示例。 图5显示了一个名为Library的包,它包含一个库的MOF元模型。这个包包含三个元类(Library、Book和Writer)和一个枚举(BookCategory)。用于写入34上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)29+神秘= 0+科幻= 1+传记= 2«枚举»图书分类-name:图书馆-name:写-category:BookCategory-name:String-pages:int = 100学校图书馆教科书书图书馆::图书馆-name:String图书馆::图书-category:BookCategory-name:String-pages:int = 100资产-value:float图书馆+库1+甘草酸+作家**1+书籍+作者-name:String写-category:BookCategory-name:String-pages:int = 100书+书籍*1-name:String图书馆+神秘= 0+科幻= 1+传记= 2«枚举»图书分类在这个带有EMF的元模型中,必须定义三个接口(每个元类一个)。在每个接口中,应该编写许多get()方法(每个属性一个get<$()方法,每个引用一个get <$()方法)。此外,应该为枚举定义一个新类。图五. 通过继承关系图 6 显 示 了 使 用 EMF 实 现 Library 元 模 型 的 一 部 分 : Library 元 类 和BookCategory枚举。包库;导入java.util.List;/*** @model*/公共接口库{/*** @model*/String getName();软件包库;/*** @model*/public class Uncategory{/*** @model name=“神秘”*/public int findDuplicate = 0;/*** @model type=“Writer”containment=“true”*/getWriters();/*** @model name=“ScienceFiction”*/public static final int i = 1;/*** @model type=“Book”containment=“true”*/List();}/*** @model name=“传记”*/public static final int count = 2;}图六、使用Java表示法的库EMF元模型的一部分图5显示了扩展Library包的SchoolLibrary包从MOF模型的角度来看,这个扩展 意 味 着 SchoolLibrary 包 包 含 两 个 类 ( Book 和 Library ) , 它 们 具 有 <>中的构造型。这个构造型意味着那些元类属于Library包。在图6中,将包的名称放在类的名称(Library::Book)之前。图7显示了SchoolLibrary和SchoolBook接口中的extends子句。这些句子表达了类对SchoolLibrary-Library和SchoolBook-Book之间的继承关系。 Book和Library类不应该被修改。因此如学校图书馆-location:String上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2935包schoollibrary;/*** @model*/公共接口SchoolBook扩展了Book,Asset{}包schoollibrary;/*** @model*/公共接口学校图书馆扩展图书馆{/*** @model*/String getLocation();}结论是,如果我们通过继承的方式扩展一个元模型,则保持了原始元模型的遗忘性。见图7。 SchoolLibrary扩展包4.2示例2:通过关联进行图8示出了两个包之间的关系。最初的包名为com.metamodels.java2,它是从[6]中获得的,它是UML元模型的一个版本,它将UML元类裁剪为Java2规范。aspectj包包含了一个Apache J元模型,它根据Apache J规范[1]扩展了Java元模型。Apache J是Java开发面向方面应用程序的扩展从[12]中获得了ANOJ<<扩展>>见图8。 包关系图9显示了MOF Java 2元模型。大多数元类与对应的UML元类使用相同的名称。我们关注与我们的示例相关的元类:元素、泛化、特征和参数。彼得。Generalization类对类(类和/或接口)之间的关系进行建模、扩展和实现。该类的实例表示子类型和超类型之间的继承关系它还可以表示类和接口之间的关系。一个特征代表了可以在类或接口中声明的东西(字段,构造函数或普通方法)。Parameter 类 抽 象 方 法 或 构 造 函 数 中 的 参 数 该 关 系 由 Parameter 和 Be-AorialFeature之间的组合关系表示。 参数也与类型相关。在注释Java中,这个元模型的规范为每个元类包含一个接口,为每个枚举包含一个最终静态类。图10示出AspectJJava236上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)29类型- 类型- 特征特征-name[1]:String-modifiers[*]:修改器*- 超级0..1*- 会员泛化- 业主1*- 亚型现场行为特征分类器-name:String- 修饰符:ClassModifier1-S型-subtipo *原始类型-kind:-initVal:String-body:*方法构造函数接口元件«枚举»ClassModifier+公共+保护+民营+摘要+静态+strictfp见图9。 ANOJ元模型生成元类Feature和Class所需的代码。特性有两个属性name和modifiers,它们在实现中被转换为两个get()方法,getName和getModifiers。特征也与类型和分类器有关。第一种关系是关联关系,第二种关系是合成关系。 从Feature的角度来看,这两种关系之间没有区别:有两个get()方法(getOwner和getTypefeature)具有相反的注释。此注释引用关联另一端的名称。 这两种关系之间的区别分别在类Type和Classifier中指定。Type接口将有一个名为getFeatures的get()方法,而Classifier接口将有一个带有额外注释(containment=true)的get()方法(getMem- ber)。 这个包含注释具有组合语义。Java2元模型由图11中描述的元模型扩展。与上一节介绍的示例一样,在建模级别,重用com.metamodel.java2包的一些元类是没有问题的我们只需要用构造型<>来标记类。 图11示出原型类、泛化、特征、元素和参数。Element和com.metamodel.aspectj包具有继承关系. Class与Pointcut、Parameter与Pointcut、Parameter与Advice之间存在组合关系。 概括与体有关联关系,特征与体有关联关系部分。如果我们想实现这些关系,我们需要声明get()方法-staticInit[0.. 1]:块-instanceInit[*]:块类«tipo de datos»块«枚举»隐私修改器+民营+保护+公共+静态+摘要+最终+随板+同步+瞬变+挥发性+strictfp«枚举»PrimitiveTag+boolean+字节+短+int+长+浮+双+char上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2937包com.metamodel.java2;导入org.eclipse.emf.common.util.EList;/*** @模型*/public interface Feature extends Element{/*** @模型*/String getName();/*** @模型* type=“com.metamodel.java2.configureModifier”*/System. out. println();/*** @model opposite=“member”*/int getOwner();/*** @model opposite=“features”*/String getString();包com.metamodel.java2;导入org.eclipse.emf.common.util.EList;/*** @模型*/public interface Class extends Classifier{/*** @模型* dataType=“com.metamodel.java2.Block”*/int getInit();/*** @模型* dataType=“com.metamodel.java2.Block”*/int n = getInit();/*** @模型*type=“com.metamodel.java2.BehavioralFeature”* 相反的=“thrownoung”*/System. out. println();}见图10。 Java 2实现in the interfaces接口.图12显示了其中的两个接口,Pointcut和Aspect。Pointcut接口包含一个名为getDeclarer的带注释的方法,该方法对Pointcut和Class之间关系的一个边界进行建模。但是为了对关联的另一端进行建模,Class接口中应该 包 含 一 个 新 的 带 注 释 的 get ( ) 方 法 , 该 方 法 带 有 一 个 annotationcontainment=true 。 因 此 , 在 这 一 点 上 , 我 们 需 要 修 改 类 接 口 , 因 此 ,com.metamodel.java2包意识到正在使用com扩展。<$metamodel.aspectj包。当我们试图实现方面和特征之间的关联时,也会出现同样的问题。getIntroducedFeatures方法实现了关系的一端,但是为了实现另一端,我们必须在Feature接口中声明一个新的get方法。因此,如果我们使用与继承不同的关系扩展元模型,原始元模型的遗忘性就丢失了。5利用方面技术提高Meta模型的重用性本节描述了制作com.metamodel.java2不知道被另一个元模型扩展。第一个是基于基于传统的面向对象的继承机制,而第二和第三个是基于面向方面的解决方案[13]。38上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)29见图11。 Java2元模型5.1第一种方法:继承第一种方法基于传统的面向对象解决方案。这种方法背后的思想是使用继承作为唯一可能的元模型扩展机制。这个假设意味着我们必须在新的元模型中创建一个新的虚元类,它将扩展原始元模型中的类图13说明了这个想法。此图显示了应用此方法后com.metamodel.aspectj如果我们将图13中显示的摘录与原始AspecJ Meta进行比较,在图11中描述的模型中,我们看到一个名为Class的新元类。 这个元类继承自com.metamodel.java2包中声明的元类Class。原始元模型中Java2::Class和Pointcut之间的组合关系(图11)在图13中被Pointcut和Class之间的组合所取代。因此,如果我们对两个包中包含的类之间的所有关系应用相同的方法,那么在com.metamodel.java2包中就有了四个新类。尽管这种方法很简单,但它有一个不便之处:我们的aspectj元模型实现与一组实现类纠缠在一起上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2939package com.metamodel.aspectj;import com.metamodel.java2.Feature;importorg.eclipse.emf.common.util.EList;import com.metamodel.java2.Class;import com.metamodel.java2.Parameter;/*** @模型*/public interface Pointcut extends Feature {/*** @模型* type=“com.metamodel.java2.Class”* 下界=“1”上界=“1”*/int getName();/*** @模型* type=“com.metamodel.java2.Parameter”* containment=“true”*/System.out.println()/*** @model type=“PointcutExpression”* containment=“true”lowerBound=“0”* upperBound=“1”*/getString();/*** @model type=“PointcutExpression”* opposite=“pcOperand”*/getString();}包com.metamodel.aspectj;import org.eclipse.emf.common.util.EList;import com.metamodel.java2.Class;import com.metamodel.java2.Feature;/*** @模型*/public interface Aspect extends Class{/*** @模型*/boolean isList();/*** @模型*/getPerClause();/*** @model type=“Advice”containment=“true”*/System. out. println();/*** @模型* type=“com.metamodel.java2.Generalization”*/System.out.println()/*** @model type=“com.metamodel.java2.Feature”*/System. out. println();/*** @model type=“DeclareSoft”* containment=“true”*/System. out. println();/*** @model type=“DeclareWarning”* containment=“true”*/System. out. println();/*** @model type=“DeclarePrecedence”* containment=“true”*/System. out. println();/*** @model type=“DeclareError”* containment=“true”*/见图12。ANOJ实施5.2第二种方法:类型间声明第二种方法受到了AJ的启发。这个想法是引入一个新的构造器,它可以被EMF生成器理解,以便处理方面。构造函数将是一个方面,并且在AIDJ中,我们唯一要做的就是引入一个类型间声明。因此,为了实现Class和Pointcut之间的关系,我们将编写类似于图14中所示的代码。40上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)29import com.metamodel.java2.Class;导入org.eclipse.emf.common.util.EList;/*** @模型*/public aspect ClassAsp {/*** @model type=“com.metamodel.aspecj.Pointcut”* containment=true**/public int findDuplicate();}Java2::Class-staticInit:Block-instanceInit:块方面- islogged:Boolean-perClause:AZEROKind图十三. 应用继承方法见图14。 使用类型间声明如果使用了ANOJ语法和编译器,那么图14中所示的解决方案会出现一个问题:只有类可以有类型间声明。但是,我们的类是一个接口。为了解决这个问题,EMF发生器应该忽略这一点错误并为类ClassImpl生成一个方面。 EMF发生器应阅读并使用方面中包含的注释5.3第三种方法:关系方面第三种方法是将亲属关系视为一等公民。虽然在建模层面上关系被视为一等公民,但在实现层面上并没有保持同样的待遇。在这个级别上,关系的实现是手工制作的,并分布在参与这些关系的对象在[23]中已经提出将这些关系建模为可分离的横切关注点。为了阐明这种方法,我们将介绍一个从[23]中获得的关系方面的例子图15显示了参加某些课程的学生如果我们想要实现图15的UML图,我们必须硬编码*1切入点庄家切入点类上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2941public class Structured {String name;String number;HashSet Course>参加;}导入java.util.hashSet;public class Uncategorized {字符串编码;字符串标题;工作负载;HashSet Student>参与者;}public class Structured {String name;String number;}导入java.util.hashSet;public class Uncategorized {字符串编码;字符串标题;工作负载;}public aspect Attends extends StaticRel Student,Course>{}当然学生出席-code:String-title:String- 工作量:-name:String- 编号:--图15. 显示参加某些课程学生与课程的关系。图16示出了该图的可能实现。在Student类中有一个attends属性来实现关系的一端,在Course类中有attendants属性来实现关系的另一端这种方法的语法与ANOSJ语法完全兼容。图16. 图15的UML图的实现使 用 在 [23] 中 提 出 的 关 系 方 面 库 ( RAL ) , 关 系 Attend 被 实 现 为 扩 展SimpleStaticRelationship的方面,SimpleStaticRelationship是RAL库中的一个通用方面。图17显示了这个实现。图17. 图15的UML图的实现在图18中,我们将此方法应用于实现AIDJ元模型的Poincut和Class之间的关系。我们在元模型中为每个关系定义了一个对象,而不是在接口中手工编写表示关系结束的get()方法这个方面扩展了一个抽象方面,这个抽象方面应该在方面关系库中定义这个图书馆可以是[23]或我们的新创造。 有一些局限性,图书馆应该考虑到这一点。 目前实施的42上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)29import com.metamodel.java2.Class;/*** @model**/public aspect PointcutDeclaration extends CompositionRel Class,Pointcut>{}由 于 名 称 问 题 , RAL 库 不 支 持 相 同 类 之间的两 种不同 关系 。例 如 , 在com.metamodel.aspectj包中,我们会遇到定义Pointcut和PointcutExpression之间的关联和组合关系的问题。图18. 实现切入点和类6结论和进一步的工作本文提出了一个问题,当试图扩展一个元模型与继承不同的关系。在这种情况下,原始元模型并不是被遗忘的,因为它应该被修改以实现扩展。研究了解决这一问题的三种不同方法。 第一种方法是基于传统面向对象语言的继承机制虽然这是一种简单的方法,但它允许使用仅在实现时需要的不同虚拟类来第二种方法引入了类型间声明。这种方法有一个不方便之处:ANOSJ编译器不允许对接口使用类型间声明。第三种方法将关系视为实现层面的一等公民。这些关系被定义为方面。关系方面库(RAL)[23]已经被作为一个例子,但这个库应该被扩展到处理更多种类的关系。此外,RAL库只允许定义类之间的一种关系,这对于元建模来说是不够的。作为对这三种方法的分析结果,我们认为第三种方法是改进元模型重用的更好选择,因为这种方法允许- 本地化和重用关系;- 减少元模型实现的耦合此外,使用第三种方法,我们可以利用ANOJ编译器。这种方法中所需的代码可以由ANOSJ编译器验证在未来的工作中,我们打算调整RAL库以满足我们的需求。这意味着解决了RAL库中的一些问题,例如在两个类之间定义两个不同关系时出现的命名这也意味着有必要在RAL图书馆内定义各种关系。我们还计划将这些新的面向方面的特性添加到当前的建模和元建模框架中。上午Reina Quintero,J.Torres Valderrama/Electron.注意Theor。Comput. Sci. 163(2007)2943引用[1] AJ团队。ANOW J编程指南(v.1.2)。可在:http://www.eclipse.org/aspectj网站。2003年。[2] J. Bezivin,F. Jouault,P. Valduriez. 第一次使用模型编织器的实验。模型驱动软件开发最佳实践研讨会的会议记录与OOSPLA会议一起举行。2004年[3] F. Budinsky, D. Steinberg,E.梅克斯 河Ellersick, T. J·格罗斯 Eclipse建模框 架:开发 人员Addison-Wesley,2003年。[4] T.克拉克,A.埃文斯,S。肯特一个包扩展与重命名的元模型。UML会议论文集(UMLLCNCS 2460,pp.305-320,2002年。[5] S. Cook,Domain-Specific Modeling and Model Driven Architecture,MDA Journal。2004年1月[6] S.Dedic和M.MatulaMetamodel for the JavaLanguageAvalaible at:http://java.netbeans.org/models/java/java-model. 赫特湖[7] D. D'Souza,A.威利斯UML的对象、组件和框架:催化方法。Addison-Wesley,1998年。[8] Eclipse,《生成扩展EMF 2.1模型》,可在http://www.eclipse.org/emf找到。2005年7[9] T.埃尔拉德河E. Filman,A.巴德面向方面编程。 ACM的通信。第44卷,n. 10.,十月2001年[10] R. E.Filman,D. P.弗里德曼。面向对象的编程是量化和遗忘。高级关注点分离研讨会论文集,OOPSLA2000。2000年10月[11]J. Green field,K.肖特,S。库克,S。肯特软件工厂使用模式、模型、框架和工具组装应用程序。WileyPublishing,Inc.,2004年[12] Y.汉,G. P.,A.克莱姆斯基于元模型和建模符号的Visual AIDEAJ。第六届面向对象建模国际研讨会论文集,与第四届面向对象软件开发国际会议(AOSD'05)一起举行。芝加哥,伊利诺伊州,美国。2005年3[13] S. 哈嫩贝格河Unland. 关于AOP和继承:Mehner,K.,Mezini,M.,Pulvermller,E.,Speck,A.(Eds.):实习指导-讲习班。Paderborn,Mai 2001,Paderborn大学,技术报告,tr-ri-01-223,2001。[14] A. Kleppe,J.Warner,W.最好MDA解释:模型驱动架构:实践和承诺。Addison-Wesley,2004年。[15] metamodel.com可在:http://www.metamodel.com/staticpages/index.php?粤ICP备050105697号.[16] J.穆尼奥 斯 河。 Pellechano. M DA与 Fact orr'elenasSoftware.SecondWork s h oponModel-DrivenDevelopment,MDA and Applications(DSDM'05). pp. 1- 10.西班牙格拉纳达。2005年9[17] NetBeans。 元数据存储库(MDR)。请访问:http://mdr.netbeans.org/。[18] Novosoft。NovoSoft元数据框架。请访问:http://nsuml.sourceforge.net/。[19] OMG,MDA Guide Version 1.0,Eds. J. Miller和J. Mukerji。2003年5[20] OMG,Meta Object Facility Specification Version 2.0,2006年1月。[21] OMG.MOF 2.0/XM
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功