基于模型驱动的Web应用服务系统开发理论框架

2018-10-23 01:15侯金奎鹿旭东陈春雷
小型微型计算机系统 2018年10期
关键词:实例构件特性

侯金奎,鹿旭东,陈春雷,王 磊

1(潍坊学院 计算机工程学院,山东 潍坊 261061)

2(山东大学 软件学院,济南 250061)

1 引 言

近年来,随着云计算的服务模式在业界的广发应用和迅猛发展,基于网络的服务系统正在不断替代传统意义上的计算系统和软件系统[1].Web服务是落实云计算环境中各类资源及能力交付和使用模式的主要方式,可以方便地满足用户需求,是实现面向服务计算的主要技术[2].大型复杂Web系统在其模型描述和系统演化的过程中,需保持清晰、易理解、可追踪、可验证、易修改[3].针对大型Web服务系统的建模、开发以及系统重构技术和方法进行研究,为此类系统的设计和实现提供有效的方法学指导,提出有效的技术手段来提升软件研发的质量和效率,已成为当前面向服务的软件工程面临的一个亟待解决的重要任务[4].已有的研究都是针对特定的应用领域和场景[5,6],提出的实现方案[7],但这些工作并不能对一般意义下大型复杂Web系统的模型演化和特性考察提供支持.

采用模型驱动的软件开发(model driven software development)方法是应对软件开发和维护复杂性的一种有效手段,它以模型为核心制品,通过一系列的模型转换来生成最终的目标系统[8].模型驱动开发作为一种开放性的理念和模式,已经被学术界和业界广泛接受并表现出了极强的生命力[6,7].模型转换是模型驱动软件开发的关键步骤,以实现不同抽象层次模型之间的转换和精化[9].为了支持模型驱动开发中的模型的自动转换,需要精确地定义和描述模型以及模型的变化.从技术发展的角度看,基于构件和构件组装的工业化软件开发仍是快速构造系统、降低开发费用、减轻维护负担的主流方案[10].市场和业界多年来的实践和验证也都表明,基于构件的软件工程和模型驱动开发方法的结合是成功的,发展前景良好.

范畴理论[11]描述能力强,可为Web服务系统的层次结构提供形式化的语义描述.在我们的前期工作中[12-14],已将范畴理论用于软构件和体系结构模型之间映射关系的描述.本文进一步扩展了这种思想,从软件设计实践和基于体系结构,面向软构件和设计模式的软件设计出发,提出了软件设计和精化中的模型转换和模型驱动的软件开发理论框架.设计模式看成是构件规范的模版,模板的实例化和规范的集成过程就是软件设计和实现的过程,在此基础上,建立起了模型转换和精化中特性描述和一致性研究的统一框架.应用研究表明,该框架符合模型驱动软件设计的本质要求,为模型转换和模型驱动的Web应用服务开发提供了新的认知、分析和研究的指导架构.

2 模型定义

参考文献[13]、[14]和[15],本文给出标识、对象类型、对象关系等定义.在此基础上,进一步定义规范、规范转换、规范模板及规范集成等概念.

定义1.构件对象标识(Component Object Signature). 标识Scmp=是一个三元组.其中,SDT是一个数据类型标识,SAT是构件的特性符号组成的集合,SAC是构件的动作符号组成的集合.

定义2.构件对象类型(Component Object Type).对象类型是构造具有序偶OTcmp=所描述共同特性的对象实例的模版,其中Scmp是一个构件对象的标识,SAX是一个Scmp相关公式和公理组成的集合.

定义3.对象关系类型(Types of Object Relationships). 定义对象关系机制集合为R={R1,…,Rm>0}.其中每一个Ri是具有特定机制的对象间关联方式.对于给定的对象类型集合OT={OT1,…,OTn>0}.对象关系类型集合RT=={RT1,…,RTu>1}.其中每一个RTi=Ri,是一个具有类型Ri∈R的对象类型OTp∈OT和OTq∈OT间有向序偶关系.

对象关系机制是由软件的模型或平台所提供和决定的[12].常见的关系机制有:方法调用、事件激发、消息发送、数据传送、远程过程调用等.特定对象间的关系是受到对象类型和关系机制约束的.这是软件构造实践中考察一个系统内对象或构件间关系兼容性的基本必要条件.

