【摘 要】基于MDA方法同类型的软件系统的开发可以转变成对PIM和PSM的重用。实际上,模型的重用是在开发那些已经存在的经过检查和维护的模型,其目标是通过组合、扩展或者置换现有的软件系统来构建新的系统。文章中对PIM的重用的研究包括了对PIM组合规则的表达和扩充。
【关键词】MDA;PIM;重用
一、引言
软件系统建设的过程中,如何最大限度地降低开发风险、提高效率、快速地维护升级以及实现处于不同平台应用系统的互操作性成为当今开发过程所面临的一个主要问题。
当开发人员拿着技术的放大镜去观察软件系统时,多数时候就忽略了更为重要的业务流程规划。开发人员不应过多考虑技术细节,而应集中精力在功能模型和流程本身。MDA正是基于该原则提出的,它是一个适合软件系统领域已有的分析方法和工程技术的框架。基于MDA方法的“PIM模型的重用”则在一定程度上满足了软件系统开发“快速、高效”的要求。
二、MDA
(一)MDA简介
MDA(Model Driven Architecture模型驱动架构)是由OMG(Object Management Group
对象管理组织)定义的一个软件开发框架。MDA将模型区分为完整描述了系统的业务功能而忽略技术细节的PIM模型(Platform Independent
Model)和借助映射规则和辅助工具将PIM模型转化成的基于具体技术平台的PSM模型(Platform Dependent Model)。在PSM的基础上再转换成特定运行平台上的代码。
(二)模型的重用
为了使用户向新的平台的更新更容易,MDA方法在软件系统概念和应用的实施细节中提出一个明确的划分,这个划分是基于上述两个模型的,即PIM模型和PSM模型。有时候部分业务流程需要更新,如果对现有系统的功能分别做相应的扩展和调整,则可以降低软件系统重复开发的某些成本。解决的方法时便是对现有软件系统的重用与扩展。在基于MDA方法的软件系统开发过程中,这个重用在于对已有的PIM模型和PSM模型的重用。
我们对模型重用方法是两大步骤实现的:第一,根据不同企业软件系统的需要对已有PIM的合成、扩展和调整来表达PIM的重用;第二,从组合重用的表达自动生成新的PIM,生成的过程中绑定了重用的PIM模型所对应的PSM模型,同时,考虑到PSM模型是依赖于平台的,故PSM模型可以被认为是应用于具体平台的组件的集合。下图显示了某两个系统PIM模型的组合重用过程:
图1 PIM的组合重用
在PIM层次上,模型的组合重用规则是用来描述如何对现有模型进行扩展或者组合,并没有改变他们,这是MDA方法的基本原则,即保持某些系统的PIM模型的稳定;在PSM层次上,PIM模型所对应的PSM模型保持不变,即PSM模型的代码在新的系统中并没有改变;而且,根据PIM模型组合重用的目的,同样的PSM模型将被用于多个新的系统中。
本文的重点在PIM模型组合重用的表达上,尝试定义一系列的组合重用规则来为PIM模型的组合重用奠定基础。
三、PIM模型的组合重用
(一)PIM模型的表达
OMG提出在MDA方法的环境中使用UML语言,故而UML语言是表述一切模型与系统的基础,在MDA方法中,PIM模型借助UML这一语义明确的建模语言来表述,UML语言也可以从行为方面和结构方面描述系统。
在本文中,我们将借助于UML类图和UML协作图,因为这些类型的图主要功用就在于描述系统的结构和行为:
1.类图是在给定的环境中相互影响的对象的集合以及各这些对象之间关系的集合,它从结构上对系统做出了描述;同时,将具有共性的类组合在一起,就形成了包;
2.协作图通过对象之间相互发送的消息来显示参与交互的对象之间的相互影响,它从功能上对系统做出了描述;
(二)PIM模型的重用
1.模型重用的方式。一般地,一个软件的模型单元的重用通常有如下方式,如图2:
图2 模型重用方式
模型重用的一种方式是“组合”:它表示了为了形成一个新的系统原有的模型单元同其他模型单元的组合。用以组合的模型单元可以来自相同的系统,也可以来自于不用的系统,它们在组合重用的过程中,都保持自身结构和功能不变。
原有系统的模型单元根据组合方式的不同,可以分为:结构重组和功能重组。“结构重组”体现在调整模型单元的构成元素上;而“功能重组”体现在对模型单元间交互操作的描述上。
模型重用的另一种方式是“扩展”,即直接为重用的模型单元添加新的元素,如属性、操作等。这种扩展可以直接在原有模型单元的基础上进行,即直接对自身进行结构和功能上扩展;也可以在“组合”的基础进一步进行扩展。
2.PIM模型的重用规则。基于上述思想,在对PIM模型的组合重用的研究重点和手段在于PIM模型的UML类图:
首先,合并属于原有模型的不同的元素,例如,类和属性。首先综合所有类似模型的各种元素,然后合并类似的元素;与此同时,这些元素相对应的实体(例如类的元素)将由精简后的某一个模型元素描述。
接下来,为了完成PIM模型的组合重用,需要定义一套完整的规则来规定相似或不同类型的PIM模型的组合。这个规则是基于UML的,并且是语义确定的十分精确。在这一规则下,PIM模型的结构重组可以在不同的包中进行;对于功能重组,这些规则保证了在原有PIM模型中所定义的属性和操作通过组合重用后的产生的新PIM模型中仍具有精确的描述。
根据UML语言已有的规范:每个PIM原模型有一系列的类,这些类可以依据其属性、操作的相似性划分在一起,行成了“包”,各个包或者类在给定的通信规则基础上,根据系统需要相互发送和接收消息产生交互的影响。下文就这一思路尝试定义PIM模型的重用规则,包括通信规则、组合规则和置换规则。
(1)通信规则。通信规则定义的是构成模型的同类型元素,即包与包、类与类等等相互之间怎样发送和接收消息产生的交互影响,此时,参与通信的双方来自不同的PIM模型。
包与包之间的通信规则可以定义为:
Correspond Packages[PackageC,PackageE,…]
图3 位于不同PIM模型中“包”的通信
仅仅定义包之间的通信规则远不能满足描述两个模型之间组合的需要,还需要对组成包的元素———类的通信进一步定义。此时,每一个参与通信的类都来自不同的PIM模型,但它们的类型是相同或者相近的,这样可以有效的避免定义模糊的情况发生。其规则定义如下:
Correspond Classes[PackageA.ClassAA,PackageB.Class?鄄BA,…]
图4 位于不同PIM模型中“类”的通信
在包、类的通信规则基础上,进一步定义属性和操作的通信规则:
属性的通信规则的定义:
Correspond Attribute[PackageA.ClassAA.Att1,PackageB.ClassBA.Att1,…]
来自原有不同系统、参与通信的属性应该具备着相同特性,即各自系统中相似之处。
操作的通信规则的定义:
Correspond Operation[Package1.Class1.Op1,Package2.Class2.Op2,…]
类似的,参与通信的操作在原有各自系统中用于完成类似的业务流程等活动,但是途径仿佛可能相类似或者存在差异。
(2)组合规则。通信规则的确立使得原先位于不同PIM模型中的元素能够进行通信,并不能明确定义参与通信的包、类等元素怎样组合在一起构成新系统的模型元素,下面就需要通过定义“组合规则”将原本属于不同PIM模型的元素结合为新模型的组成元素。
参与组合的各种在已有PIM模型是可以相互自己通信的,且通信规则遵循前述的定义;参与通信的同类的模型组成元素(包、类、属性、操作)只保留其中一个或几个。为了确定保留的模型元素,我们在通信过程中会为每一个参与通信的参数,即原有PIM模型中类所包含的属性或操作指定相应的优先级,这个优先级的确定是根据新系统需要而定的;且保留的过程可以通过结构化控制如if…then…、switch、do…while…过程来实现。
为此,我们要先制定操作的组合规则,因为它是从原有系统转换到新系统的关键之一:
Combine Operations[Control Operations:PackageA,Clas?鄄sAA,OpA1,PackageB,ClassBA,OpA1,…]
这里的Control Operations即是根据新系统需求对原有PIM模型的操作进行机构化控制,如在操作OpA1的基础上激活OpA2。
类似的对于属性的组合,定义为:
Combine Attributes[Control Attributes:PackageA,ClassAA,AttA1,PackageB,ClassBA,AttA1,…]
通过上述定义,原有的PIM模型的操作和属性被符合新的系统要求的部分操作和属性所描述,进而可以得到相应的类或者包。
(3)置换规则
置换规则用于表示定义在一个给定模型中的元素的更新。这些元素可以是包、类、属性或者操作。 一个元素的更新表现在用一个同种类型的新的元素替代的。
这种对于元素替代可以为模型的进化提供良好的追溯性。
对于包的置换定义的规则如下:
Replace Package[Source Package,Update Package]
这个规则表示了定义通过定义在Update Package里的相应的元素来替代在Source Package中的相应元素。如果定义在Update
Package中的元素在Source Package中没有相应的元素,那么这些元素将被补充添加到替换的模型里。
Replace Class[Package1.Class1,Package2.Class2]
这一规则表示类1置换了那些类2,包括属性和操作。因为根据UML的标准,类不能独立于属性和操作。如果要置换一个给定的类,就需要定义一个包含同类型属性和操作的新的类作为取代。
一般地,上面提到的这三种类型所定义的规则本身也可以在基于PIM模型重用的基础上加以组合。在利用已有的两个甚至更多的软件系统进行新的开发过程中,利用已有PIM模型组合并同时用模型间的互相替换成为可能。
四、展望
在基于MDA方法的软件系统的开发过程中,对PIM模型的重用为软件系统的开发提供了一扇便捷之门。在借鉴和利用UML的定义和规则的基础上,对PIM模型具体的描述和重用以及PIM模型向PSM模型的过渡还有许多方法论上的问题需要更进一步的解决,其中包括:
1.重用规则的精化,即为不同类型PIM模型的重用提出一整套语义清晰完整的规则,使得对可重用模型的扩展更为规范化。
2.明确定义出PIM模型组合表达式之间的关系以及这些关系向PSM模型的映射,这个过程是要依赖于技术平台的。
3.重用开发工具,这个工具至少应当包含两大主要功能:分析PIM模型重用过程中可能产生的映射;检验所产生映射在不同技术平台下可产生的结果。
【参考文献】
[1]董建武.MDA新一代互操作软件体系结构[J].计算机工程,2003,(2).
[2]David S.Frnkel著,鲍志云译.应用MDA[M].北京:人民邮电出版社,2003.
|