首页 > 范文大全 > 正文

基于Eclipse平台的软件建模工具综述

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Eclipse平台的软件建模工具综述范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘要】Eclipse是一个开源平台,允许集成了众多开发插件。本文从软件建模的角度出发,介绍了最新的软件建模工具插件及特点,分析了软件建模过程。为广大涉及软件建模的研究和工作人员提供一个相关工具的汇总说明和指导。

【关键词】Eclipse;建模;MDA;UML;代码生成

1.前言

在理工科领域里,模型一词非常流行。但凡是产生什么产品,或者预测什么结果都要先建立模型,再由模型制作出产品或计算出结果。之所以需要模型,是因为修改模型或者在模型上实验的成本低,另一方面模型可以被机器理解,生产或者计算过程机器可以自动完成。

为软件建模的情况又如何呢?受其他工业经验的启发,建模也被引入到软件工程中,尽管尚有不足,但也由来已久。早在上世纪七八十年代,建模语言就已经形形,在1997年由OMG公布了统一建模语言(UML),这是软件建模历史上一个里程碑。至后来,UML逐渐被接受,成为市场上占有率最高的建模语言。2001年,OMG提出MDA,希望软件模型不仅仅是能被工程师广泛理解的程序表示图,更能够被计算机理解,自动生成符合预期的代码。至此,软件建模又开启了一个新纪元,OMG相继若干标准,并被诸多公司接受。很多大的公司开发了商用建模工具,如我们熟知的Rational Rose。在开源免费的阵营中,基于eclipse平台的建模平台成为备受关注的焦点。

2.UML建模工具

统一建模语言(UML)如今已经发展到2.4.1版本,各种UML建模工具层出不穷,最有名的要数Rational Rose,不过目前IBM推出了Rational Software Architect来代替Rose。另外一款相当强大的UML建模工具是MagicDraw。

在Eclipse平台上,Papyrus是较著名的图形化UML建模工具,除了支持UML2外,还支持MARTE和SysML建模语言。

Papyrus不能支持全部的UML图,但也足够使用。这包括类图、包图、profile图三种结构视图,以及状态机图、活动图、用例图、顺序图和通信图五种行为视图。

Papyrus直接使用XMI(XML-based Metadata Interchange)格式记录模型。

XMI是OMG颁布一个规范,目的是帮助使用UML以及不同语言和开发工具的程序员彼此交换数据模型。XMI标准化了任意元数据集的描述。

用文本阅读器打开uml文件,可以看到模型被记录的格式:

图1 UML模型的XMI格式

Eclipse下使用XMI表示模型,各种工具间也是通过XMI文件来实现模型交换的。譬如用UML Model Editor工具打开这个XMI,就可以看到一个树形结构展示的UML模型。事实上UML Model Editor也可以用来编辑UML模型,但它不是图形化的,用起来不直观。

2.1 使用Constraints限定模型

Papyrus允许定义约束(constraint)来限定模型,可以用OCL(Object Constraint Language)、JAVA或者自然语言来描述约束(如图2所示)。

图2 使用constraints的UML模型

对于OCL写的constraint,papyrus可以生成模型验证插件,用来执行模型。对于不能用OCL表达的constraint,可以使用JAVA来描述。

OCL的另一个用途是用于模型查询,这在模型转化的时候非常有用。

2.2 使用profile扩展UML

UML是统一的,但不是万能。所以UML并不能建模所有的软件和系统。譬如UML无法用专门的元素表示J2EE Herbinate中的Bean。但是UML提供一种扩展机制,允许用户丰富UML语言,这被称为profile。

Profile包括三类元素:stereotypes、tagged-value、constraints。

stereotypes允许用来扩充UML中的概念,比如定义一个<<bean>>,也可以用来修饰关系。

tagged-value允许为stereotype定义属性,譬如定义bean的版本。

constraint用来定义UML图中表现不了的约束信息。譬如定义bean的名称必须以Bean结尾。

papyrus提供了profile类型的工程,用来建立profile。但从papyrus提供的文档来看,它的profile中并没有提供tagged-value。但是它允许在stereotype上定义property,可以认为是tagged-value。

图3 模型的层次

3.Eclipse下元建模工具

模型分为四个层次:M3(元元模型)、M2(元模型)、M1(模型)、M0(模型实例)。M3用来建立M2模型,M2用来建立M1模型,M1是M0的抽象模型。可以用图3来理解。

M2对应的就是UML语言,当然在M2层次上还有很多其他语言。也可以用M3中的元素定义自己的语言。

图3中,使用M2的Class和Association两种元素建立了M1模型,表达了一种人和人的关系。M1层的抽象模型,正是从无数M0层实例抽象概括得来的。

图4 元模型

图5 DSL建模工具

图6 MDA过程

图7 建模平台体系结构

M3层也是一种语言,它是自描述的。OMG的MOF(Meta Object Facility)就是M3模型。Eclipse定义了Ecore模型,也是M3模型,它比MOF更简单。OMG受此影响又提出了EMOF,其模型结构跟Ecore很像。

在Eclipse中,建模并不仅指用UML建立模型,而是指用M3建立M2,以及用M2建立M1。EMF(Eclipse Modeling Framework)是Eclipse平台中建模的基础框架。