定义4.对象关系实例的标识.对于对象关系类型RTi=Ri,它的一个关系实例是RO=Ri,它是由ORType标识以及由该标识形成的对象类型所生成的实例(参见图1);其中,Xp∈X(OTp),EqE(OTq).

该标识名是用于表达和生成对象关系实例的.图1给出了对象关系实例的标识和对象类型的结构框架.其中,GetActionNames获得在SO的Gso动作中调用DO.Gdo动作的文字说明,被用于改写SO对象中Gso动作的行为;Σ代表对字符串的并置运算.

定义5.类型化范畴(Typed Category). 类型化范畴[16]是一个5元组TC=,其中:OT是非空对象类型集合,R是非空对象关系机制集合,RT是非空对象关

ORType//RTi=Ri的关系实例的标识

//和对象类型Ri

图1 对象关系类型的标识和对象类型Fig.1 Signature and object type of types of object relationships

系类型集合,O={O1,…,On>0}(Oi的类型∈OT)是非空对象实例集合,F={F1,…,Fm≥0}(Fi的类型Ri∈RT)是对象关系实例集合,其中Fi=Ri,Xp∈X(OTp),EqE(OTq).由此,TC:(1)为f∈F指派一个操作,它是从f定义域的一个对象实例a∈O到f值域的一个对象实例b∈O,如果a= domf并且b= codf,那么f被表示为f:a→b;(2)为g,f∈F的关系对指派一个合成操作.,它是f与g的合成,记为g.f:domf→ codg,其中domg= codf.

由定义5,软件体系结构模型(Software Architecture)就是一个类型化范畴SA=.

根据类型化范畴的定义,极端情况下体系结构只有一个构件对象构成.

定义6.体系结构的标识及其对象类型. 由SAType()构造的标识以及由该标识形成的对象类型,是用于表达体系结构语义和生成体系结构实例的一个特别的标识以及由该标识形成的对象类型.

图2给出了由体系结构范畴构造标识和对象类型的结构框架.其中,addTo()动作用文字串s改写对象so的动作Gso的内容,由此改写了Gso的行为构成.

注意,某些构件类型是不能通过外部改写其行为特性的.这时,应该限制其只能接受操作,而不能向其他对象发出操作.

3 服务模型转换

规范引入了范畴符号和操作符号,并且定义了实现或被规范的模型必须具有的特性[17].

定义7.构件规范(Component Specification).规范SP是一个序偶,其中SA=是一个体系结构,Φ是一个由SA成份构成的SA-句子汇集.所有SA-句子的集合表示为Sen[SA].

SAType//体系结构范畴的标识和对象类型

图2 体系结构类型的标识和对象类型Fig.2 Signature and object type of types of software architecture

规范SP=的模型是一个SA-模型M,其中对每一个ψ∈Φ有M┝ψ.所有这种模型M的集合表示为Mod[SP].

为简便,以后的讨论中规范的特性集也用规范的名称表示.

定义8.规范态射(Specification Morphism).从规范SP=到规范SP′ =的一个规范态射,是一个体系结构态射σ:SA→SA′,使得每一个模型M∈Mod[SP′]可有M|σ∈Mod[SP],其中M|σ是M的反函子(reduct functor).规范态射可表示为σ:SA→SA′.

函子(Functor)F(A,B)是从范畴A到范畴B的函数,它为每一个A对象指派一个B对象,并为每一个A中f:a→b指派一个B中F(f):F(a)→F(b),使得等态射和合成关系得到保持.Functor定义了范畴A到B的变换关系.反函子Reduct functor是与函子相反的变换.给定范畴A、B,从A到B的函子F定义了A是如何被包含在B中,而F的反函子B|F定义了B是如何从A形成的.

定义9.规范态射的类型(Types of Specification Morphism).设SP={S1,…,Sm>0}是所有规范的集合.规范态射是满足特定约束C的两个或多个规范之间的有向关系,具体形式有{S1,…,Sn>0} →t∈STS和S→t∈ST{S1,…,Sn>0},其中S∈SP和Si∈SP都是规范,ST是有限规范态射的关系类型,ST={转换/t,分解/a,选择/o,And合成/ac,Or合成/oc,集成/i,复制/d,不计类型/st}.

