(计算机应用技术专业论文)aop应用程序中的结构冲突问题解决框架研究.pdf_第1页
(计算机应用技术专业论文)aop应用程序中的结构冲突问题解决框架研究.pdf_第2页
(计算机应用技术专业论文)aop应用程序中的结构冲突问题解决框架研究.pdf_第3页
(计算机应用技术专业论文)aop应用程序中的结构冲突问题解决框架研究.pdf_第4页
(计算机应用技术专业论文)aop应用程序中的结构冲突问题解决框架研究.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机应用技术专业论文)aop应用程序中的结构冲突问题解决框架研究.pdf.pdf 免费下载

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

文档简介

丧, f o rt h ed e g r e eo fm a s t e ro f e n g i n e e r i n g r e s e a r c ho nf r a m e w o r kt or e s o l v et h es t r u c t u r a l c o n f l i c ti na o p a p p l i c a t i o n l i l l ii l l i ii 7 813 m a j o r:c o m p u t e ra p p l i c a t i o nt e c h n o l o g y ca n d i d a t e :l iz h e n g s u p e r v i s o r :p r o f e s s o rh ec h e n g w a n w u h a ni n s t i t u t eo f t e c h n o l o g y w u h a n ,h u b e i4 30 0 7 4 ,p r ch i n a a p r i l ,2 0 1 0 目前,面向方面程序设计( a s p e c t o r i e n t e dp r o g r a m m i n g ,a o p ) e 在 向实用化的方向发展,但是,a o p 在实际应用中也会遇到一些问题。结 构冲突问题是面向方面软件开发中的关键问题之一,该问题不利于软件 演化,并且使系统维护变得更加困难。所以,研究a o p 应用程序中的结 构冲突问题的解决方案具有重要的理论意义和应用价值,研究成果将为 构建可适应的面向方面软件提供理论支持和工具支撑。 结构冲突问题也称为“脆弱的切入点问题”( f r a g i l ep o i n t c u tp r o b l e m ) 。 该问题主要表现为现在a s p e c t 中使用的连接点模型对于基础程序的演化 不够健壮。因为a s p e c t 中切入点的定义紧紧地依赖于基础程序的物理结 构信息,如果基础程序的结构发生了变化,可能会产生以下两个方面的 问题:无意识的连接点匹配和意外的连接点丢失,这两个问题统称为连 接点错配问题( j o i np o i n tm i s m a t c h e s ) 。其中,无意识的连接点匹配是指由 于基础程序结构的变化,已定义的切入点会无意识地捕获一个新的连接 点;意外的连接点丢失是指基础程序结构发生变化后,原来可以和切入 点定义匹配的连接点变得不能匹配。 论文提出一种基于元数据和反射机制的结构冲突解决框架,该框架 把反射体系结构中的元层作为切入点和基础程序的中间层( 概念层) ,以 实现切入点定义和基础程序结构的解耦。概念层中的概念模型主要用于 描述逻辑信息、物理信息以及二者之间的映射关系等。在基础程序中使 用元数据对逻辑信息进行标注,同时,切入点的定义也使用逻辑信息。 当基础程序的结构发生演化后,不需要修改切入点的定义,不仅提高了 a s p e c t 的可重用性,而且从体系结构层面上解决了a o p 应用程序中的结 构冲突问题。 关键词:面向方面编程;结构冲突;元数据;概念模型 武汉工程大学硕士学位论文 i l s t r u c t u r a lc o n f l i c ti sa l s ok n o w na s ”f r a g i l ep o i n t c u tp r o b l e m ”i tm a i n l y r e p r e s e n t st h a tt h ec u r r e n tj o i np o i n tm o d e lu s e di na s p e c ti s n o tr o b u s t e n o u g hf o rt h ee v o l u t i o no ft h eb a s ep r o g r a m b e c a u s ed e f i n i t i o no ft h e p o i n t c u ti na s p e c tc l o s e l yr e l i e so nt h es t r u c t u r a li n f o r m a t i o no ft h eb a s e p r o g r a m ,i fs t r u c t u r eo ft h eb a s ep r o g r a mc h a n g e s ,i tm a yp r o d u c ep r o b l e m s o f j o i np o i n tm i s m a t c h e s ,w h i c hi n c l u d et h eu n i n t e n d e dj o i np o i n tc a p t u r ea n d t h ea c c i d e n t a lj o i np o i n tm i s s a n d ,t h eu n i n t e n d e dj o i np o i n tc a p t u r em e a n s t h a tt h ed e f i n e dp o i n t c u tc a p t u r e san e wj o i np o i n tu n c o n s c i o u s l yb e c a u s eo f s t r u c t u r a lc h a n g e so ft h eb a s ep r o g r a m ;t h ea c c i d e n t a lj o i np o i n tm i s sm e a n s t h a t a f t e rt h eb a s ep r o g r a m ss t r u c t u r ec h a n g e s ,t h ej o i np o i n tb e c o m e s u n m a t c h e dw h i c hc a nb em a t c h e dw i t ht h ep o i n t c u td e f i n i t i o no r i g i n a l l y t h ep a p e rp r o p o s e daf r a m e w o r kb a s e do nt h em e t a d a t aa n dr e f l e c t i o n m e c h a n i s mt or e s o l v et h es t r u c t u r a lc o n f l i c t t h i sf r a m e w o r kc o n s i d e r sm e t a 1 e v e li nt h er e f l e c t i o na r c h i t e c t u r ea st h em i d d l el e v e l ( c o n c e p t u a ll e v e l ) b e t w e e np o i n t c u ta n db a s ep r o g r a m ,i no r d e rt oa c h i e v ed e c o u p l i n gb e t w e e n d e f i n i t i o no ft h ep o i n t c u ta n ds t r u c t u r eo ft h eb a s ep r o g r a m c o n c e p t u a l m o d e li nt h e c o n c e p t u a l l e v e li s m a i n l yu s e dt o d e s c r i b et h el o g i c a l i n f o r m a t i o n ,p h y s i c a l i n f o r m a t i o na sw e l la st h em a p p i n gr e l a t i o n s h i p s i i i 武汉工程大学硕士学位论文 b e t w e e nt h et w ok i n d so fi n f o r m a t i o n ,a n ds oo n i nt h eb a s ep r o g r a m , w e u s e m e t a d a t at oa n n o t a t ei t sl o g i c a li n f o r m a t i o n ,s i m u l t a n e o u s l y , u s i n gt h el o g i c a l i n f o r m a t i o nt od e f i n et h ep o i n t c u t i nt h i sw a y , w h e nt h es t r u c t u r eo fb a s e p r o g r a me v o l v e s ,i ti su n n e c e s s a r y t om o d i f yd e f i n i t i o no ft h ep o i n t c u t ,w h i c h n o to n l ye n h a n c e st h er e u s a b i l i t yo fa s p e c t ,b u ts o l v et h es t r u c t u r a lc o n f l i c ti n a o p a p p l i c a t i o nf r o mt h ea r c h i t e c t u r el e v e l k e y w o r d s :a s p e c t o r i e n t e dp r o g r a m m i n g ;s t r u c t u r a lc o n f l i c t ;m e t a d a t a ; c o n c e p t u a lm o d e l 第l 章绪论1 1 1 研究背景及意义1 1 1 1 研究背景1 1 1 2 研究意义3 1 2 结构冲突问题描述4 1 3 国内外研究现状7 1 4 论文主要研究内容9 1 5 论文章节安排1 0 1 6 本章小结1 1 第2 章相关概念和技术1 3 2 1 概念模型13 2 2 元数据l3 2 3 反射。l5 2 4 织入17 2 5a s p e c t j 19 2 6x m l 2 0 2 7 本章小结2l 第3 章基于元数据和反射机制的结构冲突解决框架2 3 3 1 框架概述2 3 3 1 1 框架的基本原理2 3 3 1 2 框架的功能分析2 5 3 2 标注( 元数据) 的定义2 6 3 3 应用该框架的a o p 系统的流程2 7 3 4 本章小结2 9 第4 章框架的实现j 3l 4 1 标注自动生成工具31 4 1 1 使用x m l 描述概念模型。31 4 1 2 基础程序中逻辑信息的初始化及更新3 3 4 1 3 基础程序中的物理信息到概念模型的自动映射3 5 4 2 反射体系结构的实现3 7 4 2 1 元层程序自动生成算法3 7 4 2 2 具体化和反射3 9 4 2 3 一个例子4 l v l 武汉工程大学硕士学位论文 4 3 本章小结4 3 第5 章总结与展望4 5 5 1 总结4 5 5 2 展望4 6 参考文献4 7 攻读硕士期间发表的论文5 3 致 射。5 5 v l 复用等问题。在面 类用以实现具体的 功能,每个类扮演一个角色,以此来实现软件系统角色的划分。但是, 为了实现软件功能,类与类之间的关系通常是错综复杂的,面向对象程 序设计方法只通过继承实现了类与类之间纵向的联系,而它们之间横向 的联系却被忽略了,结果导致一些共同属性散乱分布在多个类的代码中。 从角色划分角度来说,类由于承担了多个角色而导致代码混乱,结果使 得封装不严密,划分的角色也不清晰,并且也不利于软件的维护和复用。 除此之外,面向对象技术在一些大型系统、分布式系统以及灵活性要求 比较高的系统中也存在很多局限性。 为了解决面向对象技术中存在的上述问题,1 9 9 7 年召开的欧洲面向 对象程序设计大会提出了面向方面的软件开发a o s d ( a s p e c t - - o r i e n t e d s o f t w a r ed e v e l o p m e n t ) ,通常称为面向方面编程a o p ( a s p e c t - - o r i e n t e d p r o g r a m m i n g ) t 1 】【2 】,其目的是让程序员把软件系统的功能和非功能需求、 平台特性等诸多不同的关注点相互独立,将“横切结构 模块化。同时, 它把横切关注点( 在a o p 语言中,使用a s p e c t 定义) 织入( w e a v i n g ) 至l j 基础 程序( b a s ep r o g r a m ,使用o o p 实现的系统核心业务功能,不包含a s p e c t 的程序) ,以构建最终系统。a o p 为定义、说明、设计和构建方面提供了 一种过程和方法,是对横切关注点局部表示的一种机制,超越了子程序 和继承的方法【2 】【3 1 。通过划分a s p e c t 代码,横切关注点变得容易处理【4 1 。 软件开发人员可以在程序编译或运行时更改、织入或删除a o p 系统中的 a s p e c t ,甚至重用系统的a s p e c t 。 一般说来,面向方面软件由两部分组成:实现系统核心业务功能的 基础程序( b a s ep r o g r a m ) 和实现横切关注点的方面代码( a s p e c t ) 。一个 武汉工程大学硕士学位论文 a s p e c t 的成员包括切入点( p o i n t c u t ) 和通矢h ( a d v i c e ) 。a s p e c t 中定义的切入 点是一组连接点( j o i np o i n t ) 的集合,而一个连接点是程序流中的一个特定 的执行点【5 1 ,通知是方面a s p e c t 的具体实现。a s p e c t j 6 ) 7 8 】和a s p e c t w e r k z l 9 1 是目前应用比较广泛的a o p 语言。 a o p 中涉及到的主要相关概念描述如下: 横切关注点【1 0 1 1 1 1 ( c r o s s c u t t i n gc o n c e r n ) :与系统的核心业务无关,却 为业务模块所共同调用的逻辑或责任,其实现横跨多个核心关注点( 类 模块) ,比如权限认证、日志、事务处理、异常处理等。 方面( a s p e c t ) :一个横切关注点的模块化。就是将那些影响了多个类 的公共行为分离出来然后将其封装到一个可重用的模块,即是所谓的方 面。方面的概念类似于o o p 中定义的一个类,它封装了“横切关注点 的实现代码,即:需要被织入到程序流程中的一段代码。除此之外,方 面模块还定义了“切入点 ,即定义了a s p e c t 方面为哪些类的哪些方法提 供服务,也即a s p e c t 织入到基础程序中的具体位置。这个过程也可以通 过面向对象编程技术来实现,只是如果使用a o p 方法实现,则当系统需 要用到这些功能时,不再需要对其进行显示调用。换句话说,这些方面 模块对于业务程序员是透明的。 连结点( j o i np o i n t ) :程序流中的一个特定的执行点,例如类中的一个 方法。在该点织入方面代码,以实现横切关注点的功能。 切入点( p o i n t c u t ) :一组连接点的集合,本质上是一个捕获连接点的 结构,当这组连接点发生的时候调用相应的通知。它类似于o o p 中的方 法声明,在a o p 中,可以通过定义一个切入点来捕获相关方法的调用、 执行等。 通矢h ( a d v i c e ) :类似于方法的具体实现,是执行“方面”的具体逻辑, 即切入点的执行代码,也是织入到连接点中的代码。程序执行到连接点 时,会执行相应的通知。通知包括三种类型:b e f o r ea d v i c e ,在匹配的连 接点之前执行;a f t e ra d v i c e ,在匹配的连接点之后执行;a r o u n da d v i c e , 在匹配的连接点周围( 之前之后) 执行,即:由a d v i c e 控制对所匹配的连接 点的调用,例如:可以决定匹配的连接点是否继续执行,可以改变当前 第1 章绪论 连接点的返回值以及相应的参数等。 引入( i n t r o d u c t i o n ) :为对象或者接口引入附加的方法或成员,从而达 到修改对象结构的目的。 织入( w e a v i n g ) :将方面代码织入到基础程序代码的过程。对于静态 a o p ,在编译时织入所需要的方面代码,而动态a o p 则在程序运行时动 态地织入方面代码。 a o p 根据需求把软件系统分为两个部分:核心关注点和横切关注点。 业务处理的主要流程是核心关注点,横跨多个核心关注点却必不可少的 部分是横切关注点。从本质上讲,a o p 使用一种松散耦合的方式分别独 立实现这两种类型的关注点,然后把各种关注点的具体实现进行组合以 构建最终系统。a o p 应用程序开发一般需要以下三个步骤来完成 【1 2 】【1 3 】【1 4 】【1 5 】: ( 1 ) 根据需求分解关注点 对需求规格说明进行分解,分离出模块级的核心业务关注点和系统 级的横切关注点。即:确定软件哪些功能必须由基础程序来实现,哪些 功能可以使用a s p e c t 实现然后再根据需求织入到基础程序中。 ( 2 ) 使用不同的程序设计语言分别实现核心关注点和横切关注点 对于核心业务关注点,通常使用基础程序设计语言实现系统的核心 业务功能。例如:可以使用面向对象程序设计语言( c _ h ,j a v a 等) 来实现, 也可以使用面向过程化程序设计语言( c 语言) 来实现。 对于横切关注点,可以使用一种或多种面向方面语言来实现,比如 a s p e c t j ,只要这些面向方面语言提供用于声明a s p e c t 的机制。 ( 3 ) 重组关注点以形成最终系统 重组关注点的过程也成为织入,即根据一定的重组规则,利用面向 方面语言提供的编织器把方面代码织入到基础程序实现的核心业务功能 代码中,以构建最终的可运行系统。 1 1 2 研究意义 面向方面编程可以被认为是对面向对象技术的一种补充和完善,它 武汉工程大学硕士学位论文 弥补了面向对象程序设计方法在跨越多个模块行为上的不足。a o p 通过 引进a s p e c t 将影响多个类的行为( 横切关注点) 封装到一个可重用模块 中,从而消除了o o p 引起的代码混乱和分散问题,降低了类与类之间的 耦合度,进一步增强了类之间的内聚度,使软件更易于操作、维护、复 用和扩展,使系统架构变得更灵活、轻便。 目前,随着信息技术的不断发展,面向方面程序设计方法也在向着 实用化的方向发展,但是,a o p 在实际应用中也会遇到一些问题,结构 冲突问题( 关于该问题的详细描述请查阅1 2 ) 就是面向方面软件开发中存 在的关键问题之一。例如:虽然基础程序和a s p e c t 可以分别使用不同的 程序设计语言来独立实现,但是a s p e c t 中切入点的定义需要使用基础程 序中的相关信息( 类名、方法名等) ,所以基础程序结构的变化会导致两 者间产生结构冲突问题,从而使系统维护变得更加困难,并且不利于软 件演化。 现阶段,国外的一些系统中已经应用了a o p ,而在国内,面向方面 的程序设计研究尚未取得重大进展。所以,研究a o p 应用程序中的结构 冲突问题的解决方案具有重要的理论意义和应用价值,研究成果将为构 建可适应、高可信的面向方面软件提供理论支持和工具支撑。基于元数 据【1 6 】和反射机制【1 7 1 1 8 】的结构冲突解决框架,使用j a v aa n n o t a t i o n 1 9 】定义 基础程序的逻辑结构,并且a s p e c t 中切入点定义使用逻辑结构中的相关 信息,从语义级上实现了切入点定义和基础程序结构的解耦,当基础程 序的结构发生变化后,不需要修改切入点的定义,不仅提高了a s p e c t 的 可重用性,而且从体系结构层面上解决了a o p 应用程序中的结构冲突问 题。 1 2 结构冲突问题描述 结构冲突问题也称为“脆弱的切入点问题 ( f r a g i l ep o i n t c u tp r o b l e m ) 【2 0 】【2 l 】。该问题首先由c k o p p e n 和m s t o e r z e r 在文献 2 0 】中提出,后来 a k e l l e n s 等人在文献【2 1 】中对该问题又作了进一步的阐述。“脆弱的切入 点问题”主要表现为现在a s p e c t 中使用的连接点模型对于基础程序的演 第1 章绪论 化不够健壮【2 2 1 。因为基础程序行为的修改是由于织入所需要的a s p e c t 引 起的,而a s p e c t 中切入点的定义紧紧地依赖于基础程序的物理结构信息, 这种紧密的耦合不利于软件扩展,严重地阻碍了软件演化。如果基础程 序的结构发生了变化,可能会产生以下两个方面的问题:无意识的连接 点匹配( u n i n t e n d e dj o i np o i n tc a p t u r e ) 和意外的连接点丢失( a c c i d e n t a l j o i n p o i n tm i s s ) 【2 1 1 ,这两个问题统称为连接点错配问题0 0 i np o i n t m i s m a t c h e s ) 。其中,无意识的连接点匹配是指:由于基础程序结构的变 化,a s p e c t 中已经定义的切入点会无意识地捕获一个新的连接点;意外 的连接点丢失是指:基础程序的结构发生变化后,原来可以和切入点定 义相匹配的连接点变得不能匹配了。 下面用一个简单的例子来说明连接点错配问题( a s p e c t 的定义使用 a s p e c t j 语言) ,如下图1 1 所示。图1 1 中,类g r e e t i n g s 和方面m a n n e r s a s p e c t 分别表示基础程序和a s p e c t 的定义。该程序表示在执行类g r e e t i n g s 中的 s a y ( ) 方法的前后,分别输出字符串“h e l l o ! 和“g o o d b y e ! 。 p a c k a g e 雠o r p u b l i cc t 坞sg f 院虹n g s ( p u b l i cv o i dm y ( s t 血gm e s s a g e ) ( s y s t m _ o u t l m n t l n ( m e s s a g e ) , ) ) p u b l i ca s p e c tm a n n e r s a s p c c t ( p o i r z t c u te a l k q a y m e s s a g e 0 l c a l l ( * g r e a i n g s m yc m b e f o r ol 咖m e s m g e 0 ( s y s t m lo u t p r i n t l n ( ”h e n o _ ) ; ) a f t n 0 :e a l l s a y m e s s a g e0 ( s y s t e m o u t p r i n t l nc g o o d b y e ! o ; ) ) 图1 1 类g r e e t i n g s 和方面m a n n e r s a s p e c t 的定义 基础程序和方面代码独立开发完成后,假设根据需求,要对类 g r e e t i n g s 作如下修改: 类g r e e t i n g s 中原有的方法s a y ( ) 的方法名变更为n e w _ s a y ,但 武汉工程大学硕士学位论文 其实现的功能不变,即在该方法执行前后分别输出字符串 “h e l l o ! 和“g o o d b y e ! ; 在该类中增加一个新的方法s a y ( ) ,该方法没有参数,其功能只 用于输出字符串“h o wa l ey o u ? ,在其执行前后不需要输出 其它字符串。 修改完成后的类g r e e t i n g s 如下图1 2 所示: p a c k a g ef l r 雌o p ; p u b l i cc l a s s6 r 嘣m g s ( p u b l i cv o i dn e w _ m y ( s m gm e s s a g e ) ( s y s t e mo u t p h n t l n ( m e s s a g e ) ; ) p u b l i cv o i ds a y 0 ( s y s t e mo u t 蜘, n n n ( h o w 笤ey 0 讲- ) ; ) 图l - 2 修改后的类g r e e t i n g s 当类g r e e t i n g s 的结构根据需求作相应的修改后,如果不相应的修改 方面m a n n e r s a s p e c t d p 切入点的定义,则程序实际执行后的结果和需要的 结果相比将会产生很大的差别,如下表1 1 所示: 表1 1 类g r e e t i n g s i 簦j 结构变更后执行结果的差异 方法实际执行后的结果 预期结果 n e w _ s a y ( s t r i n gm e s s a g e )只输出字符m e s s a g e 的值,在 h e l l o ! 其前后没有输出任何内容 输出字符m e s s a g e 的值 g o o d b y e ! s a y ( ) h e l l o ! h o wa r ey o u ?h o wa r ey o u ? g o o d b y e ! 从表1 1 可以看出,方法n e ws a y ( ) 执行结果的前后,并没有根据需求 在其输出信息前后分别输出字符串“h e l l o ! ”和“g o o d b y e ! 。因为类 g r e e t i n g s 中原有的方法s a y ( ) 将其方法名变更为n e ws a y ,和方面 m a n n e r s a s p e c t 切入点所定义的连结点c a l l ( * g r e e t i n g s s a y ( ) ) 匹配不上 了。这种基础程序结构变更前后产生的连接点不匹配现象称为意外的连 接点丢失;类g r e e t i n g s 中新增加的方法s a y ( ) 执行结果的前后,根据程序 第1 章绪论 需要原本不应该输出其它字符串,只输出字符串“h o wa l ey o u ? ,从表 1 1 可以看出,程序的实际执行结果却在字符串“h o wa r ey o u ? 之前和 之后分别输出了字符串“h e l l o ! 刀和“g o o d b y e ! 。因为方面 m a n n e r s a s p e c t t 9 己定义的切入点可以捕获新增加的s a y 0 方法,即:方法 s a y ( ) 可以和切入点中定义的连接点相匹配。这种由于基础程序结构变化 导致的捕获意外连接点现象称为无意识的连接点匹配。 由基础程序结构的变更产生的无意识的连接点匹配和意外的连接点 丢失是连接点错配问题的两个方面,是“脆弱的切入点问题 的两种具 体表现形式。 1 3 国内外研究现状 重构【2 3 】【2 4 】【2 5 】是指在不改变代码外部行为的情况下,以改进其内部结 构的方式重组软件结构的过程。这是一种修改或简化代码内部设计以尽 可能减少引入错误的严格方法,即:在代码完成之后对代码设计进行改 进。重构有利于提高软件质量,促进软件演化。但是,在重构过程中会 导致基础程序的结构发生变化,例如:类名、方法名的变更、方法的添 加、删除以及移动等。对a o p 应用程序而言,基础程序的这些结构变化 将会导致结构冲突,从而产生连接点错配问题。 文献 2 6 】提出了一种分离切入点和通知的方法,从一定程度上提高了 a s p e c t 的可重用性,减少了发生结构冲突的可能性,但在该文中并没有 具体阐述如何实现该方法。a s p e c t w e r k z 凹1 是一种基于j a v a 的简单、动态、 轻量级的a o p 框架,它把切入点的定义从a s p e c t 中分离出来,使用x m l 文件定义通知和基础程序之间的绑定关系,进一步提高了a s p e c t 的可重 用性。 文献 2 0 阐述了a o p 应用程序中存在的“脆弱的切入点问题 ,针对 该问题以e c l i p s e 插件的形式实现了一种用于分析该问题的可视化的工 具,在对已匹配的连接点集合进行比较分析的基础上,该工具可以自动 检测并显示基础程序结构变化前后的切入点语义的区别。该方法有利于 程序员发现软件中由于切入点导致的错误,从而可以对程序作相应的修 武汉工程大学硕士学位论文 改。但是,该方法在分析软件演化前后的两个版本的基础上只适用于检 测切入点语义的变化,并且当检测到这些语义变化后需要使用手工方法 逐一进行修改,没有实现软件体系结构的自适应性。 w a l t e rc a z z o l a 等人在文献 2 2 】中指出,基础程序和a s p e c t 之间应该 是一种松散的耦合。在分析a s p e c t j 框架及其连接点模型的基础上,提出 一种基于u m l ( u n i f i e dm o d e l i n gl a n g u a g e ) 描述的设计信息来定义连接 点模型的方法并且提出了一种如何基于这些设计信息来识别切入点和通 知的机制,提高了a s p e c t 的可重用性,有利于更好地支持软件演化。文 中使用u m l 提供一个较灵活完整的模型作为连接点模型的基础,对程序 员而言显得更直观和易于理解,但该方法存在的不足是如何把抽象的设 计信息转换成具体的程序代码,以及如何在这两种信息之间保持同步。 文献 2 1 】提出了一种基于模型的切入点定义方法,该方法把脆弱的切 入点问题转移到更容易解决的概念层。具体做法是在切入点和基础程序 之间加入一层概念层,根据基础程序的概念模型定义切入点,而不是直 接使用基础程序的结构信息,从而有效实现了切入点定义和基础程序结 构之间的解耦。此外,当基础程序演化时,通过给概念模型添加结构和 语义约束,概念模型提供了一种检查潜在的脆弱切入点问题发生的位置 以及原因的方法,使得概念模型对于基础程序的演化具有健壮性。但是, 该方法实现时需要把逻辑语言作为实现语言,并且必须预先定义好基础 程序的概念模型。 文献 2 7 】基于基础程序演化前后的已匹配的连接点集合的比较引入 了p o i n t c u td e l t a 分析方法来解决脆弱的切入点问题。a s p e c t j 开发工具 a j d t ( a s p e c t jd e v e l o p m e n tt o o l s ) 只静态的分析单个程序版本以向开发人 员提供有价值的反馈,与a j d t 相比,该方法使用程序演化前后的两个 版本分析已捕获的连接点之间的差别,以更好的支持软件演化。虽然该 方法最后扩展了a j d t ,以e c l i p s e 插件的形式给出了该分析工具的具体 实现,但是没有大量的数据用于评估该工具的有效性。 在国内,北京大学软件工程研究所的梅宏教授提出了一种关注点分 离技术,该技术在基于构件的软件开发中可以系统化地支持面向贯穿的 化封装 我们针对a o p 应用程序中有可能出现的结构冲突问题作了大量的研 究工作,并且提出了一些解决该问题的方法【2 9 1 1 3 0 1 3 1 】【3 2 1 3 3 1 。文献 3 0 1 提出 了一种基于反射机制的方法,它把反射机制中的元层作为基础程序和 a s p e c t 中定义的切入点之间的中间层,根据基础程序结构变更前的相关物 理信息,自动生成元层程序,以此实现连接点的自动匹配。在该方法中, 元层程序定义与基础程序演化前的物理结构信息紧密耦合,从较低的层 次实现了基础程序结构和切入点定义的解耦。 对于较大规模的面向方面软件,我们需要定义基础程序的逻辑结构, 在更高的层次上( 语义级) 实现基础程序和切入点定义的解耦。所以,我 们从软件演化的角度出发,注重方法的有效性和实用性,在文献 3 l 】中提 出了一种基于概念模型和反射机制的结构冲突解决框架,在基础程序和 切入点定义之间加入一层概念层( 反射机制中的元层) ,通过使用概念层中 的相关信息定义基础程序的逻辑结构,同时,切入点的定义使用逻辑结 构中的相关信息,从语义级上实现了两者间的解耦。当基础程序的结构 发生变化时,可以通过相关逻辑信息实现连接点的自动匹配,进而从体 系结构层面解决了a o p 应用程序中的结构冲突问题。 1 4 论文主要研究内容 ( 1 ) 基础程序中元数据的定义方法研究 使用j a v a 语言中元数据的描述机制,h p j a v aa n n o t a t i o n ,在基础程序 中标注逻辑信息。在分析类、方法物理结构变化类型的基础上,定义描 述这些结构变化的标注。 ( 2 ) 概念模型中的相关信息和基础程序中信息的自动映射方法研究 具体包括以下两个方面: 概念模型中的逻辑信息到基础程序标注的自动映射。研究基础程序 中描述逻辑信息的标注的自动生成方法。即:根据概念模型中的逻 辑信息、物理信息以及相应的映射规则自动生成基础程序中的元数 武汉工程大学硕士学位论文 据标注方法。 基础程序中的物理结构信息到概念模型的自动映射。研究基础程序 结构变化后( 如:方法名的变更、方法的添加、删除以及移动等) 物理信息的抽取,并把这些信息自动映射( 更新) 到概念模型的方 法,以保证概念模型中的物理信息与基础程序结构的一致性。 ( 3 ) 反射机制中m o p ( m e t ao b j e c tp r o t o c 0 1 ) 的实现方法研究 包括基本对象和元对象间的对应关系、具体化和反射机制的实现方 法等。同时,我们要考虑如何实现有意识的连结点匹配问题,即由程序 员决定哪些类或方法需要导入反射机制。 ( 4 ) 使用元数据描述的基础程序逻辑信息自动生成元层程序的实现研 究 根据基础程序中标注的逻辑信息,自动生成元层程序( 元对象) 。生 成的元层程序被看作基础程序和a s p e c t 的中间层( a s p e c t 织入到元层程 序) ,并且元层程序的接口和切入点的定义保持一致。这样,当基础程序 结构发生变更后,如果元层程序的接口保持不变,可以避免连接点错配 问题。 1 5 论文章节安排 论文具体章节安排如下: 第一章为绪论部分,主要介绍了a o p 应用程序中结构冲突问题的研 究背景、国内外研究现状、研究该问题的意义以及论文的研究内容及其 结构的章节安排。 第二章描述了论文中涉及的相关概念和技术。 第三章介绍了基于元数据和反射机制的结构冲突解决框架的总体概 述,包括框架的基本原理及其功能分析,基础程序中标注的定义方法等。 第四章介绍该框架的具体实现,包括元层程序自动生成算法的实现 以及反射机制中具体化和反射的实现等。 第五章总结全文,并对该框架在解决结构冲突问题时存在的问题及 不足进行了分析。 研究情况,介 安排做了总体 武汉工程大学硕士学位论文 1 2 本章主要介绍论文中涉及的一些相关概念和技术。 2 1 概念模型 概念模型通常也称为信息模型,是对真实世界中问题域内事物的一 种抽象描述,而不是对软件设计的描述。概念模型不依赖于具体的计算 机系统,而是纯粹用于反映信息需求的概念结构,主要根据用户的观点 在需求分析的基础上对数据和信息世界进行建模。在建模过程中通常 需要对数据进行抽象处理,即现实世界到信息世界的第一层抽象。因 此概念模型通常具有较强的表达能力,以简单、清晰、易于理解的方 式描述现实世界。目前最常用的概念模型是实体联系模型,使用实体 关系方法对具体数据进行抽象加工,将现实世界中的实体集合抽象 成实体类型,用实体间的关系反映现实世界事物间的内在联系。 论文中,概念模型主要用于描述基础程序中的逻辑信息、物理信息 以及两者间的映射关系【3 4 1 。逻辑信息主要用于表示软件的相关概念和逻 辑功能,是对软件实现的抽象描述;物理信息则重点描述实现软件具体 功能的类及其相应的方法等。论文中,根据a o p 应用程序的特点,在概 念模型中需要表示的物理信息有包名、类名、方法( 包括访问修饰符、 方法的返回值类型、方法名等) 。与物理信息相对应,逻辑信息主要包括 逻辑类信息( 包括逻辑包名、逻辑类名以及基础程序中物理类的反射标 志等) 、逻辑方法信息( 包括逻辑类名、方法的逻辑访问修饰符、返回值 类型、逻辑方法名以及相应的物理方法的反射标志等) 。关于概念模型的 详细信息及其表示方法请查阅4 1 1 。 2 2 元数据 元数据( m c t a d a t a ) ,即“关于数据的数据 ,是对数据资源的一种抽象 描述。元数据是信息共享和信息交换的基础和前提,得到了广泛的应用, 并且在不同的领域有其具体的含义和应用。例如:在地理空间信息中元 武汉工程大学硕士学位论文 数据主要用于描述地理数据集的内容、质量、空间参考、表示方式、管 理方式等,是实现地理空间信息共享的核心标准之一;在数据仓库领域 中,描述数据及其环境的数据称为元数据,主要是指在数据仓库建设过 程中所产生的有关数据源定义、目标定义、转换规则等相关的关键数 据;在图书馆与信息界,元数据是对信息资源的一种结构化描述,主 要用于提供关于信息资源或数据的结构化的数据;在软件构造领域, 元数据在程序中不是被加工构造的对象,而是这样一种数据,通过改 变它的值可以修改程序的行为【1 6 】。 元数据是抽象概念,人们描述现实世界时产生的抽象信息可以使用 元数据表示。在元数据中有多个抽象概念级别。一般情况下,软件开发 中使用的元数据描述可扩展为二至三级的抽象概念。例如:假设一个数 据实例的描述称为元数据,则对该描述本身进行描述的数据可以称为元 元数据,然后还可以对元元数据进行描述,直到达到某个实际限度无法 再描述为止。在软件开发中,我们可以像使用任何类型的数据元素一样 使用元数据,用元数据尤其是标准元数据描述设计信息,有利于更好的 复用、共享数据等。 由于元数据得到了广泛应用,所以j d k i 5 引入j a v aa n n o t a t i o n 【1 9 】【3 5 】 的概念用于在程序中描述元数据。该方法允许在j a v a 代码中添加自定义 注释( a n n o t a t i o n ) ,并允许使用反射技术,通过编程方式访问这些元数据 注释。在j a v a 程序中,元数据以标注的形式存在,并不直接影响程序的 编译和运行,但是可以通过开发和部署工具读取这些注释,并以某种形 式处理这些注释,然后可能生成其它j a v a 源程序、x m l 配置文件或者 要与包含这些注释的j a v a 程序一起使用的其它组件,从而影响运行时状 态的程序的语义。a n n o t a t i o n 注释可以从j a v a 源代码中读取,或者从编 译后的c l a s s 文件中读取,也可以通过反射机制在程序运行时读取。下面 的代码用于说明如何定义a n n o t a t i o n 方法。 第2 章相关概念和技术 力口载在v m 中,在运行时进行反射 r e t e n t i o n ( r e t e n t i o n p o l i c

温馨提示

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

评论

0/150

提交评论