(计算机软件与理论专业论文)面向方面的软件进化研究.pdf_第1页
(计算机软件与理论专业论文)面向方面的软件进化研究.pdf_第2页
(计算机软件与理论专业论文)面向方面的软件进化研究.pdf_第3页
(计算机软件与理论专业论文)面向方面的软件进化研究.pdf_第4页
(计算机软件与理论专业论文)面向方面的软件进化研究.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

中文摘要 软件进化主要是完善系统功能以适应环境变化。它是开发任何规模的软件系 统的必要组成部分。影响软件进化效果的关键因素是系统架构,而传统编程技术 在进化过程中难以使所有关注点保持分离,导致系统架构不断退化,增加了软件 进化的难度。使用面向方面的思想分离扩展功能,模块化横切结构,可保持系统 架构在进化过程中的弹性,解决了连续进化过程中架构退化的问题。 首先,在具体分析进化过程中传统编程技术局限性的基础上,提出了通用的 基于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 ,面向方面编程) 的软件进化方案。按照 该软件进化方案,先对应用系统进行面向方面的重构,保证原系统的架构弹性; 接着分析该系统的新需求,对新功能选择适当的a 0 ( a s p e c t - o r i e n t e d ,面向方面 的) 实现技术设计其实现,保持扩展功能与原有功能的分离,进而保持了系统架 构的弹性。 其次,对软件的静态进化和动态进化做了深入的探讨。在详细分析a o p 的动 态特性和静态特性的基础上,提出了基于a o p 支持动态软件进化的系统模型。该 模型使用了a s p e c t j 5 和映像模式相结合的技术,通过映像和元对象协议实现系 统的原有功能和扩展功能的分离。这样,可以通过添加新的元对象来引入新的需 求,而基本系统保持稳定。从而使系统具有良好的弹性架构,实现系统运行时的 动态进化。 最后,在上述工作的基础上,对公司资源管理系统( c r m s ) 的原型系统进行 面向方面的软件进化。实践证明,面向方面的软件进化可以使横切关注点模块化, 避免代码分散和代码混乱;可以在不修改原有程序的基础上添加和删除新需求; 减少工作量,降低软件进化成本,为保持每次进化后系统架构的弹性提供了一个 细致的解决方案。 关键词:软件进化关注点面向方面编程映像元对象协议重构架构 a b s t r a c t s o f t w a r ee v o l u t i o nm a i n l yi m p r o v e st h es y s t e m s f e a t u r et oa d a p te n v i r o n m e n t i t i sa ni n e v i t a b l es t a g ew h e nd e v e l o p i n ga n ys c a l eo fs o f t w a r es y s t e m t h ek e yf a c t o r i n f l u e n c i n gt h es o f t w a r ee v o l u t i o nr e s u l ti st h es y s t e ma r c h i t e c t u r e , b u tt h et r a d i t i o n a l p r o g r a m m i n gt e c h n i q u ei sh a r dt om a k ea l lc o n c e r n sk e e ps e p a r a t e dd u r i n gt h ep e d o d o fe v o l u t i o n , a n dt h es y s t e ma r c h i t e c t u r ed e t e r i o r a t e sc o n t i n u o u s l y u s i n gt h e 嬲p e c t - o f i e n t e dt h o u g h t t o s e p a r a t et h ee x t e n d e d f u n c t i o na n dm o d u l a r i s et h e c r o s s c u t t i n gs t r u c t u r e , c a nk e e ps y s t e ma r c h i t e c t u r ef l e x i b i l i t yd u r i n gt h ep e r i o do f e v o l u t i o n , a n dr e s o l v et h ep r o b l e mo fa r c h i t e c t u r ed e g e n e r a t i o ni nt h ec o n t i n u o u s e v o l u t i o np r o c e s s f i r s t , b a s e do nt h ec o n c r e t ea n a l y s i so f t h el i m i t a t i o n so f t r a d i t i o n a lp r o g r a m m i n g t e c h n i q u ei nt h ee v o l u t i o np r o c e s s ,p u tf o r w a r dag e n e r a ls o f t w a r ee v o l u t i o ns o l u t i o n o nt h eb a s i so fa o ea c c o r d i n gt ot h a ts o f t w a r ee v o l u t i o ns o l u t i o n , c a r r yo u tt h e a s p e c t - o r i e n tr e f a c t o rf o ra p p l i c a t i o ns y s t e ma tf i r s t ,a n d c h o s ea p p r o p r i a t ea o r e a l i z a t i o nt e c h n i q u ef o rt h o s en e wr e q u i r e m e n t s s u c h , k e e pt h e s ee x t e n d e df u n c t i o n s s e p a r a t ew i t ht h eo r i g i n a lf u n c t i o n , a n dt h e nk e 印s y s t e ma r c h i t e c t u r ef l e x i b i l i t y s e c o n d ,s t u d yt h o r o u g h l yo nt h e s t a t i cs o f t w a r ee v o l u t i o na n dt h ed y n a m i c s o f h v a r ee v o l u t i o n o nt h e b a s i so fa s p e c t j 5 ,p u tf o r w a r das y s t e mm o d e lf o r d y n a m i cs o f t w a r ee v o l u t i o nb a s e do na o eb a s e do nr e f l e c t i o na n dm e t a - o b j e c t p r o t o c o l ,w cr e a l i z et h es e p a r a t i o no fo r i g i n a lf u n c t i o nc o n c 棚l l sa n de x t e n d e do n e s u s i n gm e t a - o b j e c tp r o t o c o l ,w e c a na d dn e wf u n c t i o n b yi n t r o d u c i n gn e w m e t a - o b j e c t si n t ot h i ss y s t e m s u c ht h eb a s i cs y s t e mk e e p ss t a b l e t h u s ,t h es y s t e m c a nc a r r yo u td y n a m i ce v o l u t i o nd u r i n gr u n t i m e a tl a s t ,c a r r yo u tt h es o f t w a r ee v o l u t i o no nt h ec r m sp r o t o t y p es y s t e m t h i s e x a m p l e 珊o v e st h a tt h ea s p e c t - o r i e n t e ds o f t w a r ee v o l u t i o nc a nm a k ec r o s s c u t t i n g c o n c e r nm o d u l a d s a t i o n ,a v o i dt h ec o n c e r nt a n g l i n ga n ds c a t t e r i n g , n e e d n tm o d i f yt h e o r i g i n a lp r o c e d l l r ef o ra d d i n g & d e l e t i n gn e wr e q u i r e m e n t s , r e d u c et h ew o r k l o a d 1 0 w e rt h es o f l w a r ee v o l u t i o nc o s t , a n dp r o v i d eae l e g a n ts o l u t i o nf o rk e e p i n gt h e f l e x i b i l i t yo f s y s t e ma r c h i t e c t u r ea f t e re a c he v o l u t i o n k e yw o r d s :s o f t w a r ee v o l u t i o n , c o n c e r n , a s p e c t - o r i e n t e dp r o g r a m m i n g , m e t a - o b j e c tp r o t o c o l ,r e f l e c t i o n , r e f a c t o r i n g ,a r c h i t e c t u r e 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的 研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得鑫叠盘茎或其他教育机构的学位或证 书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中 作了明确的说明并表示了谢意。 学位论文作者签名:金镜签字日期: 。一石年j 月彳日 学位论文版权使用授权书 本学位论文作者完全了解鑫壅盘茎有关保留、使用学位论文的规定。 特授权盘壅盘鲎可以将学位论文的全部或部分内容编入有关数据库进行检 索,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校 向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:金抚 导师签名: 签字日期:2 耐年j 月2 日签字日期:莎“年工, e l ,6 日 第一章臻论 1 1 课题背聚弩研究意义 第一章绪论 对于很多机构面言,软件系统现在越来越重要。如果没有软件帮助篱理业务 流程窝搡撵,瑗在缀多瓿秘褥赡以蔗常运转。众掰周熊,软锋系统是+ 分复杂熬。 在设诗实凌这稃静复杂系统露,受歼发入贯鸯身的隈露两无法蘑西穰到,也不可 能一蹴而就。并且软件系统还需隳不断适应无法预期的环境变化,这些变化主要 是来自技术上( 新硬件,操作系统,软件配置,标准等) 和业务上( 新的业务领 域,过程,规则,用户) 。为了逡应这些变化,软件系统必须注重重用性和扩展 缝。 一静逶瓣静方法藏是将闯题分解成更夺鲍部分,然螽逐一舞决它餐。姿藏, 主要的编程方法就是面向对象的编程( o o p ) ,它的泰黉思想就是把系统分解为一 系列的对象并分别为这些对象编霹代码。这些对象把数据和行为抽象到了一个概 念实体当中,从而能很好的解决软件系统中的角色划分问题。面向对象的思想在 当裁软件开发穷法学和工具中都键到了具体的体现,比鳃有专门的面向对象编程 方法学【l 】,分辑及设诗工具,戳及瑟自对象缓茬语蠢【2 】等等。售羲予瓣囱霹象 的分析、设计和实现技术,开发赣可以将问题领域的“名词”转换成软件系统中 的对象,从而很自然的完成从需求到实现的映射。假是对象过于具体和特殊,还 需要在编译域系统链接时与应用捆绑在一起。这就需要掌握这些类的详细知识, 两达到这个掰的又必须褥到所有的源程序代码,所有这些都不利于软件复翔和软 终迸证。 为了解决这个问题,研究入爨提出组件的思想。组件 3 】比对象、类觉要抽 象,并且能被当作独立的服务供给者。首先将每个组件定义成一个特定的角色, 并拥有特定的职责和目标。然后褥将不同的组件装配成完整的系统。 毽是缀傍在软终遴纯上也其蠢鹾瓣毪。软搏遴纯怒蠢震求弓l 起懿,帮楚零文 所说懿关注纛。尽管一些关注点鬟褥特定载和擎猿鹣缀侔实现,但逶常会发现存 在着由任何一个组件都无法完念满足要求的关注点。遮就是影响多个组件的横切 关注点。横切关注点有许多不问的种类:基础结构必注点( 实例化、分布浅及事 务管理等非功能需求) ;还有一贱与功能性需求相关的横切关注点功能需求 第一章绪论 的实现往往插入到其他组 牛巾。 因既,健糟传统编程方式在软伟迸纯进程中就会邋到以下闻颓: 1 架构邋化:由于各个对象或组件包含满足不同关注点的实现,造成关注 点缠绕和分散。这意味着在软馋进纯孛嚣鼗理解一组誉弱的关注点,甚至需要修 改许多个组辞。而且,在添加新功能的时候,这些新添加的代码瓣秘黔只是将新 的组件与原有的组件连接在一起。这些都会破坏系统浆构的合理性。 2 不易动淼避 二:动态进化就是掺农系统运行对实施软件进化。软 牛进化 塞簧是由薪需求弓陡;酶,丽新增功戆其裔不可预溅馥。颡诧,现在大多数系统在 避行软件进化时,都是关闭系统进行的。佩是,关闭系统会给用户造成很多不便, 也会给机构带来损失。 为了弥补传统戆瑟自对象编程在建纛矮骞更努羲掰经,适应谯饔扩震毪静软 件系统方面所遇到的困难,g r e g o rk i c z a l e s 在x e r o xp a r e 的团队在2 0 世纪 9 0 年代后期首先提出了面向方面的编程思想c 4 ( 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 燕熬h o p ) 。a o p 基于这撑一令鼹熹;在嚣袋分拆霹把系统震求分勰 为一系列稆互关联的关注点,然后将这臻关注点模块化,通过a o p 环境提供的底 朦机制将这些关注点组合起朱实现一个究整的系统。关注点可能是较高层次的概 念,诸如安全饺,服务质量,也可以是眈较低层的概念,如高速缓存,缓冲器等 麓。它们氇霄楚监务逻辑,如鲎务巍剐糨特征,毽霹能是系统服务,如同步或 者事务管理。甚至软件开发周期中的每个阶段都是一个关注点。总之,一个关注 点就是一个给定问题的规范化解决方案的 豫象,它是一个相对的概念,只有在特 跫嚣运嚣孛方蠢懑义。 a o p 的提出不是偶然的,它的出现是人们对面向对苏技术认识不断深化的缩 果。随着面向对象技术应用的目益广泛,人们意识到传统的对象范型不足以实现 掰有关注熹静模块恁,不弱必注点袋玛熬稳互绸缝爱褥纂手对象熬墩雳系统缝搀 没有柔韧性,从而难以很好地适应外部需求的变化。此外,系统内的模块也由予 殿用系统的刚健结构而很难欺备更好的熏用性。 躺p 魏基零愚憋趣括横秘关注熹夔模块亿、关注杰豹分褰派受| j _ 摹拜关注点瓣动 态组合。它能愉到好处地解决软件进化中遇到的问题。信息系统 5 】是集计算机 技术、网络通信技术为一体的信息系统工程,它能够使企业运行的数据更加准确、 及对、全面、谬实,同时便予对各种信息避一步地加工,另外也有剃予进一步加 焱企监管瑾豹辩学佬、合璎纯、镧度亿、麓范亿。它楚实现企韭信感亿静重要缀 成部分,也会随着技术和业务的变化而产生变化。公司资源管理系绒就是一种舆 第一章绪论 型的信息系统。本文将从面向方面的基本思想出发,详细介绍使用a o p 实现公司 资源管理系统软件进化,验证面向方面思想在软件进化中应用的有效性。 1 2 课题内容 本课题以a o p 为基础,为面向方面的软件进化的实现提供了一个可以借鉴 的实施步骤,并从理论和实践两个方面阐释了实现机制。本课题的研究内容可以 综述为以下几点: 夺就面向方面的思想包含的三大基本原则:关注点的分离原则、横切关注 点的模块化原则、关注点的动态组合原则进行了详细的探讨,具体分析 了面向方面思想的优越性; 夺深入研究传统编程方式在软件进化中遇到的问题,结合面向方面思想, 为面向方面的软件进化的实现定制一个解决方案,并详细分析了面向方 面的软件进化的优势和可行性。 夺以动态a o p 为基础,结合映像和元对象协议设计了一个支持动态进化的 系统模型。该模型使用元对象封装变更,并且可以在系统运行时由a o p 实现这些变更。 以面向方面思想为指导,在应用系统的进化过程中进行面向方面编程的 实践。本文以一个公司资源管理系统为例,在实现系统原型的基础上, 应用该解决方案实现系统进化。使用j a v a 实现公司资源管理系统原型, 并利用a s p e c 0 5 实现了系统的软件进化,包括系统中原有的横切关注 点、功能性需求和非功能性需求。 综上所述,本文提出了一个面向方面的软件进化解决方案,并在具体应用系 统中采用该方案实现系统的软件进化,还设计了一个支持在系统运行时进化的面 向方面的系统架构模型。 1 3 本文结构 第一章,阐明本文课题的选题背景、研究意义及本人开展的工作。 第二章,对课题研究中研读的a o p 思想和建模表示相关论文的综述。本章 简单介绍了a o p 与o o p 之间的关系、a o p 思想的基本原则和面向方面的建模 - 3 - 第一章绪论 表示机制。 第三章,详细阐述了面向方面的软件进化设计。从软件进化的基本概念开始, 通过实例分析了传统编程技术的局限性,描述了软件进化中存在的问题。然后根 据面向方面思想,设计了具体的面向方面的软件进化方案。并基于映像和元对象 协议,结合a o p 提出了一个支持动态进化的系统模型。 第四章,给出了硕士期间所完成的一个使用面向方面思想实施软件进化的原 型系统。先介绍了自行开发的信息系统公司资源管理系统,然后根据面向方 面的软件进化方案实现该系统的静态软件进化。 第五章,对本文的研究工作的总结和今后工作的展望。 第二章文献综述 第二章文献综述 2 1 面向方面编程思想( a o p ) a o p 是基于这样一个观点:通过需求分析将需求分解为一系列核心模块级需 求和系统级需求,在设计层采用一般关注点和横切关注点 6 ( c r o s s c u t t i n g c o n c e r n ) 分别为核心模块级需求和系统级需求设计解决模型( s o l u t i o n m o d e l ) , 然后在实现层实现这些关注点的模块化,一般关注点实现为组件( c o m p o n e n t , 可能为对象,方法,过程或a p i ) ,横切关注点实现为方面( a s p e c t ) ,最后通过 a o p 环境提供的织入器( w e a v e r ) 将这些组件和方面组合起来以实现一个完整的 系统 4 。下面我们介绍一下关于a o p 的基本概念。 在a o p 中,我们用组件( c o m p o n e n t ) 和方面( a s p e c t ) 构建系统 7 ,每个 组件是由通常的过程( 对象,方法,过程或a p i ) 封装起来的一般关注点这 跟基于组件开发( c o m p o n e n t b a s e dd e v e l o p m e n t ) 中的组件不同( 以下部分中 的组件均与此组件同义) ,它通常是系统功能分解( f u n c t i o n a ld e c o m p o s i t i o n ) 的产物。而每个方面则是一个模块化的横切关注点,它通常是系统级别的,以某 种特定方式影响组件的性能( p e r f o r m a n c e ) 跟语义( s e m a n t i c ) ,比如内存访问 模式,并发对象的同步等。因此,我们可以这样阐述a o p 的目标:使程序员能够 实现关注点之间( 一般关注点之间,一般关注点和横切关注点,横切关注点之间) 的相互分离,并通过一套机制实现这些关注点的模块化和相互组合,构筑最终系 统。a o p 跟传统的编程技术的不同之处在于,后者只能实现一般关注点的模块化 和相互组合,横切关注点的实现被分散到多个一般关注点的实现模块当中,由此 造成了代码的纠结与混乱,不利于模块重用和软件进化。而a o p 提供了对横切关 注点进行抽象的机制,实现了对其他编程技术( 面向对象编程,结构化编程,功 能编程等) 的扩展。从某种意义上说,a o p 所建立的系统是通过松散耦合的模块 化的一般关注点( c o m p o n e n t ) 和横切关注点( a s p e c t ) 实现的,而传统的编程 技术是通过松散耦合的模块化的一般关注点( c o m p o n e n t ) 实现的。为了实现上 述目标,一个应用系统的a o p 实现必须包含以下要素: 审编程语言。它包括两个部分:一种构件( c o m p o n e n t ) 编程语言,它可 以是任一种传统的编程语言( 如j a v a ,s m a l l t a l k ,c + + ) ,定义语言规 范和语言实现以实现组件编程;一种或多种方面( a s p e c t ) 编程语言, 第二睾文教综述 为了实现横切关注点的分离,它必须解决两个问题: a 提供一种机制以清晰地实现横切荚涟点; b 提供必要的语蠢构造以描述方面的行为并定义这种杼为何时发 叟。 方面编程语言应遵循一些指导原则;京的语法构成( s y n t a x ) 应当 跟缀件编程语言有着紧密的联系;能够对方面进行简明而紧凑的描述; 它陂当包含一些有利予织入器实现组件编程语言和方面编程诺言相互组 合的语法元素。 夺一令震缓箨缓摇语富实瑗一般关注熹熬缀终程旁; 夺一个用一个或多个方掰编程语言实现横切关注点的方面程序; 夺一个实现组件程序与方面程序相互编织的方面织入器( a s p e c tw e a v e r ) 。 a o p 可以用多种方式实现织入,它可以先预处理每个a s p e c t 的代码,将这 些处理过盼代码织入到c o m p o n e n t 代码以产生织入避的源码,最后将织入过的源 疆交绘缡潺器产生可获行霞强。毽可戳在运行薅动态逢实现a s p e c t 俄戮豹绞入 8 】。 综上所述,a o p 思想包括三个清晰的步骤: 方灏分解:分解需求提取出横切关注点和一般关注点。在这一步熙,核心 攘块级关注点翻系统级懿横切关注点要分离嚣柬。 关注点实现:隧着软棒缡程技术的发震,关波患的实现方式落穗不断遣交 化:在结构化编程中,关注点可能被实现为过程,谯面向对象编程中,分离出来 的关注点可能被实例化为对魏域类,而在面向方面的编程中,关注点就被扩展为 一些非功能性的特征,比如同步,内存管理,一致性等,它们被实现为方面 ( a s p e c t ) 。 方藤的灌新缝合:在遮一步壁,方面集成嚣邋遥创建一个模块攀觉方 面来指定煎组的规则。重组过程也口q 织入或结含则使用这些信息来构建 最终系统。 2 。1 1a o p 是o o p 的延续 a o p 僚为一种设计恩怒,弗举是对o o p 於否定,褥是一种静充4 】。它实际 上是g o f 设计模式的延续。设计模式孜孜不倦追求的就是调用者和被调用者之间 的解耦,a o p 也可以说是这种目标的一种实现。o o p 主要是在类当中发现它们的 共同之处,然后把它们压到继承树当中,a o p 却以实现关键点的分离为第一要务, 第二章文献综述 并且把它们水平的注入到对象结构当中。任何一个结构化的系统都会有一些关键 点局部于某一个特定的结构单元当中,但也会有一些关键点也就是本文所研究的 横切关注点横跨了多个模块。a o p 就是致力于这些横切关注点的实现。 w e a v e dp r o g r a m 图2 ia o p 与o o p 的区别 分离系统中的多个关注点使我们的系统能更容易的进化,更易于理解,具有 更好的适应性和易用性。a o p 的几个要素如连接点、切点、通知和方面使这些优 点成为可能:通过横切关注点的模块化,a o p 将传统程序设计中散布在各处的代 码集中到一个模块化的结构( a s p e c t ) 当中,使得a s p e c t 代码跟目标代码更易 于理解。隐式调用 9 是这个软件复杂度日益增长的世界的一大优点,因为某个 领域的专家不可能熟悉一些专有算法( 诸如分布,认证,访问控制,同步,加密, 冗余) 的复杂性,因此也就避免了他们在调用这些算法时可能出现的错误。而这 对于程序的进化也是至关重要的,因为程序员不能预料他们的程序在未来会遇到 什么样的需求变化。在重用性方面,a s p e c t 自己也可以被重用,并且可以充当 其它组件的连接器。 但是作为一项编程技术,a o p 必须解决两大问题:一是关键点在程序当中的 表达方式( 语言规范) ,二是要有一种直观而且有效的机制来实现这些关注点 9 ( 语言实现) 。 通过上述说明可得出模块化横切关注点的必要性。研究人员已经尝试了多种 方法来实现这个任务,这些方法有一个共同的主题:分离关注点。a o p 是这些方 法中的一种,它的目的是清晰地分离关注点来解决以上提到的问题。 从其本质上讲,a o p 使开发人员可以用一种松散耦合的方式来实现独立的关 注点,随后组合这些实现来建立最终系统。用它所建立的系统是使用松散耦合的, 模块化实现的横切关注点来搭建的。相比之下,用o o p 建立的系统则是用松散耦 第二章文献综述 合的模块化实现的一般关注点来实现的。在a o p 中,这些模块化单元叫方面 ( a s p e c t ) ,而在o o p 中,这些一般关注点的实现单元叫做类。 a o p 与o o p 的不同关键在于它处理横切关注点的方式,在a o p 中,每个关注 点的实现都不知道其它关注点是否会关注它。一个a o p 实现可以借助其它编 程范型作为它的基础,从而原封不动的保留其基础范型的优点。例如,a o p 可以 选择o o p 作为它的基础范型,从而把o o p 善于处理一般关注点的好处直接带过来。 用这样一种实现,独立的一般关注点可以使用o o p 技术,横切关注点使用自己提 供的新机制实现。这就像过程型语言是许多o o p 语言的基础一样 2 。如上图2 - 1 。 a o p 引入一些新概念 4 。连接点( j o i np o i n t ) 指程序执行流程的一个点 ( 比如一个方法被调用的地方,或者一个异常被抛出的地方) 。切点( p o i n t c u t ) 则是指一些满足某些特定条件的j o i np o i n t 的集合。通知( a d v i c e ) 是指将要 在所有满足条件的j o i np o i n t s 所在位置上执行的代码。引入( i n t r o d u c t i o n ) 则让我们可以添加一些额外的代码到已存在的类中,比如:添加方法、属性或者 接口到一个已存在的类。最后,a o p 引入了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 、a d v i c e 、i n t r o d u c t i o n ( 也 称作i n t e r t y p ed e c l a r a t i o n ,类型内声明) 。 2 1 2 横切关注点 关注点和需求 1 0 并不相同。系统开发包括详细说明需求,对其进行精炼形 成设计,然后进行编码实现。因此,需求只是软件开发生命周期中的一个部分。 而关注点则是表示比较重要的一些事情,它包括与其相关的所有事情:需要详细 说明关注点,设计并实现它们。因此,需求只是用来详细说明关注点的。 通常,对于每个关注点,都需要大量需求描述语句来阐明其涉及的东西。例 如,资源预订功能就是一个关注点。由于在系统中,预订将涉及多种不同类型的 资源,不同的预订模式等,因此需要大量需求描述语句来说明。 除了详细说明关注点外,还必须设计和实现它们。当我们谈到分离关注点时, 就意味着不仅要在需求时保持分离,还要在设计和实现的过程中保持分离。 关注点可以分为两类:一般关注点和横切关注点。一般关注点与横切关注点 的区别在于一般关注点是同特定问题域相关的,描述应用系统的本质。一般关注 点用传统方式描述系统的核心功能,它不依赖于应用系统的其他方面,常见的一 般关注点有分布式、持久化、容错等。而横切关注点用来管理或者优化应用系统 中的一般关注点。从某种意义上说,横切关注点为一般关注点提供支持,扮演辅 第二章文献综述 助的角色。横切关注点对于整个应用系统的性能也是必不可少的。横切关注点经 常是一个影响多个类或模块的关注点,一个无法很好本地化和模块化的关注点。 系统中的横切结构是横切关注点存在的基础。横切结构与层次结构不同。横 切意味着要将系统以不同方式切开,而不只是转移细节、获得更抽象的视图。a o p 的目标就是以模块化( 而不是分散的) 方式实现横切关注点。 1 1 2 1 3 关注点分离原则 关注点的分离原则是软件工程中的一个基本原则,它是指鉴别、封装、处理 软件当中跟特定概念或目标相关的部分的能力 1 2 。这条原则已经得到广泛公 认。但是对于关注点的概念到现在为止还没有一个明确的概念。在过程化方法 ( p r o c e d u r a lm e t h o d ) 中,关注点被表达为过程( p r o c e d u r e ) ,在面向对象的 编程中,分离的关注点被模块化为对象或类,它们通常源于需求描述和用例分析 中的某些“名词”。因此,传统意义上的关注点可以理解为对系统进行功能分解 得到的对象或功能单元。然而,随着软件规模和复杂度的增加,传统意义上的关 注点已不足以对问题域进行清晰地描述,于是关注点的概念被扩展到了一些非功 能性的特性( p r o p e r t i e s ) ,比如安全性、同步、存储管理和一致性。尽管这是 一种很自然的扩展,但它使从业人员对关注点有了更深刻的理解。因为大部分软 件系统都会涉及许多不同种类的关注点,如何恰当地分离这些关注点也就变的分 外重要。因为关注点随着时间的推移而不断变化,并且在软件生命周期的不同阶 段,不同的开发活动,不同的角色都会涉及到不同的关注点,因此任何关注点的 分离标准都只适用于某些特定环境。 关注点的分离是在设计过程和实现过程完成的,软件的设计与实现之间是一 种相互支持的关系。在设计过程中开发人员把系统分解为一系列关注点,并且为 每个关注点定义了一个解决模型( s o l u t i o nm o d e l ) 。在实现过程中程序员通过 编程语言提供的一套机制( 语言规范和语言实现) 对关注点进行抽象,定义它们 的实现模型( i m p l e m e n tm o d e l ) ,然后将这些实现模型组合起来以构筑最终系统。 但是,在传统的编程技术下,某些在设计层中定义的关注点无法由实现层中的单 个实现模型来实现,而只能分散到实现层的多个实现模型中,因此称这些关注点 为横切关注点( c r o s s c u t t i n gc o n c e r n ) 。如下图2 2 所示,设计层定义了c 1 , c 2 ,c 3 ,c 4 四个关注点的解决模型,而在实现层中关注点c a 的实现模型分散 到了c 1 ,c 2 ,c 3 三个关注点的实现模型当中,所以c 4 是一个横切关注点。 在早期的过程化编程中,系统被实现为一个大的程序,设计层抽象出来的每 个关注点被实现为程序中的一个过程,这样在系统范围内就会产生代码纠结现 第二章文献综述 象;在面向对象程序设计中,系统是由一系列对象相互协作构成的,一般关注点 被实现为对象,横切关注点的实现被分散到了各个对象中,这样代码纠结就被局 限在对象的内部。在面向方面编程中,一般关注点被实现为构件( 如对象) ,横 切关注点则被实现为方面( a s p e c t ) ,一般关注点和横切关注点的重组是透明的, 这时不会产生代码纠结现象。采用不同的设计思想所产生的效果是不同的,各类 关注点在过程化编程中是在系统范围内代码纠结,在面向对象编程中则是在对象 图2 - 2 设计关注点和实现关注点的分离 内部代码纠结,而在面向方面编程就不存在代码纠结。 在设计层和实现层实现关注点的分离,有如下优点: 通过关注点的分离可以得到系统更高层次的抽象。关注点被有效地分离 开后,可以将其逐个编程实现。 夺关注点的分离使得程序更容易理解,因为一个关注点的代码不会同其他 关注点的代码纠结在一起。 夺关注点分离降低了关注点之间的耦合度,满足了日益增长的对单个关注 点柔韧性、适应性和可复用性的需要。 关注点的分离原则是控制软件复杂度的一个基本原则,在不同的软件编程方 法学中,关注点分离方式也是不同的。在过程化编程中,编程人员用过程来定义 关注点的实现模型,在o o p 中,又采用类和对象来定义关注点的实现模型。在 a o p 中,开发人员希望以传统编程技术为基础,采用方面( a s p e c t ) 来定义横切 关注点的实现模型。通过方面,可以将传统方式下分散到多个模块的横切关注点 封装到一个模块当中,从而实现横切关注点的局部化 4 。 面向方面编程技术( a o p ) 的出现,是为了弥补传统编程技术的不足,使软 第二章文献综述 件系统舆备更好的重用性,邋应性,扩展性和易维护性。它的基本流程是这样的: 通过需求分析将问题域分解为多个关;雯点,在设计层定义关注点的解决模型,在 实瑰篡实瑗关注纛豹模块稼,一簸关注焘模块缘为部律( c o m p o n e n t ,霹戆兔慰 象,方法,过程或a p i ) ,横切关注点模块化为方面( a s p e c t ) ,最聪根据织入规 则通过a o p 环境提供的织入器( w e a v e r ) 将这些模块化的关注点组会起来以实现 一个完熬的系统。a o p 致力解决的闯鼷就是封装横切关注淼,并在系统中实璐横 切关注点的自动“横切”。 2 2 建横表示 2 2 。1u m l ( 统一建摸语京) u m l 1 3 是一种o m g ( o b j e c tm a n a g o n e n tg r o u p ) 标准,该标准提供了一种 冒铙纯憨建摸表示法,这对设诗帮了瓣复杂煞系统矮有效。 u m l 具有下列几种通用优点:它怒众所周知的面向对藩( o b j e c t - o r i e n t e d , 0 0 ) 建摸表示法,舆骞菲常容易理鳃豹墅形表示法数及一套拳塞豹谣义集来撼获 0 0 系统的关键特征。u m l 广泛地应用于面向对象的软件开发,还常用于定制的、 基于组件的软件开发、业务流程建模和系统设计。这使大部分u m l 经验能被应用 弱成熟耱w e b 羧务袋零孛。 u m l 提供了几种扩展机制,允许建模者在不用改变基本建模语寄的情况下做 一些逶矮豹扩震。这些扩震撬铡已经被设诗努,羰傻子在琴震理解全部语义豹倩 况下就可以存储和使用。由予这个原因,扩展可以作为字符串存储和使用。对不 支持扩展机制的工具来说,扩展只是一个字符串,它可以作为模型的一部分被学 久、存储,还可敬被传递鄹獒谴工兵。我髓赣蘩菇端工箕浚诗成畿够经理各季申扩 展,这臻工具会为它们需要理解的扩展定义特定的语法和语义。 这秘扩震熬方法缀霹能誉麓瀵是凌蜣豹多秽要求,毽爨宅敬一静易于实璐豹 简单方式容纳建模者对u m l 裁制的大部分要求。 l m l 包含三耪主要的扩鹱组终:约束、构造霆 纛蠡记值。约束爨用某种形式 化语言或自然语畜袭达的语义关系的文字说明。构造型是由建模者设计的新的模 型元素,但是这个模型元素的设计要建立在u m l 已定义的模型元素基础上。标 记僮是辫麴至l 任舞攘垄元素主懿余名瓣信患凌。【t 4 第二章文献综述 2 2 2 面向方面设计模型 a s p e c t j 1 5 是用于实现面向方面编程( a o p ) 的j a v a 语言扩展。a s p e c t j 提 供了一些新的语言构造块( c o n s t r u c t ) 来实现贯穿( c r o s s c u t t i n g ) 代码。但是, 当前还没有设计符号适合用来表示这些构造块。这些设计符号的需要是很明显 的,首先,图形化的符号帮助开发人员设计和理解a s p e c t j 的程序。接着就是设 计符号可以帮助开发人员评定方面对基本类的贯穿效果。设计符号的使用把面向 方面带到了设计层次,并推动已有设计模块的重用。 由于u m l 的通用性优点,研究人员提出一种通过u m l 的扩展机制的方法,把 a s p e c t j 中说明的面向方面设计的一些概念用u m l 表示出来。这种方法提出了叫做 面向方面设计模型( a s p e c t - o r i e n t e dd e s i g nm o d e l ,a o d m ) 1 6 ,1 7 。 连接点 连接点不是a s p e c t j 中明显的语言构造。它们表示的是程序动态执行时的抽 象点。但是有必要在u m l 中找到其形式化的表示法。链( 1 i n k ) 可以用来表示连接 点( j o i n p o i m ) 。 切点 在a o d m 中,切点( p o i n t c u t ) 被表示为一种叫做( p o i n t c u t ) ) 的操作构造型。 跟标准u m l 操作一样,p o i n t c u t 是特定类元的特征( 例如,一个方面) 。并且它们 的声明都由一个特征标记和一个实现组成。 通知 和p o i n t c u t 类似,一个通知( a d v i c e ) 用一个特殊的操作构造型 a d v i c e ) ) 表 示。跟标准u m l 操作一样,a d v i c e 是特定类元的特征( 例如,一个方面) 。a d v i c e 可以有一些参数,并且它们的声明都由一个特征标记和一个实现组成。与 p o i n t c u t 相比,a d v i c e 在语义上跟操作也是类似的,因为a d v i c e 定义了一些影响 行为动态特征。 引入 在a s p e c o 中,引入( i n t r o d u c t i o n ) 是被用来向基本类结构中插入成员( 如 构造函数、方法和域) 和关系( 如泛化和实现关系) 。在u m l 中,模板是可以 做相同工作的合适方法。例如,模板可以向一个已有的设计模型中加入新的模型 元素( 如成员和关系) ,模板是参数化的模型元素。通过把实际参数绑定到它的 模板参数中,模板可以用来产生其它的模型元素。但是,模板不能被直接应用到 设计模型中。 第二章文献综述 既然a s l x 妞j 中的i n t r o d u t i o n 可以插入成员和关系,u m l 中用来表示 i n t r o d u t i o n 的参数化模型就一定要能描述成员和关系。考虑到这些,参数化的协 作最能符合要求。在u m l 中,协作是用来指定一组实例( 包括它们的成员和关 系) 和一组描述这些实例之间通信的交互。因此,协作模板适合用来表示 i n t r o d u c t i o n 的结构和行为特征。a o d m 定义了一个协作模板的构造型,叫做 g i n t r o d u c t i o n ) ) ,来捕获i n t r o d u c t i o n 的语义。 方面 在a o d m 中,方面( a s p e c t ) 用一个叫做( a s p e c t ) ) 的类的特殊构造型表示。 和类一样,a s p e c t 是一些特征( 如属性、操作、p o i n t c u t 、a d v i c e 和i n t r o d u c t i o n ) 的容器和命名空间。并且,a s p e c t 也要参与到关联和泛化关系中。 a o d m 主要是针对a s p e c t j 的早期版本进行的建模设计,随着a s p e , c t j 的版 本升级,该模型在一定程度上不能满足a s p e 娥j 的变化。而且a o d m 只是针对 a s p e c t j 设计的建模模型,无法满足其它面向方面建模。 第三章面向方面的软件进化设计 3 1 软件进化 3 1 1 基本概念 第三章面向方面的软件进化设计 软件进化是近些年来出现的比较新的概念。大多数技术人员甚至把软件进化 等同与维护和升级。其实软件进化包含后两者,用软件进化这个概念不仅能体现 出软件的动态特性,还表达出软件不断完善的意义。 自有软件开发以来,就有软件开发过程和软件维护之分 3 】。软件开发是一 个有创造性的活动,从一个初始的概念发展成一个可实际工作系统的整个过程充 满了智慧和灵感。软件维护则是当系统投入使用以后对它的变更过程。虽然“维 护”的成本经常是最初开发成本的数倍,但是维护过程通常不被认为有什么挑战 性。因此,在历史上,它却没有得到与其它阶段一样的重视;多数组织中,软件 开发的地位比软件维护高得多。 1 8 】 现在,这种划分越来越不恰当了。现在完全从头开发的系统很少,各个组织 正在通过让软件尽可能久地运行,以减少软件开发的投资,而且,开放源码范例 进一步加强了对于维护由其他人员或者组织开发的软件的关注。将软件系统的开 发和维护看成是一个连续过程显得更有意义。因此,不再将软件工程看成是开发 和维护两个完全独立的过程,而是将起看成是一个进化过

温馨提示

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

评论

0/150

提交评论