转换和复制都是与常规概念类似的简单的规范态射,其它则是与常规概念不同的复杂规范态射.

定义10.转换(Transformation).转换F具有形式F:S1→TS2,其中S1,S2∈SP都是规范,→T代表有向关系为转换的规范态射关系,并满足以下特性:每一个S1中的对象a映射为S2中的对象b;为每一个S1中的关系f:a→b映射为S2中的一个关系F(f):F(a) →F(b);a∈S1有F(ida) =idF(a);并且,对于S1中的关系合成g∘f,有F(g∘f) =F(g)∘F(f).

图3(a)给出了转换的图式表达,图3(c)给出了多次转换关系的合成关系.转换关系及其合成可以用来表达在语义保持的约束下从模型到实现的软件精化过程.

定义11.规范模版(Template of Specification). 规范模版[14]是一个规范类型SP(T1s1:t1,…,Tnsn:tn>0)的,其中,Tksk∶tk表示用于SP实例化的参数,Tk是形式参数,si是其类型,ti表示参数的传送方式,可以是替换或引用的方式来实现参数传送.

简言之,规范模版是一个还没有实例化的规范.如果不需要,可以不区分规范和规范模版,而通称为规范.

定义12.规范模版的实例化(Instantiation of Specification Template).规范模版SP(T1s1∶t1,…,Tnsn∶tn>0)被规范S的实例化表示为运算=S<+SP(t1,…,tn),其中,tk是S或S中某成份的标识,M是实例化后得到的规范实例,它是用S或S中的成份替换SP中相应成份后得到的规范.S可以是一个规范集合,此时,tk∈S或tk是S中某规范的某成份标识.同理,可以定义实例化运算=SP(t1,…,tn)+>S.

定义13.集成(Integration).规范S1,S2∈SP的集成是一个新的规范,记为S=S1+S2,+∈{<+,+,},表示按照特别的运算关系计算得到规范S;其中,S=S1S2表示按特性合一运算[14];S=S1<+S2表示以S1为核通过结合S2获得S;S=S1+>S2表示以S2为核通过结合S1获得S.

定义14.集成的框与核(frame,kernel of Integration).当规范S1,S2∈SP发生S=S1+S2,+∈{<+,+>},的集成或结合时,在集成后的规范S中处于主导地位的S1或S2,称为该特性集成的框,另一方称为该特性集成的核.如果不存在处于主导地位的规范,或对于S=S1S2,则称该集成是无框或无核的.

图3(d)给出了特性集成的一般图式表达.图3(c)表示以模型为核,结合环境的约束得到满足语义保持的软件实现的转换关系.图3(f)表示M1经过两次引入新的约束后得到M2

图3 规范的转换特性集成关系Fig.3 Property integration relationships of specification transformation

的转换.图中以实心菱形箭头表示的是有核集成的框,核是用通常的三角箭头表示的.

特性集成用来表示引入环境、平台、模式、方面或其它模型等约束后得到的新的合成规范.

由于特性集成概念的存在,而且规范都是在相同抽象层次上的特性描述,因此,不引入新的规范而进行的规范转换没有改变抽象的层次,是没有实际本质意义的.据此,本文以下关于转换的讨论主要都是关于或用于集成方面的.

定义15.分解/And分解(Decomposition).设M是规范S∈SP的特性集,S的分解表示为态射集合{S→aS1,…,S→aSn>0},其中,每一个Si也是规范,其特性集表示为Mi,并且满足要求(MiM)(M1M2…Mn=M).

图4(a)给出了规范分解的图式表示.规范的分解抽象地描述了复杂的模型经过分解和合成的软件实现.基于体系结构规范的系统构造就是经过分解、成分构造,而后成分合成而建立的.

图4 规范的分解和选择关系Fig.4 Decomposition and alternative of specification

定义16.选择/Or选择(Alternative).设M是规范S∈SP的特性集,S的选择表示为态射集合{S→oS1,…,S→oSn>0},其中,每一个Si也是规范,并且满足要求S=Si.

图4(b)给出了规范选择的图式表示.“Or选择”指任选其一的运算,特指多个分支转换关系中任选其中一个的设计选择;对于各个分支,其实都是源规范的等价复制;所以,选择等价于多个规范的复制.

