魏 菲,李慧,陈月娟,张京军
(1.河北工程大学 信息与电气工程学院,河北 邯郸056038;2.邯郸学院 计算机系,河北 邯郸 056005)
MDA是近年来软件工程中研究和实践的热点,模型在软件开发过程中占有重要的地位。MDA开发过程的核心思想是:对系统进行需求分析和设计,建立反映系统核心业务思想的平台无关模型PIM(Platform Independent Model),然后PIM经过MDA工具的转换生成基于特定平台的平台相关模型PSM(Platform Specialize Model),PSM再经过MDA工具的转换生成源代码,最后进入代码测试和维护,如图1所示。
1)平台无关模型PIM:平台无关模型PIM是反映系统的主要业务的模型,是对业务需求的一种纯理论的反映,根据准确的需求分析得到的结果来进行建模的,这个模型设计好后,可以供其它系统重复使用。
2)平台相关模型PSM:平台相关模型PSM是将PIM通过模型规则转换成与特定技术和平台相关的模型,比如基于.NET平台、Spring平台等。PIM可以转换成一个或多个PSM。
建模和模型映射技术是MDA的核心技术,UML(Unified Modeling Language),MOF(Meta Object Facility)及 CWM(Common Warehouse Metamodel)是MDA主要使用的三项建模标准,作为PIM及PSM的建模基础。
UML—统一建模语言:UML是一种元模型,UML模型的表达能力很强,会避免建模过程中不必要的信息丢失。
MOF—元对象设施:MOF用来定义面向对象元模型的基本元素、语法和结构[4]。它是一种面向对象的元—元模型,为规约面向对象元模型定义了一种公共的抽象语言。
班主任教育失误后,要根据实际情况,有针对性地找学生谈心,向学生解释清楚严厉批评其是因为老师面对的不是一位学生,而是全班几十位学生,老师想通过这件事使全班学生都受到教育,也许批评重了一些,希望其能谅解。通过讲道理,循循善诱,动之以情、晓之以理,帮助学生消除心理障碍,提高思想认识,理解班主任的工作,愉快地接受教育,尽可能减少或消除内心的不满。
CW M—公共仓库元模型:CWM是一组元模型,目的是为了在数据仓库工具、数据仓库平台和数据仓库存储之间建立一个商务智能元数据的交换机制[5]。它覆盖了数据仓库应用的整个生命周期。
ATL着重于模型与模型之间的转换,其语法结构是基于OCL 2.0定义的,适用于表达MDA框架中的模型转换。ATL主要分为三种类型:ATL模块,ATL查询,ATL库。
ATL模块符合模型到模型的转换,通过这种ATL单元能够制定从源模型元素产生目标模型元素的方法。ATL模块的源模型和目标模型必须被各自的元模型“typed”。下面介绍下ATL模型的结构。
1)Header section:头部分定义了符合源模型和目标模型转换的模块名字和变量名字,它也定义了模块的执行模型。有关头部分的语法定义如下:
module module_name;
create output_models[from|refines] input_models。
2)Import section:输入部分可以做选择性的输入,它可以声明必须输入到哪个ATL库中。ATL库声明式的实现如下:
uses extensionless_library_file_name。
3)Helpers:ATL的helpers可以视为java里的方法。helpers尽可能定义分解的ATL代码。一个ATL helpers用下面的元素定义:一个名字,一个文本类型,一个返回值类型,一个ATL helpers代码的表达式和一个可选的参数设置。例如,下面是一个返回两个整数最大值的helper定义:
helper context Integer def:max(x:Integer):Integer=...;
helpers也可以定义一个不接受任何参数的helper。下面是对一个乘以2的整数值的helper定义:
helper context Integer def:double():Integer=self*2;
将以上二种定义混合的语法结构是:
helper def:max(x1:Integer,x2:Integer):Integer=...。
4)Rules:在ATL中存在二种不同类型的规则:匹配规则和调用规则,这二种规则符合通过ATL提供的二种不同的编程模型:宣称性编程、命令式编程。
在ATL匹配规则中,ATL转换的源模型元素不能被匹配,详细设计源模型的匹配规则就是为了符合这种限制。另外,ATL匹配规则不能生成ATL原始类型的值。调用规则可以被看作helpers的一个特定类型:它们必须被明确地调用执行,而且它们可以接受参数。然而,相对于helpers,随着匹配规则,调用规则可以生成目标模型元素。无论是从匹配规则或是其它的调用规则,一个调用规则必须在一个命令代码部分中被调用。
ATL查询用于一个模型到原始类型值的转换,它可以看作从一系列源模型计算原始值的操作。普遍使用的ATL查询是从一系列源模型中产生一个文本输出。不过,ATL查询不限于字符串值的计算,而且也可以返回数字值或是布尔值。下面分别介绍下ATL查询的结构和执行语义。
ATL查询结构:完成一个可选的输入部分后,ATL查询必须定义一个查询实例。关键字查询介绍了一个查询实例,查询实例指定了必须是由一个ATL表达式计算得到的结果。表达式如下:
query query_name=exp。
查询执行语义:作为ATL模块,ATL查询的执行是在几个连续的阶段中实施的。第一阶段是初始化阶段,它对应着ATL模块的初始阶段,并认为是在ATL模块文本中定义的初始化属性。第二个阶段是计算阶段,通过执行ATL查询中查询元素的宣称代码去计算查询返回值。需注意的是,在查询文件中定义的helpers可以在初始化和计算阶段中被调用。
最后的ATL单元类型是ATL库,开发一个ATL库可以定义一系列的ATL helpers,这些helpers可以被不同的ATL单元(包括模块、查询、库)调用。一个ATL库可以包括一个可选的输入部分,除此之外,ATL库定义了一些ATL helpers,这些helpers在导入库的ATL单元中可使用。相比模块和查询,一个ATL库不能被单独执行。这说明,库在执行时与其它初始化步聚不相关。由于缺少初始化的步聚,属性helpers不能在ATL库中定义。
目前主流的Atlas转换框架[5]由ATLAS研究组、LINA&INRIA和法国Nantes大学共同研究得出,如图2所示。框架中的源模型符合元模型a,它只能读不能修改;目标模型符合元模型b,它只能写。一个完整的Atlas模型转换程序需要四个文件:元模型a、元模型b、源模型、模型转换实例。源模型通过转换生成的目标是目标模型。
转换框架并没有详细的说明模型转换方法,文献[6] 中的例子也只是把简单的类模型转换为关系模型,并未给出转换的详细过程,类的元模型及关系元模型如图3、图4所示。目前在MDA的模型转换这一阶段,只是处于模型转换的理论性研究,模型转换技术尚未成熟。
本文针对文献[6] 及目前国内外的研究现状对模型转换进行了改进,提出一个利用ATLAS转换语言接收模型转换信号进行转换的思想框架。
当PIM模型向PSM模型转换时,PIM模型发出一个要求模型转换的信号,ATL接收到新信号时,就会判断此信号是否为模型转换的信号,如果是模型转换信号,则接受信号,并利用ATL执行此信号的任务,进行PIM模型到PSM模型转换,当完成任务后回到接收新信号的初始位置继续等待新的信号。如果PIM模型发出的信号不是PIM要求模型转换的信号,则进行判断该信号是否为可行的信号,如果是可行信号,则直接返回入口端等待新的模型转换信号;如果不是可行信号,则向数据库报告此信号为不可行信号,数据库内有不可行信号日志记录,将不可行信号写入日志是为方便再次接收到类似信号时可在入口端直接屏蔽以免浪费循环时间,然后返回入口处等待接收新的信号任务,按此顺序循环下去,如图5所示。此循环过程的思想也可以应用在PIM到PIM的转换、PSM到PSM的转换及PSM到PIM的转换中。
理想的MDA模型转换是利用模型转换工具自动将 PIM转换成相应的 PSM,但是目前支持MDA模型转换的工具无法做到自动转换。本文利用ATLAS转换语言,在PIM向PSM转换时判断接收的信号是否为转换信号,以便做出能否进行模型转换的决定。研究提出了一个模型转换的思想框架,为今后的模型开发提供借鉴与参考。
[1] OMG/OR MSC.Model driven architecture.[EB/OL] .[2001-07-0] .http://www.omg.org.
[2] 董建武.MDA:新一代软件包互操作体系结构[J] .计算机工程,2003,29(2):3-4..
[3] 赵珂,韩业红.MDA模型转换的研究[J] .中国科技信息,2009(4):138-139.
[4] JOUAULT F,KURTEV I.Transforming models with ATL[C] .Berlin:Proc.of the Salellite Events on the 8th Int'l conf.on Model Driven Engineering Languages and Systems,2006(3):128-138.
[5] FRANKEL S.Model Driven Architecture:Applying MDA to Enterprise Computing[M] .Indianapol:John Witey and Sons,2003.
[6] JOUAU F,ALLILAIRE F,BEZIVIN J,et al.ATL:Amodeltransformationtool[J] .Science of Computer Programming,2008(4):31-39.