(计算机软件与理论专业论文)mda中基于java的psm到代码转换研究与实现.pdf_第1页
(计算机软件与理论专业论文)mda中基于java的psm到代码转换研究与实现.pdf_第2页
(计算机软件与理论专业论文)mda中基于java的psm到代码转换研究与实现.pdf_第3页
(计算机软件与理论专业论文)mda中基于java的psm到代码转换研究与实现.pdf_第4页
(计算机软件与理论专业论文)mda中基于java的psm到代码转换研究与实现.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机软件与理论专业论文)mda中基于java的psm到代码转换研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

m d a 中基于j a v a 的p s m 到代码转换研究与实现m d a 中基于j a v a 的p s m 到代码转换研究与实现专业:计算机软件与理论姓名:曹响指导老师:李师贤教授摘要作为o m g 提出的新一代软件开发方法学,m d a ( 模型驱动架构) 将软件开发抽象层次从代码提高到了模型。模型转换技术是实现m d a 的关键,其中,p s m ( 平台相关模型) 到代码的转换是模型转换技术中一个非常重要的环节。本文对m d a 中p s m 到代码的转换技术进行了研究,提出把这种转换分为对模型的操作和对代码的生成两部分,并针对当前开源工具多采用命令行操作,开发人员需要熟悉额外的配置技术才可以进行开发等现状,设计了一个基于j a v as w i n g 界面的p s m 到代码转换工具,实现了对模型的操作和对代码的生成。其中,通过封装j d o m 引擎的解析器( p a r s e r ) ,利用x p a t h 来提供对x m i 格式的模型的获取和存储操作,用j a v a 对象表示的u m l 元模型和j a v a 反射技术来实现对模型的动态编辑操作;然后通过对u m l 元模型进行研究,定义了从p s m到j a v a 平台的转换规则,再根据这种转换规则,采用基于v e l o c i t y 模板的生成方式实现了代码的生成。最后本文利用了一个实际案例来展示了该工具并对结果进行了分析和比较。基于上述设计,所实现的工具可以允许用户通过图形界面对模型进行操作,利用模板定义目标代码的结构,再将修正后的模型按转换规则进行代码生成。本文工作是对m d a 开发环境的一个实践,实现p s m 到代码的转换,对完善m d a支撑环境,以及提高软件开发的生产效率有重要的意义。关键词:模型驱动架构平台相关模型代码生成模板m d a 中基于j a v a 的p s m 到代码转换研究与实现r e s e a r c ha n di m p l e m e n t a t i o no fj a v a - b a s e dp s mt oc o d et r a n s f o r m a t i o ni nm d ae n v i r o n m e n tm a j o r :c o m p u t e rs c i e n c en a m e :c a ox i a n gs u p e r v i s o r :p r o f e s s o r l is h i - x i a na b s t r a c ta sab r a n d n e ws o f l w a r ed e v e l o p m e n tm e t h o d o l o g y , o m g sm o d e ld r i v e na r c h i t e c t u r e ( m d a ) r a i s e st h el e v e lo fa b s t r a c t i o nf r o mc o d et om o d e l m o d e lt r a n s f o r m a t i o nt e c h n o l o g yi st h ek e yt oa p p l y i n gm d a ,i nw h i c hp s mt oc o d et r a n s f o r m a t i o ni sav e r yi m p o r t a n ts t e p t h i sp a p e rf o c u s e so nt h er e s e a r c ho fp s mt oc o d et r a n s f o r m a t i o mw h i c hd i v i d e si n t ot w oa s p e c t s :m o d e lo p e r a t i o na n dc o d eg e n e r a t i o n f o ro p e n s o u r c et r a n s f o r m a t i o nt o o l su s u a l l yo f f e rc o m m a n d l i n es t y l eo p e r a t i o n ,t h i sp a p e rd e s i g n e dat r a n s f o r m a t i o nt o o lb a s e do nj a v as w i n g ,i m p l e m e n t i n gt h ef u n c t i o n so fm o d e lo p e r a t i o na n dc o d eg e n e r a t i o n i tw r a p p e dj d o me n g i n ea sax m ip a r s e r , u s i n gx p a t ht or e a d sau m lm o d e li nx m if o r m a t ;t h e nb yd e f i n i n gam a p p i n gf o r mu m lm e t a - m o d e lt oj a v a , a n du s i n gj a v ar e f l e c t i o na p it op r o v i d e sd y n a m i cm o d e le d k i n g a r e r w a r d s ,i tu t i l i z e sv e l o c i t y sv t ls c r i p t i n gl a n g u a g et od e s c r i b et h er u l e sf o rt r a n s f o r m a t i o n , a n di m p l e m e n t sc o d eg e n e r a t i o nw i t hv c l c o i t ye n g i n e f i n a l l yt h ep a p e rg i v e sa ne x a m p l eo ft r a n s f o r m i n gap s m ( b a n k i n gs y s t e m ) t oj a v ac o d ea n dc o m p a r e sw i t ht h eo t h e rr e l a t i v er e s e a r c h e s b a s eo nt h i sd e s i g n , t h ei m p l e m e n t e dt o o lp r o v i d e sag u it oa l l o wu s e rt od om o d e lo p e r a t i o na n dc o d eg e n e r a t i o n t h i sp a p e ri sap r a c t i c eo fm d ad e v e l o p i n ge n v i r o n m e n t p s mt oc o d et r a n s f o r m a t i o ni sav e r yb a s i cb u ti m p o r t a n tp a r to faw h o l em d a - s u p p o r tt 0 0 1 a si ta u t o m a t e db ym a c h i n et h ec o d eg e n e r a t i o n , t h es o f l w a r ed e v e l o p e rw i l lb em o r ec o n c e n t r a t e do nt h em o d e l i n go fb u s i n e s sd o m a i n t h ec o s tw i l lr e d u c ea n dt h ep r o d u c t i v i t yw i l lh er a i s e d k c y w o r d s :m d ap s mc o d eg e n e r a t i o nt e m p l a t e 1 i lm d a 中基于j a v a 的p s m 到代码转换研究与实现图表目录图抽象层次的提高叫1图卜2 传统和m d a 软件开发生命周期的比较3图2 - lu m l 元模型片断 1 6 1 1 2图2 - 2 关联元模型,1 4图2 3u m l 扩展机制元模型1 1 6 i 15图2 - 4 四层建模元层次1 6图2 - 5m o f 映射1 7图2 - 6g o f 访问者模式i l “2 0圈2 7 用x s l t 来迸行模型到代码的转换 2 0 1 2 1图3 - l 转换: 具的工作过程2 4图3 - 2 转换:i :具的主要包图2 5图3 - 3 把每一个菜单命令都封装成对象2 6图3 4 模型读取模块设计圈2 7图3 - 5 用j a v a 表示的u m l 元模型的设计( 片断) 3 0图3 - 6 从x m i 文件生成了树状结构的模型图3 2图3 7g o ff a c a d e 模式i j 3 6图3 - 8 应用f a c a d e 模式3 7图3 - 9 代码生成部分设计图3 7图4 1 银行系统p s m 4 2图4 2b a n k i n g 模型编辑图4 6图4 - 3 手 :加入操作的方法体4 7图4 - 4 代码生成模极设置4 7图4 5 生成代码成功4 8程序1 1j a m d a 的c o d e w r i t e r 接口6程序2 1u m l l 4 的x m id i d 片断1 8程序3 - 1x m ip a r s e r 接口文件2 8程序3 - 2u c l a s s i f i e r j a v a 3 0程序3 3 通过反射获取对象的属性名字和值3 2程序3 4 一个扩展u m l 元类的例子3 5程序3 - 5j a v a 类模板1 3 8程序3 - 6j a v a g e n e r a t o r 程序片断3 9程序4 1 生成的文件a c c o u n t j a v a 4 8中山大学硕士学位论文第1 章绪论1 1 研究背景介绍1 1 1m d a 的概念为了应对当前软件技术和业务需求的快速变化,对象管理组织o m g 于2 0 0 1年提出了名为m d a i l 】的新一代软件开发方法学。m d a 是m o d e ld r i v e na r c h i t e c t u r e ( 模型驱动架构) 的简称,它在比当前软件开发更高的一个抽象层次模型上来进行对问题的计算和求解。图1 1 展示了软件开发的抽象层次提高的过程。在m d a 中,模型被作为开发工件,贯彻到软件丌发的整个过程中。m a c h i n ec o c oa s s e m b l yc o d e 9 8 0 ss o u r c ec o d o2 0 0 0 s臣匾囤。图1 - 1 抽象层次的提高闭模型,是以精确定义的语言对系统( 或者系统的一部分) 做出的描述【3 j 。精确定义的语言指的是具有精确定义的形式( 语法) 和含义( 语义) 的语言。在m d a 中,包含了三种模型,分别是平台无关模型( p i m ,p l a t f o r mi n d e p e n d e n tm d a 巾基于j a v a 的p s m 到代码转换研究及实现m o d e l ) 、平台相关模型( p s m ,p l a t f o r ms p e c i f i cm o d e l ) 和代码( c o d e ) 。平台无关模型p i m 只描述了与业务逻辑相关的元素及相互关系,是独立于实现技术的高度抽象模型【3 】。由于它的技术无关性质,p i m 在经过较长时问后仍具有相当的价值,技术的推进并不会影响它的适用性及存在价值。平台相关模型p s m 是将p i m 模型实施到一种特定技术平台上的体现,它是为某种特定的实现技术量身定做的、用某种技术平台上可用的实现构造来描述系统的模型【3 l 。它通常包含了这种技术中特有的术语和技术细节。相对p i m 而言,p s m 是基于系统实现技术构建的,l k p n 基于j a v a 平台、j 2 e e 平台、n e t 平台、w e b s e r v i c e 平台等。按照上述模型的定义,代码也是一种模型。在m d a 中代码模型指的是当前的3 g l 或4 g l 源代码,如j a v a 、c # 等。1 1 2 基于m d a 的软件开发过程传统软件开发的过程通常是由低层的设计和编码驱动的口】。一个典型的传统开发过程包含以下一系列阶段:需求、分析、低层设计、编码、测试和部署。模型在这种丌发过程中通常表现为文档和图表,一般是在需求、分析和低层设计阶段产生的。在编码开始之后,它们和代码的联系会随着编码阶段的进展而逐渐减少甚至脱节,因此,开发人员经常把文档和图表的编写和维护视为负担,觉得编写代码具有生产力,编写文档和图表则不具备。在这种开发模式中,模型对开发人员而言,重要性远远比编码要低在一些极限编程的开发中,模型甚至仅存在于设计和丌发人员的头脑中。而在基于m d a 的软件开发过程中,模型受到了前所未有的重视。和传统软件开发不同的是,m d a 中的模型是关键的、必不可少的开发工件。开发人员所要开发的模型是与业务逻辑有关而不涉及任何实现技术的模型即p i m ,对p i m的开发完毕后,通过m d a 支撑工具,可以让机器来实现p i m 到p s m 的转换,将平台无关的模型转换到用具体平台技术来描述的模型,再通过p s m 到代码的转换,并进行测试和部署,从而构建整个系统。基于m d a 的开发方式,可以有效地避免传统软件丌发中存在的许多问题,如文档和代码的不一致、系统的可移植问题、异构系统的互操作性问题等等【3 】。m d a 和传统的开发生命周期比较如图1 2 所示。中山大学硕十学位沦文图1 - 2 传统和m d a 软件开发生命周期的比较圈1 1 3m d a 中模型转换的分类上一节介绍了基于m d a 的软件开发过程,其中我们可以看到,模型转换技术是m d a 实现的关键。对m d a 中模型转换技术的研究是当前的一个热点,国内外的科研机构和大型软件公司纷纷开展了这方面的研究工作,并取得了很多理论成果。基于这些研究成果,文献【4 】把模型转换分为模型到模型的转换( m o d e lt om o d e lt r a n s f o r m a t i o n ) 和模型到代码的转换( m o d e lt oc o d et r a n s f o r m a t i o n )两种类型。模型到模型的转换( m o d e lt om o d e lt r a n s f o r m a t i o n )模型到模型的转换,包括了p i m 到p s m 的转换、p i m 之间的转换( 称为模型的精化,r c f m e m e n t ) 、p s m 到p i m 的逆向转换,以及p s m 之间的转换。在这其中又分为:( 1 ) 直接操作方法:通过提供一个添加了a p i 的内在模型的表示来实现。目前一般以提供转换的管理架构的面向对象框架来实现。用户必须实现转换规则并使用编程语言来调度。这是最低层的方法。( 2 ) 关系型方法( r e l a t i o n a la p p r o a c h ) :基本思想是把源模型和目标模型用数学关系的元素来表示,他们之间的关系表现为一种约束( c o n s t r a i n ) 。而约束是用一种声明性语言来进行描述。所有的关系型方法都是双向自由的,这意味着它们都能够很容易的实现模型的双m d a 一| _ ,基于j a v a 的p s m 到代码转换研究及实现向转换。( 3 ) 基于图形转换方法:它利用了现有的图形转换理论技术,在u m l图上对类型、属性、标签图上操作。( 4 ) 结构驱动方法:这一方法有两个部分,一个是关注于产生目标模型的继承结构,一个是设置目标的属性和引用。全局框架决定调度与应用的步骤,用户只需要关注于提供转换规则。( 5 ) 混和方法:上述各种转换方法的联合使用。模型到代码的转换( m o d e lt oc o d et r a n s f o r m a t i o n )模型到代码的转换,指的是p s m 模型到代码的正向转换。按m d a 的定义,代码这一层也是模型,我们可以把模型到代码的转换看成是模型到模型转换的特例,这样只需提供实现代码的编程语言的元模型。但基于实际情况我们更倾向于重用现有的编译器技术【4 】,在代码这一层往往是简单地生成文本以作为现有编译器的输入。因此还是有必要把模型到代码的转换独立列为一类转换方式。1 1 4 本文研究的内容和意义本文的研究内容是模型到代码的转换,包括对模型的操作和对代码的生成。特别地,p s m 是特定于j a v a 平台技术的p s m 。当前,对m d a 中p s m 到代码转换的一些观点认为,p s m 到代码的转换就是代码生成。对此,本文认为,在m d a 的环境中应该把模型到代码的转换分为对模型的操作和代码的生成两部分。因为:1 ) 受限于当前p i m 到p s m 的转换技术,生成的p s m 往往未能包含特定平台所需的全部信息。因此p s m 在通过p i m 生成后,还需要对p s m 的更改和修正。2 ) 没有把p s m 和特定的代码生成技术绑定在一起。这样带来的好处是,当更成熟的代码生成技术出现后,可以重用已有的对p s m 的操作技术而只需替换代码生成部分。p s m 到代码的转换是m d a 模型转换中的一个重要环节。研究模型到代码的转换有以下意义:1 ) 它是实现m d a 支撑工具的基础,p s m 到代码的转换是完整m d a 支撑工具的基础设施,只有在这一层解决了模型转换到代码的可调整性和精确性等问题,基于其上的模型到模型的转换才有意义。2 ) 它使开发者将精力集中在对业务逻辑的建模上,而其他“琐碎繁杂”的工作由机器去负责处理,从而减少各种人为导致的代码错误,提高生产效率。3 ) 它能够有效地应对变化。当实现了p s m 到代码转换之后,对p s m 的改中山大学硕士学位论文动能够立即反映到代码上来,这时候的模型不再“仅仅是纸”,而是同生成的代码相关。1 2 研究现状综述m d a 提出之后,m d a 的支撑工具也在随着m d a 各标准的成熟而逐渐发展起来。目前,国外的工具发展较为迅速,在著名的开源项目发布网站s o u r c e f o r g e n e t 上关于m d a 的开源项目也逐渐增加。国内则发展相对较慢,目前仅有几款商业上的工具,实现的功能也比较有限。1 2 1 国外研究现状_ 开源项目j a m d a l 6 ij a m d a 是s o u r c e f o r g e n e t 上一个m d a 的开源项目,由p a u lb o o c o c k 创立,它是作为g e n 2 j 的一个扩展和增强可维护性的后继项目1 6 。它遵循o m g 的m d a规范,提供了完整的自动化的质量控制模型支持,可以生成大量代码,可以保障软件开发的投资效益和提高软件开发的品质,降低e a i ( e n t e r p r i s ea p p l i c a t i o ni n t e g r a t i o n ) 的费用。文档【6 】认为,j a m d a 是一个模型编译器框架。在j a m d a 中,输入的u m l模型包含了核心的业务逻辑信息,开发者可以在j a m d a 中定义关于目标平台的具体信息以及模型转换的规则,j a m d a 支持定义和管理功能强大的模型转换规则,能够为多种平台技术定义和维护,经过j a m d a 处理之后,生成目标代码。同时j a m d a 支持开发者在模型中加入特定的业务逻辑代码,并把这种代码融入生成的应用程序中。j a m d a 宣称在一个典型的项目中,开发者所需要手写的代码量只会占总代码量的2 0 左右。j a m d a 模型编译器的特性有如下几点:生成的代码具有良好的架构,使用“b e s t - p r a c t i c e ”设计简单一致的生成方式,使得维护更容易允许开发者改变模型,而不用改变大部分的代码。支持x m i ,故可以读入其他建模工具生成的模型本文关心的是j a m d a 的模型转换技术。j a m d a 使用了自定义的一套a p i 来实现对模型的获取,并且能够创建u m l 元模型,通过扩展元模型这种重型扩展方m d at j 批于j a v a 的p s m 到代码转换研究及实现式来适应开发者的业务需求。这套a p i 不仅包括了模型的读取,也体现在代码生成技术上,j a m d a 使用的是基于访问者的代码生成技术,称为c o d e w r i t e r ,典型的c o d e w r i t e r 接口如程序1 1 所示。程序1 1j a r n d a 的c o d e w r i t e r 接1 :2我们可以看到,这种方式进行代码生成有个缺点,就是如果程序结构复杂的话,那么生成代码的操作将是相当繁琐的,并且结构难以控制,生成代码的质量与开发者的水平有密切关系。而优点则是模型的转换规则全部用j a v a 语言来描述,节省了开发者要熟悉和处理新的规则描述语言的过程。j a m d a 并没有提供图形用户界面,对j a m d a 的使用是通过a p a c h ea n t 来进行的,包括对模型的输入设置以及对转换规则的导入等。_ 开源项目e c l i p s em o d e l i n gf r a m e w o r k 【。7 je c l i p s em o d e l i n gf r a m e w o r k ( e m f ) 是一个开源的模型驱动应用程序开发框架。具体来l 龅它是e c l i p s e 的一个插件( e c l i p s e 是i b m 推出的一款j a v ai d e 工具,目前最受瞩目的开发工具之一) 。它的模型可以通过三种方式来定义:一u m l :u m l 模型可以用e e l i p s e 的插件e c l i p s e u m lp l u g i n 来生成,也可以在别的工具如r o s e 上完成后再导入。一经过注释的j a v a ( a n n o t e dj a v a ) :通过j a v a 代码定义e m f 模型,我们可以用i n t e r f a c e 列出每一个类的属性,以及类之间的关系。这样得到的内容并不充足,无法定义我们想要的全部信息,所以e m f 使用了特殊的j a v a d o c 标中山大学硕士学位论文签。每一个属性或类,如果是e m f 模型的一部分,就必须在其j a v a d o c 中包含一个 m o d e l 标签。一l s c h e m a :x m ls c h e m a ( x s d ) 的表现能力不如u m l 或带注释的j a v a 代码那么强大,例如,它不能表达出双向引用的关联。但是由于默认的的序列化方法要使用到用户自定的方案,因此x s d 对定制序列化来说是最快的方法。e m f 通过模型转换创建j a v a 代码,实现图形化的数据编辑、操纵、读取和序列化。它是以许多插件组成的形式存在于e c l i p s e 中的,在其中有三个重要的概念:1 ) e m f e c o r e :e m f 模型转换的核心是它的一个名为e c o r e 的组件,对应于m d a 的m o f ,实际上e c o r e 是轻量级( l i g h t w e i g h t )m o f 实现,它剪枝了m o f 规范中一些复杂难以实现的概念,并为了避免混淆而取名e c o r e 而非m o f 。如前面所说,e m f 利用e c o r e 进行模型的定义。2 ) e m f e c o r e e d i t o r :这是在进行模型转换的同时需要生成的模型编辑器。利用它可以方便的操纵模型。3 ) e m f c o d e g e n :这部分作用是代码生成,c o d e g e n 部分有个重要的代码生成引擎j e t ( j a v ae m i t t e rt e m p l a t e s ) i s l 。j e t 是e m f 自主开发的一个代码生成引擎,它使用的语法是j s p 语法的一个子集,它也是一个基于模板的代码生成引擎,工作原理是根据用户写的模板( t e m p l a t e s ) 来生成大部分的代码,e m f 的设计者把j e t 独立出e c o r e ,以便能够提供其可重用性更好,因为这种技术在其他场合也是很重要的。e m f 能够支持3 种类型的代码生成:1 ) 模型,生成了j a v a 接1 2 1 和对应的实现类,同时还生成了对应的工厂类。2 ) 适配器( a d 印t e r s ) ,生成的实现类称为i t e m p r o v i d e r ,为模型提供给编辑器显示和编辑的适配器。3 ) 编辑器,能够生成e c l i p s e 风格的编辑器以让用户对模型进行编辑和定制。开源项目a n d r o m d a l 9 1a n d r o m d a 是一个开源的遵循m d a 规范的代码生成框架,它从c a s e 工具中读入x m i 格式的u m l 模型,并可以定制生成的组件代码1 1 0 】。a n d r o m d a 拥有一套样例模板,这些模板使用x d o c l e t 的t a g s 来生成代码类。经过简单生成步骤,x d o c l e t 工具可以产生可立即部署在j b o s s 应用服务器上的,成熟的组件代码。x d o c l e t 工具在代码生成方面已经作了很多有意义的工作。使用x d o c l e t ,程序员在编写代码的同时,嵌入些元信息t a g s ,它们用于支持持久化属性,定m d a 叫1 基于j a v a 的p s m 到代码转换研究及实现义和其他类之间的关系,数据库映射等等。b e a n 的开发者使用特殊的 j a v a d o c t a g s 来定义元信息,这些特殊的t a g 通常放在j a v a 类,类属性或方法的前面。x d o c l e t 收集这些嵌入代码的t a g s ,并根据它们生成所有必要的接口( 如e j bh o m e ,l o c a l ,r e m o t e ) 和部署配置文件。a n d r o m d a 本身是一个转换引擎,可以插入某个转换定义来支持对应于某种体系结构的代码生成,而代码生成的过程主要通过模板的方式来实现,一个c a r t r i d g e 由一套定义生成格式的模板文件组成,a n d r o m d a 利用模板生成各种类型的文本输出,如源代码、数据库脚本、w e b 页面、o r 映射配置文件等。a n d r o m d a 支持基于v e l o c i t y 和f r e e m a r k e r 等模板引擎生成的模板。用户还可以用j a v a 编写自己的转换定义。a n d r o m d a 的操作支持m a v e n 和a n t ,通过在配置文件中进行各项设置之后,按照命令行提示,可以一步步地进行对模型的操作以及代码的生成。1 2 2 国内研究现状总的来说,国内目前在模型转换这方面的工作比较少,仅有的几个商业项目中,金蝶b o s 和k c o m 商业项目细节并没有对外公布。目前,较为人所知的是楚凡公司推出的一款m d a 工具:t r u f u nk a n t “1 ,经过使用可以分析它的一些特点如下:1 ) 在对模型的操作上,使用的是t r u f a n p l a t o 中定义的一套a p l ,t r u f a n k a n t本身就集成了建模功能,因此,对模型的读取和写入操作是一个很自然的过程,不过其使用的模型是自定义的一套格式,并不直接支持x m i 。2 ) 代码生成方式使用的是基于模板的技术,这和e m f 是一样的。封装的是一个开源的模板引擎,并且预定义了j 2 e e 和j a v a 的代码模板。此外,国防科技大学的陈翔等在文献 1 2 】中提出了一个采用x s l t 技术的p s m 到代码转换没计方案。采用e m f 导出x m l 格式的模型,将具体的业务逻辑用x m l 格式的模型表示,而与技术相关的信息作为x s l t 模板,包括程序模板和基础设施。通过x s l t 处理器,实现了代码的生成。具体过程是:在从具体业务模型映射到实际代码的过程中,采用x s l t 技术的代码生成器读取对应具体、l k 务模型的x s l t 程序模板文件,读取描述具体业务模型信息x m l 文档,通过x s l t 处理器,生成所需要的代码。中山大学硕士学位论文1 2 3比较分析比较上述几种模型到代码转换的工具或方案,我们可以看出,m d a 的工具支持x m i 格式的模型作为输入,可以接受不同建模工具所创建的模型( 只要这些建模工具具备导出x m i 格式模型的功能) ,工具之间是可以交换彼此的模型的。而不支持x m i 标准的实现则不是按照m d a 的规范来实现的过程,所以并不具备x m i 作为模型交换标准所带来的好处。同时,p s m 到代码的转换并不仅仅是代码生成,它还包括对模型的一些操作如对模型的获取、更新、存储等。此外,在其他细节方面,当前丌源的工具往往集成了a n t 或者m a v e n 等脚本配置工具,对转换的操作都采用命令行的方式进行,而没有直观的图形界面。1 3 本文的主要工作本文主要工作包括以下几部分:1 ) 介绍了与模型操作相关的内容其中,x m i 是模型的交换标准,作为p s m 模型的存储格式;u m l 元模型包含了p s m 模型的所有属性;u m l 扩展机制( u m lp r o f i l e ) 则可以使p s m 在特定平台上表示得更精确。2 ) 详细地分析和比较了各种代码生成技术包括基于访问者的方式、利用x s l t 来直接对x m i 文件进行处理的方式和基于模板的生成方式。3 ) 设计和实现了模型到代码的转换工具这部分是本文的重点,它细分为两部分:对模型的操作和对代码的生成。其中,对模型的操作部分讨论了如何从x m i 中读取模型,以及如何实现对在内存中的模型进行动态编辑等;对代码的生成部分讨论了p s m 到j a v a 代码的转换规则,以及如何利用模板技术生成代码等。4 ) 给出工具的应用以一个银行系统的例子演示了利用所设计的工具进行模型到代码转换的过程,并对结果进行分析和比较。m d a 中基于j a v a 的p s m 到代码转换研究及实现1 4 本文组织结构本文共分5 章,各章内容如下:第1 章绪论介绍了研究背景,阐明本课题的研究内容及意义,介绍了研究现状和本文的主要工作,同时简要说明论文的组织结构。第2 章模型到代码转换的相关技术介绍了m d a 中模型操作相关的内容,并分析比较了主流的代码生成技术,第3 章转换工具的设计与实现本文的重点,阐述p s m 转换到代码技术的设计与实现,包括所采用的技术方案,各部分的设计等。第4 章工具的应用:j a v a 代码生成提供了一个具体的应用演示模型的读取、模板的设置、利用反射机制来修改模型和生成代码的整个过程,并与同类工作对比。第5 章总结与展望总结全文内容,并展望下一步需要进行的工作。巾山大学硕士学位论文第2 章模型到代码转换的相关技术2 1m i ) a 相关理论2 1 1u m l 元模型u m l 是由b o o c h 、r a m b a u g h 、j a c o b s o n 在结合了各自的建模方法( b o o c h 、o m t 、o o s e ) 以及其他当时主流的建模方法后于二十世纪九十年代中提出的一种可视化的建模语言。自从1 9 9 7 年被o m g 采纳为标准以来,u m l 已经经历了1 1 、1 3 、1 4 、1 4 2 ( i s o 标准) 、1 5 ( 增加了动作语义) 、2 0 几个版本。在本文中,u m l 是用来描述p s m 的建模语言。在u m l 的规范中,包括了u m l 抽象和u m l 具体语法,所谓u m l 具体语法就是u m l 的表示法,它定义了u m l 的表示符号,为建模者和建模工具的开发者提供了标准的图形化符号和正文语法。u m l 抽象语法则是u m l 的语义,它是通过元模型来进行定义的。u m l 的一个优点是抽象语法和具体语法相分离l lj 。这意味着u m l 的具体语法不仅可以是图形化的表示,也可以是文本化的,比如用x m l 格式( x m i ) 、或者j a v a 接口的方式。在m d a 中,真正关心的是其抽象语法,而不是它如何表示。u m l 元模型规定了u m l 模型中所能够拥有的结构、属性和行为。在u m l规范中又把u m l 元模型分为结构化模型和行为化模型,结构化模型又称为静态模型,行为化模型又称为动态模型。结构化模型强调了一个系统中对象模型的结构,包括它们的类、接口、属性和关联等;而行为化模型则强调了系统中对象模型的行为,包括它们的方法、对象间的交互、协作,以及对象的状态变迁。图2 1 展示了一个u m l 元模型片断。它表示的是结构化模型的核心。本文所讨论的模型都是基于这个元模型的结构。因为这是元模型图,为区别起见,在此,图中每一个类都称为一个元类。以下对该图进行一个较详细的解释。m d a l 啮于j a v a 的p s m 到代码转换研究及实现口e l e m e n t图2 - 1u m l 元模型片断1 1 6 i在图中,处于最上面的是一个e l e m e n t 抽象类,它是元模型继承体系中最顶层的元素,代表了它和所有继承自它的都是模型的一个原子要素。口m o d e l e l e m e n t在元模型中,m o d e l e l e m e n t 足所有有名字的建模元类的基类。它只有一个属性n a m e 。口e l e m e n t o w n e r s h i p定义了处于一个n a m e s p a c e 中的m o d e l e l e m e n t 的可见性。有两个属性,v i s i b l i t i y 是一个可枚举项,包括p u b l i c 、p r i v a t e 、p r o t e c t e d 和p a c k a g e 。口n a m e s p a c e在n a m e s p a c e 这个m o d e l e l e m e n t 中,可以包含其他m o d e l e l e m e n t ,比如中山大学硕士学位论文c l a s s i f i e r 和a s s o c i a t i o n 。每一个包含在n a m e s p a c e 里面的m o d e l e l e m e n t 都拥有一个独一无二的n a l t l e 属性。口f e a t u r ef e a t u r e 是一个抽象类,它包含在一个c l a s s i f i e r 中,定义了一个c l a s s i f i e r 的子类或者c l a s s i f i e r 本身的一个实例的结构或者行为特性。它的属性中,o w n s c o p e可枚举项有两个值:i n s t a n c e 和c l a s s i f i e r ,表示每个实例独自拥有一份f e a t u r e 还是整个c l a s s i f i e r 共享一份。口g e n e r i z a b l e e l e m e n t表示g e n e r i z a b l e e l e m e n t 的予类都是可以泛化的。属性中,i s a b s t r a c t 表示该元类是否允许实例化。i s l e a f 幕t i s r o o t 表示该元素在一个泛化关系中是否叶子( 没有子类) 或者根( 没有父类) 。op a r a m e t e r参数元类主要用于o p e r a t i o n 中,它属性中有一个k i n d 可枚举项,分别有i n( 指的是输入参数,且只读的) 、o u t ( 输出参数,返回给调用者) ,i n o u t ( 输入参数,修改后返回给调用者) 、r e t u r n ( 返回参数) 。口c o n s t r a i n t约束是附在一个m o d e l e l e m e n t 上的一个表达式,它可以用自然语言来表达,也可以用具有精确语义的语言来表达。它有一个b o d y 属性,就是约束的表达式。口c l a s s i f i o r类元c l a s s i f i e r 是一个具有结构特性或者行为特性的元素。它是类c l a s s 、数据类型d a t a t y p e 、接口i n t e r f a c e 等的父类。c l a s s i f i e r 继承了n a m e s p a c e ,因此它可以包含另外一个c l a s s i f i e r 。口s t r u e t u r a l f e a t u r e结构特性s t r u c t u r a l f e a t u r e 描述了一个类元实例的结构上的特性,如a t t r i b u t e ,它的属性有c h a n g e a b i l i t y ,表示属性是否只读;m u l i t i p l i c i t y 表示多重性;o r d e r i n g 表示是否有序,t a r g e t s c o p e 表示可见性。ob e h a v i o r a l f e a t u r e行为特性则是描述了一个类元实例行为上的特性,如操作o p e r a t i o n 。它的属性i s q u e r y 表示是否查询,也就是说是否该特性的执行不影响系统的状态。oa t t r i b u t e属性a t t r i b u t e 继承了结构特性,属性元类有一个属性i n i t i a l v a l u e ,表示属性的初始值。口o p e r a t i o nm d a 巾基于j a v a 的p s m 到代码转换研究及实现操作o p e r a t i o n 继承了行为特性,它的几个主要属性如下:i s a b s t r a c t i o n ,是否抽象操作,若是则该操作没有对应的实现;i s l e a f ,若真,则该操作不可被子类改写( o v e r r i d e ) ;i s r o o t ,若真,拥有该操作的类不能继承一个其有同样签名操作的类。口m e t h o d操作的实现,具有一个属性b o d y ,可以指定方法体。图2 2 关联元模型图2 2 展示了关联的元模型,图中主要元类是a s s o c i a t i o n e n d ,每1 个a s s o c i a t i o n 元类都有两个a s s o c i a t i o n e n d ,意即一个关联对应两个关联端。关联端有以下几个属性。i s n a v i g a b l e :表示该关联端是否可导航( 是否可以从另一端导航到本端) 。4中山大学硕士学位论文a g g r e g a t i o n :可枚举项,n o n e 表示普通关联,a g g r e g a t e 表示聚合关联,c o m p o s “e 表示组合关联。2 1 2u m l 扩展机制图2 - 3u m l 扩展机制元模型1 1 6 虽然u m l 提供了足够多的建模元素给用户来为他们的系统建模,不过用户总会在某个时候需要一些标准u m l 以外的特性,为了支持这种需求,u m l 内置了扩展机制,称为u m l p r o f i l e 。u m l 扩展机制有个原则,那就是不能与已有的标准u m l 语义相抵触,相反,它被用来增强标准u m l 在某个特定领域中的语义,而提高特定领域的语义精确性的好处是有利于代码生成。其元模型见图2 3 。在u m l p r o f i l e 中,主要通过扩展型( s t e r e o t y p e ) 、约束( c o n s t r a i n t ) 、标记定义( t a gd e f i n i t i o n ) 和标记值( t a g g e dv a l u e ) 来进行对模型的扩展。扩展型是一个用来定义额外的值、约束或者图形化标记的模型元素。由于扩展型本身也是一个元类,因此,在建模工具中可以直接设置扩展型,而扩展型一般是附在一个已有的类中,比如一个i n v o i c e 的类可以附上一个扩展型p e r s i s t e n t ) )来指示该类代表的是一个数据库的表定义。标记定义用来指定附在模型元素上的新类型的属性,可以把它理解成一个元m d al = | _ i 基于j a v a 的p s m 到代码转换研究及实现属性( 定义属性的属性) 。而标记值则是这个元属性的值,它可以是简单的数据类型或者是其他模型元素。标记定义和标记值常用来表示一些模型管理方面的信息( 如作者、日期等) 。约束主要用来增强它所附于的模型元素的语义。在本文的转换工具里面,u m lp r o f i l e 用来定义作为输入的p s m 。2 1 3m o f 映射m o f t l 5 】是m e t a o b j e c t f a c i l i t y ( 元对象设施) 的简称,是o m g 组织在1 9 9 7年提出的一个标准,当前最新版本是2 0 。它包含了一系列的建模结构以让建模者可以用来进行各种元模型的定义,使得基于m o f 定义的元模型具有可交互性m 2 f 0 m lj ,。,:i ,一:二,。一i t l 霉r l b u t e 乒砷i 。# 兰,f-,j 。e i n s t a n c e o l )jq i n s t a n c e o f )州嘴i a n 随饼h# n s f a n c e o hm 1 u s e rm o d e l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论