由图4可以看出,从范畴角度看,规范的分解和选择都是类似椎(cone)[11]的概念.以下规范的合成则是类似余锥(cocone)[11]概念,它们的出现应该看成是对规范分解和选择的逆或对偶运算.对于建立完整的模型转换概念这是必须的,这可以通过图4中它们的出现情况说明.

图5 规范的选择与合成关系举例Fig.5 Example of alternative and composition

规范的合成有“And合成”和“Or合成”两种类型.

定义17.And合成(And Composition).设M是规范S∈SP的特性集,S的And合成表示为态射集合{S1→acS,…,Sn→acS},其中,每一个Si也是规范,其特性集表示为Mi,并且满足要求(M=M1M2…Mn).

定义18.Or合成(Or Composition).设M是规范S∈SP的特性集,S的Or合成表示为态射集合{S1→ocS,…,Sn→ocS},其中,每一个Si也是规范,其特性集表示为Mi,并且满足要求(S=Si)(M=Mi).

“And合成”是“And分解”的对偶,“Or合成”是“Or选择”的对偶,而且它们的出现应该是成对的.图4通过图示说明了这种对偶的出现,其中间节点所代表的规范可以进一步发生其它转换、分解和选择.

图4(a)还指出,分解和And合成的综合转换结果是(P1→S1Q1→T1M21)(P2→S2Q2→T2M22),这与转换M1→TM2从结构逻辑上是等价的.类似地,图3(b)指出,选择和Or合成的综合转换结果是(P1→S1Q1→T1M2)(P2→S2Q2→T2M2),这与转换M1→TM2从语义逻辑上应该是等价的.

图5给出了一个规范经过选择和集成,而后又经合成和集成所形成的转换过程.M1→TM2= 其综合转换结果是((M11+N11)→F1Q1→T1M21)((M12+N12)→F2Q2→T2M22),这从语义逻辑上与转换M1→TM2等价.

定义19.规范范畴(SpecificationCategory). 规范范畴SC=,其中,S={S1,…,Sn>0}是非空规范集合,ST={转换/t,分解/a,选择/o,And合成/ac,Or合成/oc,集成/i,复制/d,不计类型/st }是态射类型集合,T={Si→stSj|Si,Sj∈S,st∈RT}是可为空的规范态射集合;其中,(规范复制)→d是一个等价态射.

可见,规范范畴也是一个类型化的范畴.

定义20.转换路径(Route of Transformation).对于规范M1和M2,如果可由M1经历一次或多次转换态射推导而到达M2,则称存在一条从M1到M2的转换路径R,并记为Rou∶M1M2.对于经历一次的转换记为R∶M1→stM2.

定义21.路径等价性(Equivalence of Route). 两条从规范M1到M2的转换路径Rou1∶M1M2和Rou2∶M1M2是等价的,记为Rou1=Rou2,当且仅当转换的结果都得到相等的特性集合.

考虑转换的语义保持性,可以得到在语义保持意义下两条从规范M1到M2转换路径的等价性定义.

使用以上对于分解,选择和合成关系的简记形式,可以得到如下推论:

推论1. 对于规范M1,M2,S={S1,…,Sn>0}∈SP,以下态射关系集合所表达的转换关系是等价的:

M1→TM2= {M1→aS1→acM2,…,M1→aSn→acM2};

M1→TM2= {M1→oS1→ocM2,…,M1→oSn→ocM2}.

以上关系形成了发自M1到达M2的路径束(bundle of route).如果压缩这个束,以上关系可简记为:

M1→TM2= {M1→aS→acM2},当S={S1,…,Sn>0};

M1→TM2= {M1→oS→ocM2},当S={S1,…,Sn>0}.

推论2. 对于规范M1,M2,S1={S11,…,S1n>0},S2={S21,…,S2n>0}∈SP,以下态射关系集合所表达的转换关系是等价的,其中指不计类型和次数的转换.这里再次出现了路径束及其压缩现象:

M1→TM2= {M1→aS11S21→acM2,…,M1→aS1nS2n→acM2} = {M1→aS1S2→acM2}

