Acceleo是OMG的MOF Model to Text Language (MTL)标准的实现,由法国Obeo公司研发,专用于MDA过程中的代码生成,能够有效提高开发效率。接下来的几天,我将对Acceleo进行全面的介绍,希望对大家有所帮助,并欢迎交流。
一、背景知识
1、元模型
大家都知道,模型是用具有精确语法和语义的语言对系统的抽象表示。那么,什么是元模型(meta model)呢?元模型,即模型的模型,是模型的定义,定义了模型中的内容,是模型的抽象表示。知道了元模型的定义,相信大家对元元模型(即元模型的定义)的概念也都可以举一反三了吧?
可以用地图举例,地图是真实路线的精确表示,因此地图可以认为是模型。而对地图的图例(legend)定义了地图模型由哪几部分组成、以及各部分的语义,如果没有这些图例,我们就看不懂这个地图,所以图例可以认为是地图模型的元模型(当然,我们平时不需要看图例也能看懂地图,因为所有地图的图例都是一样的)。不仅如此,所有图例元模型还都基于同一个元元模型,即每种颜色代表一种特征,所以有了相同的元元模型,在不同的地图之间保持一致就方便多了。计算机科学中也用到了类似的思想设计软件,一般用MOF表示元元模型。
2、MOF
元建模领域是非常广阔的,因为对于同一个概念,可以有数不清的方法来抽象表示。例如,同样的地方的城市、路线、地貌等可以用多种多样的地图来表示。因此OMG提出了元建模技术的标准,并在今天得到了广泛认可,这就是MOF(Meta Object Facility)。MOF可以用非常有限的词汇,表示所有的元模型类型。MOF是一种元元模型。
3、XMI
XML Metadata Interchange是OMG定义的一种模型转换标准。XMI可以将模型或元模型序列化xmi格式,从名字上可以看出,XMI格式XML的扩展。XMI实现了模型转换过程中的模型互操作性。注意一点,相同的元模型可以被序列化成不同的XMI格式。
4、EMF
Eclipse Modeling Framework是为简化Eclipse环境中模型的加载、编辑及存储等操作而提出的。它并不只适用于元模型,而是可以处理所有的模型。EMF基于一种元模型的描述标准Ecore。Ecore是EMOF((Essential MOF)的子集(EMOF同时也是MOF2的子集)。
5、UML
相信大家对UML比较熟悉了,这里就不多介绍了。UML有自己的元模型,分别定义了类、类中的属性、方法、类的关联等。UML在大多数情况下,尤其是非正式场合能表示非常多的概念,但有时我们仍然需要定义更加形式化的建模语言,来满足不同需求,例如AADL。
6、其它元模型
UML并不能表示所有的场合,当然我们可以使用UML profiles或原型的概念扩展UML,但这样很容易达到极限,即需求与UML元素的原始语义偏离甚远的时候。因此,我们需要专用的元模型来满足不同场合的需求,通常把这种元模型称为DSL(Domain Specific Language)。目前,DSL技术已经得到广泛使用,下面是建立新DSL的基本步骤:
- 定义建模概念及相关语义
- 用MOF或EMF图的概念表示这些概念
当然,定义自己的DSL也有非常多的困难,举几个例子:
- 怎样用最好的方式表示概念。这需要有相当多的领域经验;
- 每定义新的元语言,用户就需要重新学习,如果DSL很多,掌握起来有难度;
二、总结
此文讲解了元模型的相关背景知识,下文将介绍Acceleo在这些概念基础上的应用——模型到代码的生成。