(计算机软件与理论专业论文)基于uml的面向方面建模研究与实现.pdf_第1页
(计算机软件与理论专业论文)基于uml的面向方面建模研究与实现.pdf_第2页
(计算机软件与理论专业论文)基于uml的面向方面建模研究与实现.pdf_第3页
(计算机软件与理论专业论文)基于uml的面向方面建模研究与实现.pdf_第4页
(计算机软件与理论专业论文)基于uml的面向方面建模研究与实现.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

(计算机软件与理论专业论文)基于uml的面向方面建模研究与实现.pdf.pdf 免费下载

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

文档简介

摘要 面向对象软件开发从一定程度上提高了开发者的效率和控制复杂系统的能 力,然而由于动态变化的需求,软件本身的性能要求等因素,导致面向对象程序 设计不能很好的解决横切关注点的有效分离,造成代码的分散、混乱和难以维护。 面向方面程序设计使用a s p e c t 的概念解决了横切关注点的有效分离和局部化,并 从程序设计语言的层次上提供系统的方法识别、模块化横切关注点。 虽然据以r a t i o n a l 统一过程( m j p ) 之父i v a rj a c o b s o n 为代表的科学家推 测,a o p 将成为编程方法学的下一个里程碑,目前a o p 还没有得到广泛的应用。 并不是因为缺少相应的语言和框架的支持,而是因为缺少一个统一理解面向方面 概念的设计平台,这个平台包括统一的设计标准和建模工具的支持。在软件开发 的早期阶段运用a o 的思想进行系统分析和设计,可以更好的降低面向方面软件 开发的风险和成本,充分发挥a o p 的优点,提高软件产品的质量。面向方面建 模是在设计阶段通过可视化的模型对现实简化达到理解复杂系统的目的,从而控 制软件开发的复杂度和风险,并从一个更高的抽象层次探索a o p 的本质,提供 一种设计、表达方面和其与其他部件横穿关系的普遍适用的方法。 本文研究和分析了a o p 的核心思想和a o s d 的基本概念,研究和分析了一 种成熟的面向方面程序设计语言- - a s p e c t j ,最后在分析统一建模语言及其扩展 机制的基础上,提出一种基于u m l 的,以a s p e c t j 语言为原型的面向方面建模 语言a u m l ( a s p e c t u a lu n i f i e dm o d e l i n gl a n g u a g e ,a u m l ) 。a u m l 直接支持 a o p 概念和设计,文档化后的建模设计可以为以后的程序设计和维护提供最直 接的依据,a u m l 通过扩展方面( a s p e c t ) ”、“通知( a d v i c e ) ”、“切入点( p o i n t c u t ) ”、 “导言( i n t r o d u c t i o n ) ”、“核心组件( c o r e ) ”等新的元素表达a o m 设计,并支 持各元素间关系的表达。本文最后依据a u m l 开发一种e c l i p s e 环境下的插件工 具,提供一个可视化的面向方面建模平台,意图解决面向方面软件开发的瓶颈。 关键词:横切关注点面向方面程序设计面向方面建模a u m lg m f a b s t r a c t o b j 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 ( o o s d ) i m p r o v e st h ed e v e l o p e r s c a p a b i l i t yo fc o n t r o l l i n gc o m p l e xs y s t e ma n dt h ee f f i c i e n c yo fd e v e l o p m e n tt os o m e e x t e n t ,0 0 s dc a l l tr e s o l v et h e “e f f i c i e n ts e p a r a t i o no fc r o s s c u t t i n gc o n c e r n s ” p r o b l e m w e l lb e c a u s eo ft h et r a n s f o r m a t i o no fc u s t o m e r sr e q u i r e m e n t sw i t ht i m ea n d t h ep e r f o r m a n c ec o n c e r n ss u c ha ss e c u r i t ya n dr o b u s tw h i c hl o t so fs o f t w a r ew i l l n e e d s t h ed o m i n a n td e c o m p o s i t i o n ss i n g l e n e s so f0 0 s dc a u s e ss o m eb e h a v i o r s c a n tb ee n c a p s u l a t e di no n em o d e la n dc r o s s c u t t i n gt h ew h o l es y s t e m a tt h es a m e t i m et h ec r o s s c u t t i n gc o n c e m sc a u s et h ec o d et ob es c a t t e d ,t a n g l e da n dh a r dt o m a i n t e n a n c e 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 ) a m e l i o r a t et h ep r o b l e mw e l lb yo f f e r i n g t h ec o n c e p to fa s p e c tw h i c hs u p p o r t sl o c a l i z i n gt h es e p a r a t e e x p r e s s i o n o f “c r o s s c u t t i n gc o n c e m s ”a o pp r o v i d es y s t e m a t i cm e a n sf o rt h ei d e n t i f i c a t i o n , m o d u l a r i z a t i o n ,a n dr e p r e s e n t a t i o no f c r o s s c u t t i n gc o n c e r n s m a n ys c i e n t i s t s s u c ha si v a rj a c o b s o n ,t h ef o u n d e ro ft h er a t i o n a lu n i f i e d p r o c e s s ( g u p ) ,i n s i s tt h a ta s p e c t - o r i e n t e ds o f t w a r ed e v e l o p m e n tw i l lb et h en e x t m i l e s t o n ei nt h eh i s t o r yo fs o f t w a r ed e v e l o p m e n t ,b u ta o pi sn o tb r o a d l yu s e d p r e s e n t l y , n o tb e c a u s eo f t h ea b s e n c eo f e x c e l l e n c el a n g u a g ea n df r a m e w o r ko f a o p , b u tb e c a u s eo ft h el a c ko fs t a n d a r do fa s p e c t o r i e n t e dm o d e l i n g ( a o m ) d e s i g n , i n c l u d i n gt h eu n i f i e du n d e r s t a n d i n ga b o u ta o ma n dt h es u p p o r tf r o mc o r r e s p o n d i n g t o o l s e m p l o y i n ga na s p e c t - o r i e n t e da p p r o a c hf r o mt h ev e r ye a r l yd e v e l o p m e n ts t a g e s c a l lh e l pc a p t u r ec r o s s c u t t i n gp r o p e r t i e se a r l yo ni nt h es o f t w a r el i f ec y c l e ;h e n c e , i m p r o v i n gt h eq u a l i t yo ft h ep r o d u c t sa n dr e d u c i n ga l ls o r t so fc o s t s t h eg o a lo ft h e r e s e a r c hi na o mi st os i m p l i f yt h et r u er e a l i t yb yu s i n gv i s u a lm o d e la td e s i g np h a s e , a n dt h e nc o n t r o lt h eb i gc o m p l e xs y s t e mo rc o s t s ;f i n dt h eg e n e r a le s s e n c eo fa o s d a tm o r ea b s t r a c t l e v e l ;p r o v i d ea s p e c t - o r i e n t e ds o f t w a r ed e v e l o p e r sw i t hg e n e r a l m e a n st oe x p r e s s a s p e c t sa n dt h e i rc r o s s c u t t i n gr e l a t i o n s h i p so n t oo t h e rs o f t w a r e a n i f a c t s i i t h i sp a p e rr e s e a r c ha n da n a l y z et h ek e yt h e o r yo fa o pa n dt h ee s s e n t i a lc o n c e p t a b o u ta o s d ,t h e nr e s e a r c ha n da n a l y z ea na s p e c t o r i e n t e dp r o g r a m m i n gl a n g u a g e c a l l e da s p e c t jw h i c he x t e n d sf r o mj a v a a f t e rt h a tt h i sp a p e rp r o p o s ean e w u m l b a s e da o ml a n g u a g ec a l l e da s p e c t u a lu n i f i e dm o d e l i n gl a n g u a g e ( a u m l ) e x t e n d i n gu m l sm e t a m o d e b a s e do na s p e c t j ss e m a n t i c sa n ds y n t a xt h r o u g h u m l se x t e n s i o nm e c h a n i s m sa n dr e p r e s e n t i n gi m p o r t a n tc o n c e p to fa s p e c t o r i e n t e d p r o g r a m m i n gv i s u a l l y a u m ls u p p o r t st h ea o pc o n c e p ta n da o md e s i g nd i r e c t l y a n dt h e np r o v i d eas t r a i 曲tr e f e r e n c et ot h ef o l l o w i n gd e v e l o p m e n ts u c ha st e s t i n ga n d m a i n t e n a n c eb yd o c u m e n t i n gt h em o d e l i n gd e s i g n ,a ts a m et i m ea u m lc r e a t en e w s t e r e o t y p e si n c l u d i n g , , , , s u p p o r t i n gt h ee x p r e s s i o no fa o md e s i g na n dt h e i rr e l a i i o n s h i p s h lo r d e r t op r o v i d ea ni n t e r c o m m u n i c a t i n gv i s u a lp l a t f o r mf o rd e s i g n e rt or e d u c et h ed i f f i c u l t y o fa o pa n dr e s o l v et h eb o t t l e n e c ko fa o s d ,t h ep a p e rp r o v i d e san e wa o mt o o l w h i c ht ob et h ef o r mo f e c l i p s ep l u g i n k e yw o r d s : c r o s s c u t t i n gc o n c e r n 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 , a s p e c t - o r i e n t e dm o d e l i n g , a u m l ,g m f 西北大学学位论文知识产权声明书 本人完全了解学校有关保护知识产权的规定,即:研究生在校攻读学位期 间论文工作的知识产权单位属于西北大学。学校有权保留并向国家有关部门或机 构送交论文的复印件和电子版。本人允许论文被查阅和借阅。学校可以将本学位 论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等 复制手段保存和汇编本学位论文。同时,本人保证,毕业后结合学位论文研究课 题再撰写的文章一律注明作者单位为西北大学。 保密论文待解密后适用本声明。 , 学位论文作者签名:墨! 堕 指导教师签名:鲎垄鱼! 伽彭年,月6 日 加舜月彤日 西北大学学位论文独创性声明 本人声明:所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,本论文不包含其 他人已经发表或撰写过的研究成果,也不包含为获得西北大学或其它教育机构的 学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已 在论文中作了明确的说明并表示谢意。 学位论文作者签名:蓑、卅 冲洱6 只i 6 b 第一章引言 计算机软件是与计算机系统操作有关的程序、规程、规则及任何与之有关的文档 及数据,通过将现实世界中的一部分元素或者信息流构建为可计算的模块解决问题。 软件设计包括设计,编制和调试程序的方法与过程,软件设计方法涉及用于指导程序 设计工作的原理和原则,以及基于这些原理和原则的设计方法和技术。软件设计方法 呈螺旋上升的发展趋势,每一次软件设计方法的改进都提高了开发者解决问题的能 力,但同时又在新的抽象层次上出现新的问题,包括现在得到普遍认可的面向对象开 发方法,也毫无例外的暴露出新的弊端。 1 1 研究背景 编程方法由直接操作底层硬件的机器指令向具有较高抽象级别的面向对象编程 转变的过程,先后经历了结构化程序设计,抽象数据类型,面向对象编程等程序设计 方法,这是一个实现起来越来越自然,也是一个抽象化程度越来越高的过程,即由自 然世界向软件系统的映射更加自然的过程。早期的程序设计使用汇编语言,开发者不 但要关注问题本身,还要花费大量的精力考虑底层的细节实现,费时费力,可复用性 低,结构化程序设计和面向对象程序设计则使开发者集中精力关注问题本身的描述, 忽略底层的硬件细节,提高了软件开发的效率,降低了软件开发的难度。每次程序设 计语言和软件开发方法的进步都提供了增加的模块分解的方法,支持软件设计的模块 化,提高可复用性,比如提供子程序的结构化方法,提供以数据和行为为单元的数据 抽象类型和提供信息封装和通信的面向对象方法。 目前广泛使用的面向对象软件开发( o b j e c t - o r i e n t e ds o f t w a r ed e v e l o p m e n t , o o s d ) 起源于面向对象程序设计( o b j e c t o r i e n t e dp r o g r a m m i n g ,o o p ) ,o o p 在过 去二十年里发挥了重要的作用,到二十世纪末已经发展成为一套完整的方法学和系统 化的技术体系。o o p 集中于选择“对象”作为系统模块化的单元,同时提供方法, 消息机制,继承机制和多态等一系列概念,支持软件设计的三条重要原则一抽象、信 息封装、模块化,使得开发人员控制大型复杂的系统变为可能。 然而面向对象软件开发正达到它的极限,现实软件系统的开发并不局限于某一个 具体的关注点,而是需要同步处理多个方面,例如安全性,可靠性等非功能的横切关 注点( c r o s s c u t t i n gc o n c e r n s ) ,横切关注点指不能自然地适应单个程序模块或者几个 紧密相关的程序模块的行为。传统的o o p 总是专注于以线形序列的指令构建错综复 杂的系统功能,要求开发人员在整个开发过程中需要时刻处理并显式的组合这些分散 的非功能需求,从而导致这些行为弥散在整个系统内部,使代码分散、混乱,难以维 护。作为对o 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 o p ) 1 1 应运而生。a o p 解决了横切关注点的有效分离,通过将横切关注点局部化、模块化, 达到对分散行为的控制和追踪。同时围绕着a o p 逐渐发展为面向方面软件开发 ( a s p e c t o r i e n t e ds o f l w a r ed e v e l o p m e n t ,a o s d ) 。 据以i v a rj a c o b s o n 为代表的科学家推测,a o p 将成为编程方法学的下一个里程 碑【2 1 ,目前虽然已有大量的实用语言和编译系统支持面向方面软件开发,面向方面软 件开发仍没有得到大范围的应用,一个原因是a o s d 仍处于技术启动阶段,新事物 的接受都需要一个过程,另外的原因就是缺少一个标准的面向方面建模( a s p e c t o r i e n t e dm o d e l i n g ,a o m ) 语言和实施面向方面建模概念的建模工具。这涵盖了建模 方法,可视化建模语言的设计等不同的方面。a o m 作为a o s d 的一个重要环节,是 沟通需求分析和程序设计的一个不可或缺的步骤,意义重大,但是a o m 目前仍没有 广泛接受的标准,本文提出一种新的基于统一建模语言( t h eu n i f i e dm o d e l i n g l a n g u a g e ,u m l ) ”f 3 1 的面向方面建模方法a u m l ,同时开发相应的建模支持工具。 1 2 研究现状 a o m 的研究目前有两种趋势:一种是基于软件体系结构( s o f t w a r e a r c h i t e c t u r e , s a ) 角度的研究,一种是基于u m l 角度的研究。 基于s a 角度的研究主要使用软件体系结构描述语言( a r c h i t e c t u r a ld e s c r i p t i o n l a n g u a g e s ,a d l s ) 【4 表达面向方面的概念,通过添加“方面”和“连接点”等新的 a d l s 组件元素支持面向方面的建模,“方面”和“连接点”间的编织行为可以通过 组件间的连接器实现,最终完成整个系统的建模设计。基于s a 的研究相对来说启动 较晚,发展不成熟。 选择u m l 作为a o m 的建模语言主要是因为u m l 是一种可扩展的通用建模语 言,由于在设计u m l 时并没有考虑到面向方面软件开发方法的出现,因此利用标准 的u m l 不能完全表达a o p 的概念。当前对于利用u m l 进行面向方面设计的方法主 2 要分成三类: 第一种是利用现有u m l 的高级属性表达面向方面的概念,例如使用状态图的事 件广播机制隐含的表达a o p 中的w e a v i n g 概念【5 1 。这种方式虽然可以利用现有的工 具但表达复杂,从长远来看有一定的局限性。 第二种也是基于u m l 的扩展机制,但却使用其它的设计理念间接的表达面向方 面的概念,如面向主题( s u b j e c t o r i e n t e d ) t h e m e 6 】的方法,由于间接性使得表达的 方式与面向方面表现的本质之间需要一个映射过程,这个过程增加了开发者理解系统 的负担。 最后一种是利用u m l 的扩展机制直接支持面向方面概念的可视化建模,g f i n t e r k n i e s e l 等人提出一种基于元模型( m e t a m o d e l ) 的建模思路口】,但显式的将横切模块 横跨于被横切的模块表达编织相关性有一定的局限性,因为如果横穿的行为涉及多达 几十种正交模块时,这种方式的表达将十分有限甚至不可能。t r a n s a t 【8 】框架借鉴 a o s d 的基本原则发展了一种管理软件体系结构规格演化的框架,该框架使用 p o i n t c u tm a s k 的概念支持关注点的编织,t r a n s a t 将软件开发过程看成是一个不断 演化,以体系结构不断修改为导向的过程,遗憾的是t r a n s a t 并不支持“方面”,“通 知”,“静态横切”和“动态横切”等面向方面的核心概念。 从总体上讲,基于u m l 扩展机制进行面向方面建模设计的方法表达赢观明了, 紧扣面向方面的核心概念,从长远的立场来看更具有生命力,但是需要新工具的支持。 虽然基于u m l 的建模方法发展较快,世界各地的学者进行了大量的研究,目前仍没 有一个普遍认可的标准,因为有太多的语言从不同的角度使用不同的方法支持a o p , 使得如何对面向方面建模成为a o s d 发展的瓶颈问题。 1 3 研究内容 本文在研究和分析了a o p 的核心思想,a o s d 基本概念和发展现状,以及一种 面向方面程序设计语言a s p e c t j 的基础上,提出一种基于u m l 的扩展机制进行面向 方面建模语言研究的新方法a u m l ,主要的创新点和贡献包括: 1 a u m l 以面向方面程序设计语言a s p e c t l 为原型,基于u m l 的扩展机制 展开a o m 语言的设计。a u m l 提供一个简洁直观的表达方式支持大型 面向方面软件系统的建模。 2 a u m l 提供一种普遍适用的建模方法直接支持面向方面核心概念,支持 横切关注点的模块化表达和方面与核心组件间编织行为的描述。a u m l 设计 , , , , 五种建模元素并分析了各元素间的关系。 3 a u m l 不仅支持对面向方面软件系统静态结构的表示,还支持面向方面 软件系统动态行为的设计。“方面”和“通知”的执行顺序对系统的行 为和性能影响巨大,a u m l 支持a s p e c t 之间控制关系和通知行为执行顺 序的表达。 4 提供一个具有丰富功能的面向方面建模支撑环境。该工具以e c l i p s e 插件 的形式出现,支持a u m l 对面向方面建模的设计。 a u m l 可以按照现实情况对面向方面软件系统的开发进行可视化的抽象建模, 较完备的支持了面向方面核心概念;允许对面向方面软件系统的静态结构和动态行为 进行详细的设计和建模,并使得最终的设计决策文档化,为以后软件开发的编码工作 和日后系统的维护提供最直接的依据。 1 4 论文结构 本文后继章节为本论文的主体,具体安排如下:第二章研究和分析面向方面程序 设计的核心思想,分析了a o p 与o o p 结构的差异,分析了a o p 有效分离横切关注 点的途径。第三章分析了面向方面软件开发涉及的基本概念和发展现状,分析了面向 方面建模的必要性和重要性。第四章介绍面向方面程序设计语言a s p e c t j g ) 及其语法, a s p e c t j 由于其设计的成熟性作为本文进行面向方面建模的参考原型。第五章分析 u m l 及其扩展机制,分析了基于u m l 进行面向方面建模的可行性和目前几种建模 方法的优缺点,最后详细阐述了本文面向方面建模语言a u m l 的设计思想,为每个 面向方面概念设计相应的u m l 语义表达,提出了一种新的基于u m l 扩展机制的面 向方面建模方法a u m l ,支持对大型面向方面软件系统的静态结构和动态行为的建 模;同时分析了各个元素之间的关联关系,从而提出一整套普遍适用的面向方面可视 化建模语言。第六章描述了面向方面建模工具的实现,利用e c l i p s e 的插件机制开发 一种全新的a o m 工具。该工具具有的丰富功能,意图为设计和开发间的交流架起一 座沟通的桥梁。第七章是本文的结论,并提出下一步的研究方向。 4 第二章面向方面程序设计 2 1 关注点和横切关注点 任何一个工程过程都有自身关心的事情,大到系统的功能需求d , n 系统的细节实 现,都要处理一系列特定的事件和概念。因此,“一一个特殊的目标,概念或兴趣域” 称为关注点( c o n c e r n s ) ,在软件工程中可以把关注点理解为软件需要解决的需求。 关注点是软件开发处理的基本模块,关注点分离( s e p a r a t i o no fc o n c e r n s ,s o c ) 是 标识、封装和操纵只与特定概念、目标相关联的软件组成部分的能力【1 ”,早在1 9 7 2 年p a m a s 就指出我们选择分解软件系统的标准对最终系统的工程特性有着重要的影 响,因为整个软件开发过程可以看作一个分解组合的过程。关注点的有效分离是软件 工程的核心内容之一,通过对关注点的有效分离,可以将复杂的软件系统分解为更易 组织、更易理解和控制的部件,通常认为关注点分离可以带来更高级别的抽象层次, 更易理解和追踪的代码和更加松耦合的可复用模块。 关注点分离原则一般包括两个组成部分,一部分是对软件中的模块进行分离的机 制和能力,另一部分则是将所分离出来的模块进行复合的机制和能力。从软件系统本 身来看,典型的关注点可分解为处理核心功能的核心关注点和与其相配套的系统关注 点,软件系统的这两类关注点往往是正交的,比如,典型的a t m 取款机除了取款, 存款,查询等核心功能外还有安全检查,曰志记录,持久化操作和事务处理等系统级 的要求( 图2 1 ) ,这两类关注点在需求上是彼此独立的,但是系统级的关注点可以看 作是对核心级关注点的功能约束,如上例中的日志记录可能影响所有的核心功能,因 为在取款,存款,查询过程中都可能需要日志记录的处理,还有持久化操作也可能影 响所有的帐户和对象。由于核心级的关注点和系统级关注点的这种正交关系,常常出 现一些不能自然地适应单个程序模块或者几个紧密相关的程序模块的行为,这种行为 与紧内聚,松耦合的开发原则相违背,在软件开发过程中困扰着开发者,是要综合考 虑的因素。 在传统的关注点分离机制中,通过提供子函数调用或者对象间的通信完成分离模 块的复合,这种分离机制越来越不能适应现今软件开发的需要。 图2 1 系统模块与关注点 2 2 横切关注点的一般分离 对关注点进行分离的程序设计方法已经取得两个重要的进步:面向过程程序设计 和面向对象程序设计。 2 2 1 面向过程的方法 面向过程的程序设计,主要用于数学计算,主要工作就是设计求解过程,难于开 发复杂庞大的系统。为了适应形势的需要,之后逐渐发展为面向过程的结构化程序设 计方法。 结构化程序设计采用自顶向下逐步求精的设计方法和单入口单出口的控制部件, 将功能分解为相对独立的模块,形成树状结构,每个模块内部采用顺序,选择,循环 三种基本结构组成,这三种基本的控制构件奠定了结构程序设计的理论基础【1 2 1 。其模 块化的具体实现方式用子程序或函数实现。面向过程的方法从一定程度上解决了机器 语言和汇编语言级的软件难以开发和维护的问题,但是这种程序设计技术可重用性 差,数据安全性差,难于开发复杂的图形界面软件系统。 2 2 2 面向对象的方法 面向对象程序设计以“类”为其模块化和信息封装的基本单元,通过类的实例一 对象的聚集和通信,构建复杂的软件系统。同时,o o p 提供的继承和多态机制简化 了某些特殊类之间的关系,提高了程序设计的灵活性。与结构化程序设计的函数相比, 类是逻辑上相关的函数与数据的封装,是对所要处理的问题的描述。o o p 很好的解 决了软件系统中角色划分问题,借助于面向对象的分析、设计和实现技术,开发者可 以将问题域的“名词”转换为软件系统中的对象,从而自然的完成从问题到软件的转 换,从某种程度上,面向对象软件开发方法消减了语义断层,为需求建模和软件实现 提供了直接的语言支持和方法学指导。 随着面向对象程序设计的发展,出现了很多面向特定问题域的解决方式,如框架 和应用服务器,允许开发者用更模块化的方式处理某些横切关注点。比如ej b ( e n t e r p r i s ej a v a b e a n ) 架构,可以处理安全、系统管理、性能和容器管理的持久化 等横切关注点,对于数据的持久化也可以基于x m l 的映射关系描述器来实现相关的 横切关注点。面向特定问题域的解决方式提供了解决特定问题的专门机制,然而它的 缺点犹如它的优点一样明显,就是这种方式是与特定问题相关的,每一种解决方案都 要经过特殊学习。 目前许多优秀的轻量级框架都使用了控制反转模式( n v e r s i o no f c o n t r o l ,i o c ) , 这种设计模式通过依赖注入机制将对象之间的依赖关系由被动变为主动,从定程度 上减轻了系统的耦合度【13 1 。但对于形式多变的横切关注点,这种模式不能从根本上解 决有效分离。 还有一种使用混入类( m i x i nc l a s s ) 的方式,基本策略是推迟关注点的实现。基 础类包含一个混入类的实例,允许系统的其他部分设爱这个实例。行为型设计模式, 如观察者模式( v i s i t o r p a t t e m ) 0 4 ,也允许推迟具体的实现,但是像混入类一样,调 用观察者的逻辑仍然留给了基础类。 传统的面向对象程序设计为了考虑将来的变化和扩展常常导致当前系统的过度 设计,或者由于模块间复杂的依赖关系使得系统变的臃肿笨拙难以维护和移植。从总 体上讲o o p 只能使用一种主要的方式( 如“类”) 处理横切关注点的模块化,这就是通 常所说的“支配性分解的专制性( t y r a n n y o f d o m i n a n td e c o m p o s i t i o n ) 1 5 1 ”,导致一 些关注点可以很好的被分解而有些关注点只能被动的分解,从而弥漫在整个系统之 中,具有很大的局限性。 2 3 传统分离方式的不足 传统的程序设计之所以不能很好的处理横切关注点,是因为目前的软件开发常常 采用一维的方法学实现,这与需求空间的多维性相矛盾。 客观世界中的应用问题都是由客观实体及其相互作用构成的,软件开发从本质上 是借助计算机语言对抽象的实体( 对应于客观世界的问题域) 施加某种动作,以动作 的结果求解问题。通常问题域中实体的行为是多样化和不可预测的,而软件求解域中 的抽象实体是单一和固定不变的。这种不对称性也就引发了映射的不对称性,目前的 软件开发只能通过复杂的方法操作解空间中的对象才能得到问题的软件解,引发语义 断层,增加软件开发的难度和复杂度。更本质的问题是面向对象软件开发方法往往侧 重于捕捉核心级的关注点,这种垂直的分解导致水平横切的关注点不能自然的处理, 从而表现为系统级的关注点被动的弥散在整个系统中。“分散( s c a a e f i n g ) ”和“混乱 ( t a n g l i n g ) ”是这种矛盾引发的两大问题: 一 “分散”指同一个关注点分散在代码内部的各个地方,比如日志的输出,在 任何需要的地方都可能出现相关的处理语句。 “混乱”指一个区域中的代码可能处理多个关注点。比如一个“类”,除了 处理基本的核心功能外还可能要进行输入验证,安全性检查,持久化操作等 辅助功能。 这种现象可以用a t m 系统中日志关注点( l o g g i n g c o n c e m ) 的分布模拟,图2 2 【1 6 】 中每一个垂直的的条形都代表系统中的一个模块,条形中的黑线代表每一条日志输出 语句。可以直观的看出这种分布是杂乱无章并且毫无规律可言。 图2 2o o p 对横切关注点的处理 分散和混乱常常同时出现,是对同一个问题的不同方面的描述,这种分散和混乱 又从多个方面影响软件的设计和开发: _ 追踪性差:同时处理多个关注点导致关注点与实现之间的映射关系模糊。 一 生产力下降:同时处理多个关注点会导致开发人员的注意力分散,注意力 在核心级的关注点与系统级的关注点之间跳跃,导致生产效率的下降。 一 可重用性差:一个模块中处理多个关注点将导致具有相似功能的系统重用 该模块的可能性降低,使得重用只能在较低层次上进行。 一代码质量差:交织混乱的代码往往更容易隐藏错误和误解,结构性差。 可维护性、可扩展性差:由于模块之间的关系错综复杂,对系统的一次小 小的修改和升级都可能引发数据的不一致性,可能在改动大量的相关模块 后,还需要进行严格的测试保证系统的正确性。 横切关注点引发的危机是相对的而不是绝对的,只与系统的特定分解和下层的支 持环境相关联,可以通过提高对横切关注点的控制机制来改善现存问题,下面对分散 和混乱进行定量的分析。 与分散和混乱相关的定量因素有两个,一个是某个组件( c o m p o n e n t ) 负责实现 的关注点数量,另一个是一个关注点所涉及的组件数量。表2 1 中的c 【n 】代表系统中 不同的组件,关注点与用户需求( r e q u i r e m e n t ) 可简单的看作一对一的映射关系, 用r e q 【n 】代表系统中不同的关注点。 表2 1 分散和混乱 c lc 2c 3 r e q l o1 0 s c e r e q 2 :一 1 1 : 0 ; r e q 3 l 1 : l i j t a n g l i n g 定义2 1 :如果组件y ( 至少部分的) 实现了需求r ,则r 是y 的职责。 ,p 印( r ,j ,) = j 1 。, f f p b r e f 5 7 8 印。”5 f 6 f ,f 砂q ,_ y ( 2 1 ) 混乱度t ( c ) 由一个组件的职责数定义( 公式2 2 ) ,分散度s ( r ) 由实现需求r 涉及的 组件数定义( 公式2 3 ) 。我们不能只考虑混乱和分散的绝对值,而是应该权衡分散与 混乱的平均分布,因此得出一个分散率的度量公式,由全部的分散度相对于所有的组 件数定义( 公式2 4 ) f ( c ) = r e s p ( r ,c ) ( 2 2 ) s ( ,) = r e s p ( r ,c ) ( 2 3 ) u。把玉#(r盏rqmnts)(rqmnts) 眨。, j r 口把 = 堂竺坚型 ( 2 4 ) 在程序设计中我们的目标是t ( c ) 和s ( r ) 的值达到最小,减小t ( c ) 值意味着一个组件 需要负责处理的关注点数量在下降,提高了组件到需求的可追踪性,这个结论基于纯 粹的降低组件负责的需求可以简化剩余关系的事实。减小s ( r ) 值意味着一个关注点牵 涉的组件数量在下降,这基于降低实现的复杂度,可以提高可维护性和可理解性的原 理。s r a t e 的值介于0 到1 之间,s r a t e 的值为零意味着系统中没有横切行为,s r a t e 的值为1 说明所有的需求分散在所有的组件中。表2 2 分别计算了各值。 c lc 2c 3 s ( r e q ) l r e q l 0lo 2 r e q 2 ll0 3 r e q 3 l1l t ( c ) 23l s _ r a t e ( r q m n t s ) = f 0 + 05 + 1 ) 3 = 0 5 在表2 2 中的r e q 3 代表了系统中的横切关注点,可能是系统的安全要求如验证和 授权,也可能是系统的持久化或分布性要求,如果取消r e q 3 与模块c 1 ,c 2 的耦合 关系而单独处理,也就是说表2 中r e q 3 与c 1 ,c 2 的值为0 的情况下,相应的 sr a t e ( r q n m t s ) 的值变为( o + o 5 + 0 ) 3 = 0 1 6 7 可以看出对横切关注点的有效分离可以 显著的降低系统的复杂度,构建更加松耦合的可追踪系统。面向方面程序设计就是一 种对横切行为模块化的程序设计方法学。 2 4 横切关注点的有效分离 面向方面程序设计是一种新的程序设计方法,专注于软件系统的关注点分离, 基本目标是横切关注点的有效分离。 通过运用a s p e c t 这种程序设计单元,允许开发者使用结构化的设计和代码,更 加自然的反映开发者对待实现系统的认识方式,达到使横切关注点局部化,模块化, 结构化的目的,避免面向对象软件开发方法导致的横切关注点弥漫于整个系统中的 现象,克服了支配性分解的专制性的弊端,同时在运行时织入模块的能力极大的改 善了软件系统的可维护性和扩展性。 图2 3 模拟了a o p 对a t m 系统中日志横切关注点的处理方式,可以看出这种 横切的行为已经局部化到一个模块中,增强了系统的易追踪性和可控性。 图2 3a o p 对横切关注点的处理 之所以有这样的差别是因为a o p 和o o p 处理横切关注点的结构有关,a o p 从 语言级别上提供支持横切关注点模块化、局部化的机制。图2 4 对比了o o p 与a o p 对横切关注点模块化的两种方式,其中带有箭头的直线代表了两个模块之间可能存在 的耦合关系。对比之后可以看出a o p 有以下几个优点: 有效分离( s e p a r a t e d ) 一横切关注点的实现做为一个相对分隔而独立的实体。 局部化( 1 0 c a l i z e d ) 一横切关注点的实现可以只出现在程序的一个部位。 一可追踪( t r a c e a b i l i t y ) 一横切关注点的模块化有利于追踪行为的变化。 图2 4 面向方面与面向对象的结构 a o p 提供关注点和系统其他部分定义良好的接口,从而真正实现“关注点的有 效分离”,达到分而治之的目的。类似于传统语言的编译器,面向方面程序设计提供 相应的方面织入器,使用连接点机制( j o i np o i n t ) 按照编织规则( w e a v i n gr u l e s ) 将 横切的关注点编织为可运行的软件系统。 2 5 面向方面程序设计历史 面向方面程序设计对横切关注点的有效分离也不是一蹴而就,在此之前经历了几 个螺旋上升发展的阶段,在面向方面软件工程较为成熟之前对横切关注点的分离主要 有以下四种方式,每一种方式都通过一个侧面反映了面向方面的思想,通过理清面向 方面程序设计发展的脉络,可以掌握面向方面程序设计的发展趋势,从而更好的进行 面向方面建模的设计,表达面向方面核心思想的本质。 2 5 1n 度分离:关注点的多维分离 软件开发的主要目标是提高软件系统的质量,降低软件开发的成本,更便利的 实现软件维护和升级。为了降低软件开发的复杂性,提高软件系统的可理解性,通常 采取分解机制,把软件系统分解成有意义和易控制的模块,然后采用某种组合机制再 将这些模块连接起来,形成需要的软件系统。 尽管目前对软件工程已经做了大量的研究,但是收效甚微,软件系统的可理解 性仍然随着时间和升级的次数而下降,日常的维护工作都可能产生入侵修改等不良后 果,这一切大都可归咎于关注点分离机制的落后,传统的程序设计语言是以一种线性 的文本来描述软件,只采用一种主要的方式( 支配性分解) 将软件分解成正交模块, 这种方式导致某些关注点比较好的被捕捉,容易进一步组合、扩展,某些关注点没有 被捕捉,弥散在整个软件内部,引发混乱。因此更好的模块分解的方法应该允许沿着 多维方向对重叠关注点进行同步的分解和聚合,关注点的多维分解”1 ( m u l t i d i m e n s i o n a ls e p a r a t i o no f c o n c e m s ) 打破了支配性分解的专制,从而构造更加灵 活( f l e x i b i l i t y ) ,可重用( r e u s e ) ,易追踪( t r a c e a b i l i t y ) 的软件系统。 根据上下文的不同,“多维方向”可以按照功能特征、变化单元、定制、数据、对 象等等划分。该原理的支持机构为i b m 托马斯j 沃森研究中心,相应的支持系统为 h y p e r j 1 ”。 2 5 2 组合过滤器r c o m p o s i t i o nf i l t e r sm o d e l ) t w e n t e 大学的m e h m e ta k s i t 及其小组是基于组合过滤器( c o m p o s i t i o n a lf i l t e r s

温馨提示

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

评论

0/150

提交评论