M1→TM2= {M1→oS11S21→ocM2,…,M1→oS1nS2n→ocM2} = {M1→oS1S2→ocM2}

两条不包含分解、选择、合成、集成的从规范M1到M2的转换路径的等价性是容易判定的.使用以上的两个推论可以得到类似,但可包含分解、选择、合成、集成的两条转换路径的等价性定义.因此有以下定义.

定义22.良定的规范范畴(Well-formed Specification Category).规范范畴SC=是良定的,当且仅当满足以下条件:

1) 对于T所给出的规范态射,存在非空集合NSS和NFS,其中,s∈NS不存在任何s的前驱,而且s∈NF不存在任何s的后继;

3) 转换态射→a和→ac,→o和→oc必须分别先后成对出现,其间可以存在其它转换态射,单不存在与其它→a和→ac,→o和→oc对的交叉.一个良定的规范范畴可以记为WFSC=.

除具有多种态射类型外,良定的规范范畴是一个规范的偏序集合或DAG(Directed Acyclic Graph)图.

4 应用研究

本节通过一个关于学生信息管理的服务系统,作为实例阐述本文所提描述框架的应用.应用示例研究Student对象从基本规范到具体平台(J2EE/.NET)下实现Grid展示的转换.其转换框架如图6所示.考虑到篇幅限制,在示例中做了适当简化.

图6 应用示例的转换框架Fig.6 Transformation framework of the exmple

首先建立学生对象规范Student(图7),这是模型设计的基础,根据前面定义,主要是属性、动作和公理的定义属性有学号、姓名、出生日期等,而在动作中示例中只给出了与出生日期有关的两个动作.相应的公理则对其作了约束.

根据设计需求,Student对象规范实例需要展示在界面中,为此需要建立展示特性规范PresentPropertyofStudent(图8),该规范中定义了为满足student规范实例在界面展示方面的需求,需要增加的属性及动作等.其中,属性类型中的alias是别名,主要用于显示时对属性的提示说明,length是最大允许长度,这将决定属性显示时的布局空间限制.age是新增加的属性,并指明是属性birthday的导出项,由此将引起动作的增加,getAge()是完成对属性值的提取,而calculteAge()则描述导出语义,其中Current是指当前日期.需要说明的是calculteAge()被激发完成age属性的重新计算后,所有已经被调用的getAge()动作需要重新激发,以完成age属性值的同步.

图7 学生对象规范Fig.7 Specification of student

图8 展示特性规范Fig.8 Specification of presentive property

图9 集成显示特性的规范Fig.9 Specification of presentive property integrated

基本对象规范集成展示特性规范会形成适合界面展示方面需求的规范,此规范将作为界面展示转换的设计基础.根据前面集成定义,完成StudentPresentPropertyofStudent计算将很容易得到集成显示特性的学生规范IntegratedStudent(图9).需要说明的是由于age是birthday的导出项,在集成后的公理中增加了setBirthday(d)=> calculteAge(),语义为出生日期的设置将会引起年龄的重新计算.

设计需求表明,最终呈现在界面上的将是对象汇集,而对象汇集具有其特殊的结构和操作特性,为此建立汇集特性规范模板Collection(图10)对其组成及动作加以描述.简化后的汇集特性规范模板包括增加,删除,选择集合元素的动作.

图10 汇集特性规范模板Fig.10 Specification template of property of collection

图11 Grid格式规范模板Fig.11 Specification template of grid

规范模板定义的是设计模式,而设计模式需要实例化参与模型转换,这将由规范集成来完成.此步规范集成是以Collection规范模板为框完成集成运算IntegratedStudent <+ Collection.集成后的IntegratedStudentCollection为集成了汇集特性的学生汇集规范.根据集成定义,IntegratedStudentCollection将由IntegratedStudent替换所有Collection模板规范中的得到,篇幅所限,且和Collection规范模板相比只是被替换,故在此没有给出具体描述.

图12 查询组件规范模板Fig.12 Specification template of query component

汇集显示在界面中会有多种形式,如Grid表格形式、自由格式、树状格式等,这是一个or选择,具体选择哪条路径取决于用户的需求.示例中以Grid表格形式展示为选中路径,为此需要建立Grid格式规范模板GridofCollection(图11)对Grid格式加以描述.当汇集以Grid形式展示时,需要有属性描述展示数据源,表格展示列数,每页展示行数,当前页等信息,而且还需要下一页,前一页等翻页操作.