用户可以使用Annotated Java、Rose class model、XML Schema建立元模型。通过 EMF的模型导入生成 Ecore 模型。也可以使用Ecore Diagram Editing来创建、编辑Ecore模型。

当面向某个领域创建了M2层的模型,就得到一个领域特定语言(domain specific language,DSL)。可以像使用UML一样,使用DSL来建立M1模型。

GMF(Graphical Modeling Framework)可以将元模型作为输入,生成DSL的图形化建模工具(如图5所示)。

GMF提供诸多高级功能,例如支持验证。比如可以限定每个模型元素只允许一个连接,EMFT(Eclipse Modeling Framework Technology)使用Java代码和OCL来定义验证器。

4.模型转换工具

MDA的目标是通过模型生成代码,其指导过程,如图6所示。CIM,计算无关模型。这个模型完全用DSL中的语言元素来建立模型,其中不涉及与计算相关的语言元素。如,矩形、圆、长、宽、半径等都是几何领域的语言。PIM,平台无关模型。它关心计算机实现,但不关心平台。如将长、宽、半径转换成像素概念。

PSM,平台相关模型。它关心具体实现的平台,包括编程语言、操作系统、数据库、中间件等。如,矩形用Java实现的类名、属性,矩形数据结构在MySQL中的存储设计。

最后,通过PSM生成代码。

机器可以根据“规则”自动完成模型到模型的转换。关于模型转换和规则的定义,OMG提出了Model2Model规范。

QVT(Query/View/Transformation),就是OMG提出的规范性模型转换语言。Operational是指令性语言,QVT提供了Operational Mappings和Black Box。Operational Mappings 可以使用OCL表达式和命令式的语句,Black Box可以在执行变换时执行外部代码,这使得变换定义更具形式化和灵活性。

Eclipse的QVT Operational SDK是OMG Operational Mappings的实现。支持Black-box,可以使用OCL类型和Java类型,可以调用Java程序来出来复杂的转换。支持断点调试运行。

下面是一段Operational QVT编写的转换规则:

--以下声明使用的元模型

modeltype UML uses 'http:///uml2/4.0.0/UML';

modeltype ecore uses 'http:///emf/2002/Ecore';

modeltype xhtml 'strict' uses 'http:///1999/xhtml';

--声明导入的库

import webLibrary;

import m2m.qvt.oml.ExampleJavaLib;

--声明一个转换模块

transformation CIM_To_PIM(in cim : UML,in profile : UML, out pim : UML,out web : xhtml)

--模块的入口操作

main() {

cim.rootObjects()[UML::Model]->map model2WebModel();

}

--把<<CIM>><package>转换成同名的<package>

mapping UML::Model::model2WebModel() : UML::Model {

name := self.name+'_Web_PIM';

result.applyProfile(web_prof);

this.web_model := result;

packagedElement += object UML::Package{

name := "EnumerationPacakge";

};

packagedElement += self.nestedPackage->

any(p|p.isAppliedStereotype('CIM')).

nestedPackage->map function2package();

}

… …

5.代码生成工具

OMG在模型到文本的转换方面提出了MOF Model to Text Language(MTL)规范。它提供了一种转换语言,定义规则将模型的不同的部分映射成不同的文本。

[template public classToJava(c : Class)]

class [c.name/]

{// 声明属性

[for(a : Attribute | c.attribute)]

[a.type.name/] [a.name/];

[/for]

// 声明构造函数

[c.name/]()

{}

}

[/template]

如上面一段规则,将模型中的class元素映射成Java 中的class。

Eclipse平台上,代码生成工具较多,如Xpand、Acceleo。其中Acceleo是较优秀的一款,Xpand的使用者也很多。Acceleo遵循了OMG的MTL标准,由法国Obeo公司研发,专门用于MDA过程中代码生成的产品,并且是免费开源的。Acceleo还内置了模板,为生成JEE、PHP、.Net代码提供方便。

6.总结

这里所介绍的Eclipse的建模平台体系结构如图7所示。

Eclipse的官方提供了专门用于建模的Eclipse平台,和专门的Model Devleopment Tools(MDT)工程,很多建模工具都在这里。比较遗憾的是,很多工具的文档都不是很完善,仅依靠文档还是难以解决应用中的问题。在Eclipse的论坛中有很多工具使用的话题和经验分享,是解决应用问题的好地方。

参考文献

[1]Dave Steinberg.Eclipse Modeling Framework[M].US:Addison-Wesley,2008.

[2]Richard C.Gronback.A Domain-Specific Language Tookit[M].US:Addison-Wesley,2009.

[3]Jos Warmer.The Object Constraint Language,The:Getting Your Models Ready for MDA,Second Edition[M].US:Addsion-Wesley,2003.

[4]Meta Object Facility(MOF)2.0 Query/View/Transformation Specification[Z].OMG.2011.

[5]MOF Model to Text Transformation Language,v1.0[Z].OMG.2008

[6]Papyrus help[Z].Eclipse.

[7]Acceleo help[Z].Eclipse.

作者简介:聂百川(1986―),男,辽宁大连人,系统工程师,国家系统分析师,现供职于绿盟科技。