Grid格式规范模板同样需要集成汇集规范形成汇集的Grid格式展示规范.此步集成和上一步集成类似,是以GridofCollection模板规范为框完成集成运算IntegratedStudentCollection <+ GridofCollection得到GridofIntegratedStudentCollection.基于和上面同样的原因,该规范也没有进一步描述.

选定了集合的展示形式,最后还需要选定实现平台,示例中以J2EE为选定实现平台为例.为能在J2EE平台上实现GridofIntegratedStudentCollection,需要对该平台下实现集合Grid展示的代码结构加以描述,该代码结构由两部分构成:一是QueryBeaninJ2EE规范模板(图12),是对查询组件的抽象描述;二是通过查询组件提供的动作和平台所提供的服务完成表格实现,这由GridRealizationof CollectioninJ2EE规范模板(图13)加以抽象描述.该规范中引入的一些函数由J2EE平台提供,主要由一些标签语句组合实现.

最后的集成和上两次集成类似,完成集成计算GridofIntegrated Student Collection <+ Grid Realizationof CollectioninJ2EE,经过把替换为Integrated Student,得到J2EE的实现规范Grid RealizationofIntegrated Student CollectioninJ2EE.

GridRealizationof CollectioninJ2EE

//J2EE中表格实现规范模板

图13 J2EE表格实现规范模板Fig.13 Specification template of J2EE grid

接下来讨论在上述转换框架下的语义保持问题.首先,对象规范和展示特性规范的集成是无框或无核的集成,根据集成语义保持必要条件定理,可以得出此步集成是语义保持的.转换框架中其他的集成都是有框或有核的,有框或有核的集成未必就一定能够做到全部语义保持,这与框根据需求而提供的服务有关.需要时,应该能够实现由框对核的特别行为的激发,即集成是选择性语义保持的.如汇集规范中集成了具有展示特性的对象规范,汇集本身特性已经隐式保持了对象规范中所有对属性值获取动作的语义.如果汇集规范中有对属性值修改的需求,则对对象规范中属性值设置动作的语义也得以保持.再如,汇集规范中如添加“重新计算年龄”动作,则对象规范中的“计算年龄”的语义也得以保持.

示例中只给出了一个构件的模型转换过程,而系统是由多个构件相互连接而组成的,整个系统的转换是先分解完成各构件和构件连接的转换(在此,构件连接描述也用和构件描述类似的方法),再进行转换后的合成而得到的.一个系统转换示例如图14所示.该图中,底层是利用面向工程设计实验研究所开发工具做出的交互模型,由几个构件及构件之间连接所构成;其中Collection构件通过上述方法从对象规范转换而来,中间层是各构件及连接分别在转换框架下完成的实现平台实现规范,顶层是各实现规范在完成And合成后的整个系统的实现.

图14 系统转换示例Fig.14 Example of system transformation

5 结 论

本文的开发框架来自作者基于模型驱动的Web服务系统工程化设计方法研究的实验环境[18].它就是一个基于应用的基础领域模型,经过层次化引入和应用各设计模型,直至受到目标平台模型的约束而最终完成代码生成的开发过程.所用模型包括对象、构件、设计模式和体系结构,上层构件和系统总体结构是在体系结构描述的指导下结合目标平台约束构造的.文中的例子就取自该实验环境.

进一步的工作有两方面:

1) 建立一个系统全面的模型和模型转换及其语义的描述语言,在更深入和具体地考察所介绍框架的基础上,为系统地应用框架提供语言和工具支持;

2) 建立常规模型转换的语义计算理论,这对于全面认识服务模型转换的语义和更深入地认识本文所介绍框架具有积极意义.

猜你喜欢
实例构件特性
钢筋混凝土构件裂缝控制
谷稗的生物学特性和栽培技术
色彩特性
进一步凸显定制安装特性的优势 Integra DRX-5.2
Quick Charge 4:什么是新的?
基于构件的软件工程技术与理论方法探讨
完形填空Ⅱ
完形填空Ⅰ
基于构件的软件开发实践
基于复合连接器的插拔式构件组装方法研究