已阅读5页,还剩60页未读, 继续免费阅读
(计算机应用技术专业论文)基于uml扩展的面向aspect建模研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得重麽由g 电太堂或其他教 育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何 贡献均已在论文中作了明确的说明并表示谢意。 学位论文作者签名: 彳裼 签字日期:j 一歹年月多日 , 学位论文版权使用授权书 本学位论文作者完全了解重庆邮电太堂有关保留、使用学位论文的规 定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查 阅和借阅。本人授权 重麽由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 ) 是一种在面向对 象程序设计( 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 ) 基础之上发展起来的新技术。 该技术有效地解决了横切关注点的问题,极大地增强了代码的重用性和系统 的可维护性。面向方面思想已不再局限于编程层次,而是开始影响到软件开 发的各个阶段,形成了面向方面软件开发沁p e c t o r i e n t e ds o f t w a r e d e v e l o p m e n t ,a o s d ) 技术。 虽然,以r a t i o n a l 统一过程( r u p ) 之父i v a rj a c o b s o n 为代表的科学家推测, a o p 将成为编程方法学的下一个里程碑,但是目前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 s d 发 展的一个瓶颈,同时也是a o s d 研究的重点和热点。 针对a o s d 建模阶段存在的不足进行了研究和分析之后,通过对u m l 元 模型的扩展,首先设计了a o s d 建模语言a o u m l ( a s p e c t o r i e n t e du m l ) , 主要设计了a o s d 整体框架模型、a o s d 各元素模型、a o u m l 整体结构模 型,为a o u m l 定义了相应的语法、语义和约束;接着,利用r a t i o n a lr o s e 扩展接口编写了配置文件,把a o u m l 中的模型作为插件嵌入到r a t i o n a lr o s e 中,使得r a t i o n a lr o s e 能够支持a o u m l 的建模行为,为a o u m l 提供了可 视化建模平台;最后,利用r o s es c r i p t i n g 编写程序,实现了从模型到代码的 自动生成功能。 研究工作为a o s d 建模提供了建模语言和建模平台,实现了a o m 模型 的可视化和可执行性,解决了现阶段a o m 在这方面的欠缺,对a o m 的设计 标准和规范性进行了探讨,为a o s d 在发展过程中所遇到的瓶颈提供了一条 良好的解决途径。 关键字:面向a s p e c t 软件开发,面向a s p e c t 建模,统一建模语言,a s p e c t j a b s t r a c t a o p ( a s p e c t o r i e n t e dp r o g r a m m i n g ) i san e wi d e a w h i c hb a s eo no o p a o pc a ns o l v ec r o s s c u t t i n gc o n c e r na v a i l a b l y ,i m p r o v et h ec o d er e u s a b l e a n dt h es y s t e mm a i n t a i n a b l e a tp r e s e n t ,a o pi sd e v e l o p e da n dc o m ei n t o b e i n ga 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 tt e c h n o l o g y 鲈a d u a n y m a n vs c i e n t i s t ss u c ha si v a rj a c o b s o n ,t h cf o u n d e r0 ft h er a t i o n a l u n i f i e dp r o c e s s ( r u p ) ,i n s i s t st h a ta 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 f a o s d ) w 订lb et h en e x tm i l e s t o n ci nt h eh i s t o r yo f s 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 dp r e s e n t l y ,b e c a u s e i ti st h el a c ko fa o l 讧 l a n g u a g e ,a o md e s i g np l a t f o r m a n da o mt 0 0 1 a tt h ep r e s e n tt i m e ,t h c a o mi sb e c o m i n gm o r ea n dm o r ci m p o r t a n ti na o s d a f t e fa n a l y z i n ga n dr e s e a r c h i n gt h es h o r t a g e so fa o m ,d e s i g n st h e a o ml a n g u a g e a o u m l ( a s p e c t o r i e n t e du m l ) w h i c hi n c l u d e sa o s d w h o l eb a c k b o n cm o d e l ,c v e r ye l e m e n t sm o d e l s ,r c l a t i o n s h i pa m o n gt h e s c e l e m e n t s ,t h cs y n t a x ,t h es c m a n t i c s ,t h ec o n s t r a i na n dt h ca o u m l w h o l e s t r u c t u r em o d e l ;s e c o n d ,i nt h er a t i o n a lr o s c ,c o m p i l et h cc o n f i g u r a t i o nf i l c f o rt h e s em o d e l sa b o v c ;m a k et h e s cm o d e l sa d d i n si nr o s e ; f i n a l l y ,m a k e s t h ef u l lu s eo fr 0 s es c r i p t i n gt 0c o m p i l ct h ep r o g r a m m i n g , r e a l i z ct h e f u n c t i o nf r o mt h em o d e lt 0c o d c s0 fa s p e c t j t h f o u g ht h ea p p l i c a t i o ni n e x a m p l e ,p r o v et h ea o u m l ,t h ea o mp l a t f o r mi sc o 盯e c t t h cr e s e a r c h i n go fp a p e rs u p p l ym o d e l i n gl a n g u a g ca n dm o d e l i n g p l a t f o r mf o ra o m ,f e a l i z ev i s u a la n dd i s t i n g u i s hm o d e l s0 fa o s d ,0 f f s e t t h cs h o r t a g e s0 fa o mi nt h ea s p e c t s ,r e s o v l et h e b o t t l e n e c k0 fa o s d d e v e l o p m e n t k e yw o r d s :a s p e c t - o r i e n t e dm o d e i i n g ,u n i f o r mm o d e l i n gl a n g u a g e , a s p e c t - o r i e n t e ds o f t w a r ed e v e i o p m c n t ,a s p e c t j l l 重庆邮电人学硕十论文目录 目录 摘要”i a b s t r a c t ”i i 第一章绪论1 1 1 研究背景。1 1 2 研究现状2 1 3 研究内容4 1 4 论文组织结构5 第二章面向触p e c t 软件开发6 2 1 传统的软件开发所面临的问题。6 2 1 1 软件系统中的关注点和横切关注点7 2 1 2 传统的软件开发对关注点处理方法及其不足8 2 2 面向触p c c t 编程技术介绍1 0 2 2 1 面向舡p e c t 编程的产生1 0 2 2 2 面向舡p e c t 编程思想1 0 2 2 3 关注点的有效分离1 1 2 2 4 面向舡p e c t 编程核心概念”1 2 2 3 面向舡p e c t 软件开发1 5 2 3 1 面向舡p e c t 软件开发的基本思想1 5 2 3 2 面向舡p e c t 软件开发的实现过程1 6 2 3 3 面向舡p e c t 软件开研究重点“1 6 2 3 4 面向舡p e c t 软件开发的优势1 8 2 4 本章小结。1 8 第三章u m l 及其对面向触p e c t 建模的支持1 9 3 1u m l 简介1 9 3 1 1u m l 的组成1 9 3 1 2u m l 语言结构2 6 3 2u m l 的扩展机制2 1 3 2 1u m l 元模型体系结构2 1 3 2 2u m l 的扩展机制2 2 3 2 3u m l 的特征文件”2 3 3 3 面向舡p e c t 建模:。2 4 l l l 重庆邮电大学硕十论文目录 3 3 1 面向舡p e c t 建模介绍2 4 3 3 2 面向砖p e c t 建模研究现状2 5 3 3 3 面向a s p e c t j 建模存在的不足”2 5 3 4 本章小结2 6 第四章基于u m l 扩展的面向a s p e c t 建模2 7 4 1 解决方案2 7 4 2a o s d 建模语言a o u m l 的设计2 7 4 2 1a o s d 整体结构模型设计2 7 4 2 2 包图p a c k a g e 的设计2 9 4 2 3 舡p e c t 的设计2 9 4 2 4a d v i c c 的设计3 2 4 2 5p o i i l t c i l t 的设计3 4 4 2 6a o u m l 整体结构的设计”3 6 4 3a o u m l 语法语义总结3 7 4 4 本章小结j 3 9 第五章面向舡p c c t 建模实现及初步应用“4 0 5 1r a t i o n a lr o s e 工具简介4 0 5 2a o s d 可视化建模平台的设计4 1 5 3a o u m l 模型代码自动生成功能实现。4 3 5 4 一个实例的建模与应用。4 5 5 4 1 实例介绍”4 6 5 4 2 系统功能扩展分析以及实例建模4 6 5 4 3 自动代码产生及扩展修改_ 4 8 5 4 4 实验结果分析“5 0 5 5 本章小结5 1 第六章总结及未来工作5 3 6 1 总结5 3 6 2 未来工作5 4 致谢“5 5 攻硕期间从事的科研工作及取得的研究成果5 6 参考文献5 7 l v 重庆邮电人学硕+ 论文第一章绪论 1 1 研究背景 第一章绪论 随着计算机科学技术地不断发展,程序设计语言也在不断地改进和 完善,从机器语言、汇编语言、结构化程序设计,到现在流行的面向对 象程序设计( 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 b j e c t o r i e n t e d s o f t w a r cd e v e l o p m e n t ,o o s d ) 技术,并且,已经渗入到计算机的各个领 域当中。 o o p 技术提出的类、对象、封装性、多态性以及继承机制,不仅能 较好地描述现实世界,而且更加符合人们的认知习惯。因此,面向对象 的思想一经提出就得到了各界广泛的支持。o o p 把现实世界的实物抽象 化为一个个的类,类中封装了方法、属性等,用对象去实例化类。o o p 集中于选择对象作为系统模块化的单元,支持软件设计的三条重要原则 一一抽象、信息封装、模块化,使得开发人员控制大型复杂的系统变为 可能。 面向对象的主要优点在于它的可重用性和扩展性,就是因为它对关 注点的分离起到了很重要的作用。它成功地分离了系统的“核心关注点 ( c o r ec o n c e r n s ) ,用类去完成系统的核心功能,并将其很好地封装起来, 较好地实现了系统的模块化。但是,对于系统中那些比如日志处理、事 务处理、系统性能优化、权限认证、系统统一的认证、系统异常捕捉及 处理等这样一些分散在各个不同的类中、横切于各个不同类的这些非功 能需求,即“横切关注点( c r o s s c u t t i n gc 0 n c e r n ) 1 1 p ,却显得力不从心, 从而导致了这些横切关注点分散、混乱地分布于各个类中,导致了“代 码散布 和“代码交织,使得软件开发过程中以及最终的软件质量存在 以下不足: 开发出来的系统模块化降低。 程序难以理解。 限制了软件的重用性。 破坏了组件的模块化。 重庆邮电人学硕士论文 第一章绪论 源代码不易修改。 程序容易出错。 系统不易维护。 代码开发生产力下降。 为了解决面向对象所带来的这些问题,能够更有效地分离出横切关 注点,更好地处理系统中的非功能需求,面向方面程序设计 ( 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 ) 【1 】应运而生。a o p 是施乐公司帕洛 阿尔托研究中心( x e r o xp a r c ) 在上个世纪九十年代提出的一种编程规 范,并在1 9 9 7 年欧洲面向对象程序设计大会( e c o o p9 7 ) 正式提出。该 方法用一种新的构造单元一一 a s p e c t 【1 】来表达横切关注点,把横切关注 点从系统的基本功能模型中分离出来,单独设计和实现,用以完成系统 的非功能需求,然后再利用工具把a s p e c t 和类进行编织【1 1 ,组成最终的 系统。 a o p 有效地分离和处理了系统中的横切关注点,弥补了面向对象在 这个问题上的不足,是对面向对象方法有效地补充,从而很好地解决了 面向对象软件开发所带来的问题。同时围绕着a o p 逐渐发展成为面向方 面软件开发( a s p e c t o r i e n t e ds o f t w a r ed e v c l o p m e n t ,a o s d ) i2 1 。其中,面 向方面建模( 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 s d 技术研究 和实践的热点。a o m 技术的研究和应用对a o s d 思想的描述和发扬起 了关键的作用,而a o s d 则是面向方面思想在软件工程领域的渗透和应 用,对其研究有助于提高现代复杂软件的开发质量和效率,提高软件开 发管理的科学性。 目前,a o m 已经成为a o s d 领域的重要课题。系统的开发者利用 a o m 技术在软件设计的初始阶段进行建模设计,表达不同的关注点,并 且,用形式化的符号表示出来,能够很直观地表达核心概念,为下一阶 段的代码设计提供了前提保障。a o m 作为a o s d 的一个重要环节,是 沟通需求分析和程序设计的一个不可或缺的步骤,意义重大。本文也正 是在此背景下展开研究和讨论的。 1 2 研究现状 a o s d 的研究在国内外蓬勃发展,而a o s d 的最高学术组织一一 a o s d 大会出o n f e r e n c eo na 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 t ) 到0 9 年已经是第八届年度大会,其官方主页位于:h t t p :w w w a o s d n e t 。 2 重庆邮电人学硕十论文第一章绪论 虽然以i v a rj a c o b s o n 为代表的专家推测,a o p 将成为编程方法学的 下一个里程碑,而且,目前已有大量的a o p 语言和编译系统支持a o s d , 但a o s d 仍没有得到大范围的应用,其中,最主要的原因就是缺少a o m 语言和实施a o m 概念的建模工具1 3 】。 缺少a o m 语言对于a o s d 发展的影响是重大的: 1 首先,在建模阶段,u m l 很好地表达o o p 中的类、类之间的继 承关系、类对属性和方法等的封装,以及类与类之间的协作等关系。但 是,标准的u m l 对a o m 却无能为力,它不能够表达a s p e c t 在多个类之 间的横切关系、a s p e c t 的概念以及a s p e c t 和a s p e c t 之间的关系。 2 其次,在软件工程方面,由于a o s d 缺乏a o m 的支持,无法在 整个软件生命周期中用一种高层次的抽象表达各种a o s d 的相关概念, 这样不仅使得开发人员无法用一种抽象、高效的语言进行交流,也无法 在正确建模的基础上进行开发;更为重要的是,由于a o s d 实现时把 a s p e c t 的行为编织进了与a s p e c t 相关的每个类的行为中,在大型软件后 期的维护以及修改阶段,由于缺乏明确的模型,一个不小心的修改,可 能就会造成系统性的崩溃。 3 最后,由于缺乏明确的模型,无法对a s p e c t 构件化,对使用a o s d 的软件开发来说,软件复用也许会成为一个无法逾越的难题。 因此,a o m 已经成为a o s d 研究的重点和热点。在现阶段,对a o m 的研究主要存在两种流派:一种流派主张a o m 应该基于o o p 成熟的建 模语言u m l 之上,通过对其扩展来满足a o p 的需要。另外一种流派主 张a o m 应该从软件体系结构( s o f t w a r ca r c h i t e c t u r e ,s a ) 的角度出发。 目前,大多数研究是利用u m l 的扩展进行a o s d 的建模。该方法 利用u m l 提供的扩展机制和特征文件,在现有面向对象模型的基础上 进行扩展,来表达a o s d 的核心概念。新的a o s d 模型能够与面向对象 的模型相结合,两者相辅相成,共同完成整个系统。利用u m l 扩展机 制来进行a o s d 的建模直观、明了,紧扣a o s d 的核心概念,从长远的 立场来看更具有生命力。 本文认为,a o s d 并不是超越o o s d 的一种技术,从语言特性上和 o o p 很相似,比如a s p e c t 和类的概念基本一致;从功能需求和程序设计 方面看,a o s d 只是提供了观察问题的一个新的角度,即就是:从一个 横向的角度来剖析问题。所以,a o s d 更像是o o s d 的一种合理的补充, 而不是一种全新的超越。现阶段对a o s d 进行建模,更为合理的方式应 该是对支持o o s d 的工业标准一一u m l 进行扩展,以达到支持a o s d 3 重庆邮电人学硕+ 论文第一章绪论 建模的目的。本文也正是利用u m l 的扩展机制,在u m l 元模型的基础 之上针对上述a o m 的不足进行研究和开发工作。 1 3 研究内容 本文研究和分析了a o s d 的核心思想、基本概念和发展现状,特别 是深入研究和分析了当前的a o m 方法和已有的研究成果,针对其存在 的不足,利用u m l 的扩展性,在u m l 元模型的基础上,对u m l 进行 了合理地扩展,设计了一套a o s d 建模工具。这套建模工具主要包括三 个部分: 1 首先设计了a o s d 建模语言一一a o u m l ( a s p e c t o r i e n t e du m l ) , 该语言主要包括a o s d 整体框架模型,p o i n t c u t 、a d v i c e 、a s p e c t 等a o s d 中各元素的模型及其它们之间的关系,a o u m l 整体结构模型。除此之 外,还为a o u m l 定义了相应的语法、语义以及约束。整体框架模型使 得a o s d 中的整体结构清晰;a o s d 中各元素模型为a o s d 建模提供了 可视化的图形符号;a o u m l 整体结构模型表达了个元素间的关系; a o u m l 语法及约束为a o s d 建模行为提供了文本化的规范要求。 2 在建模工具r a t i o n a lr o s c 中,编写了配置文件,把a o u m l 中的 各个模型元素以插件的形式嵌入到r a t i o n a lr o s e 中,使得开发者能够直 接利用r a t i o n a lr o s e 进行a o s d 的建模,为a o s d 建模提供了一个可视 化的建模设计平台,同时也为下阶段的代码自动生成提供了可靠保障。 3 为了减轻开发人员的工作量、提高软件开发效率,并且能够保证 从设计到代码的一致性,本文利用r a t i o n a lr o s c 中自带的语言工具一一 r o s es c r i p t i n g 编写了m y a s p e c t e b s 程序文件,能够直接在r a t i o n a lr o s c 这样一个建模平台下,把用形式化语言描述的a o s d 模型转换为a o s d 程序设计语言,形成一个基于a s p e c t j 的代码框架。 本文利用了一个数字图书馆系统中的几个子系统进行a o s d 实例建 模,证明了这套工具的正确性和可用性。最后,对全文做了总结,并对 本文未来的研究方向和所要做工作进行了展望。 与现有的a o m 模型相比,本文所设计的a o m 工具主要优势在于: 该工具不仅包含了a o s d 模型,更重要的是,为a o m 设计了建模语言 和建模平台,以及代码的自动生成功能。该工具大大增强了a o s d 的建 模功能,规范和完善了a o s d 的建模行为,实现了a o m 模型的可视化 和应用性,弥补了现阶段a o m 在建模语言和建模平台方面的不足,为 4 重庆邮电人学硕士论文第一章绪论 a o m 在这方面提供了一条探讨和发展的途径。 1 4 论文组织结构 本文的结构安排如下: 第一章从面向对象的不足开始,概述了a o p 的起源、优势,结合a o s d 当前的研究热点,阐述了本文研究的背景、内容以及意义。 第二章研究和分析a o p 的核心思想,分析了a o p 与o o p 结构的差异, 以及a o p 有效分离横切关注点的途径。介绍了a o s d 实现过程、涉及的基 本概念和发展现状,并且讨论了a o s d 的研究热点及其优势。 第三章阐述了统一建模语言u m l 的基本概念,着重介绍了u m l 的扩 展机制和特征文件,以及u m l 对a o m 的支持。最后讨论了a o m 的发展现 状以及存在的问题。 第四章首先针对第三章所提出的a o m 研究存在的不足,从总体上给出 了本文的解决办法。随后,设计了a o s d 建模语言一一a o u m l ,包括a o s d 的整体结构框架模型设计,对a o s d 的主要概念诸如a s p e c t 、p o i n t c u t 、a d v i c c 等分别设计了各自的模型、它们之间的关系,定义了a o u m l 的语义和语 法及约束,并且设计了a o u m l 整体结构模型。 第五章编写了一个r a t i o n a lr o s e 配置文件,把第四章所设计的a o u m l 中的模型作为插件嵌入在r a t i o n a lr o c 中,使得r a t i o n a lr o s e 工具也能够支 持a o s d 建模,为a o s d 的建模提供了一个设计平台;同时,利用r o s c s c r i p t i n ge d i t o r 编写了程序,实现了从模型到代码的自动生成功能。最后 通过实例,验证了本文所设计的a o s d 建模工具的正确性和实用性。 第六章对全文做出了总结,并对本文的未来工作做出展望。 5 第二章面向a s p e c t 软件开发 2 1 传统的软件开发所面临的问题 在计算机技术发展的早期阶段,计算机编程技术才刚刚起步,那时 的开发人员一般直接使用机器语言或者是汇编语言来编写程序,这使得 编程效率和代码的可移植性都非常差,更不用说将来的系统维护。 随着计算机技术的发展,软件复杂性的增长导致软件的维护和扩展 变得非常困难,这些需求促进了结构化程序设计的诞生,其目标是更好 地提供一种管理软件开发过程的手段,具体体现的功能是分解。随着软 件规模的进一步扩大,软件开发人员感觉经常在重复劳动,软件复用这 一需求越来越紧迫,模块化的概念应运而生;随后,为了在语言层次上 更直接支持复用,研究人员提出继承的思想,也就是面向对象程序设计 的核心之一,它使得程序员以更接近现实问题的方式去构造软件【4 1 。 面向对象程序设计( 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 ) 已经成为当 前主流。面向对象设计思想是对现实世界抽象层次不断发展和提高的结 果,它将系统分成是一组相互协作的对象,通过系统中不同的类、方法、 属性等概念来组织系统,方法和属性被定义在相关的类中,相关的类被 封装在包中。面向对象思想在代码的重用性、系统可维护性等方面有着 突出的优势,已经被广泛地应用于当前的软件开发中。 然而,面向对象程序设计并没有彻底地解决软件开发中的维护、复 用等问题。在面向对象思想中,软件被划分为多个离散的类,每个类都 承担着自己独特的功能。在开发中,这些类中的功能被实现以后,再将 其组合起来,以完成整个系统。但是,类与类之间的关系一般都是错综 复杂的。面向对象只是通过继承表达了类之间纵向的联系,而忽略了它 们之间横向的关系,结果导致了类之间一些共同的属性和方法等散乱分 布在各个类中( 比如系统安全、日志、用户登录、权限管理、错误处理、 性能优化等) ,使得程序中的代码互相交织,分布散乱,这些直接导致了 模块之间的耦合度大大增加,并且给系统的维护、代码复用以及程序的 健壮性等方面带了隐患,这与软件开发的思想相违背。 除此之外,在软件开发的整个生命周期中,面向对象思想还存在以 下几点不足【5 l : 6 1 设计阶段:由于以类为单位组织模块,因此它不能全面反映系统 需求。 2 编码阶段:o o p 将所有数据和方法都封装到相应的类中,这有利 于增强数据的安全性和模块化,但也有一些属性和方法是特定于具体应 用的,因此这种封装同时也减少了代码和模块的可重用性。 3 维护阶段:由于类中夹杂了其他各种特定于应用的代码,使得类 的功能变得模糊,维护人员也难以理解;此外,由于完成某个特定需求 的代码( 如权限管理、系统安全等) 分散在各个类中,当这些代码需要修 改时,很难把它们全部找出,这给程序的健壮性带来了隐患。 2 1 1 软件系统中的关注点和横切关注点 1 关注点( c o n c e r n ) 关注点( c o n c e r n ) 是一个为了满足系统整体目标而必须被处理的特 定需求或考虑【3 1 ,是一个特殊的目标、概念和兴趣域i 引。在软件工程中, 可以把关注点理解为软件需要解决的问题,它可能是软件系统的功能需 求、非功能需求以及系统的设计约束。关注点是软件需要解决的问题, 而需求可以看作是用来详细描述关注点的方式。从技术上讲,一个典型 的软件系统由许多核心级关注点和系统级关注点组成,如在一张信用卡 处理系统中,包括处理支付这样的核心关注点,以及处理日志、交易一 致性、鉴别用户身份、安全处理、性能维护等系统级关注点。关注点是 软件开发处理的基本模块,关注点分离( s e p a f a t i o no fc o n c e m s ,s o c ) 是 标识、封装和操纵与特定概念、目标相关联的软件组成部分的能力【6 j 。 关注点的有效分离是软件工程的核心内容之一,通过对关注点的有效分 离,可以将复杂的软件系统分解为更易组织、更易理解和控制的部件, 通常认为关注点分离可以带来更高级别的抽象层次,更易理解和追踪的 代码和更加松耦合的可复用模块。 2 横切关注点( c r o s s c u t t i n gc o n c e r n ) 在一个系统中,可能包含这样一些关注点,比如包括日志处理、用 户登录、身份鉴定、安全处理、性能优化等这样一些关注点,它们零散、 混乱地分布在系统中各个不同的、所有的模块中,也就说他们横切系统 中不同的模块,如图2 1 所示。对它们实现或者修改时,会影响到系统 中的其他多个模块,我们把这样一类关注点称为横切关注点。这类关注 点均需要同时作用于核心功能模块( i m p l e m e n t a t i o nm o d u l e s ) 。如果使用 7 目前的编程方法学,这些横跨多个模块的横切关注点将使系统很难设计、 理解、实现以及发展。横切关注点也是关注点的一种。 图 囵一 图2 1 系统模块与关注点 2 1 2 传统的软件开发对关注点处理方法及其不足 关注点是软件开发处理的基本模块,关注点分离是标识、封装和操 纵与特定概念、目标相关联的软件组成部分的能力r 7 1 。关注点的有效分 离是软件工程的核心内容之一,通过对关注点的有效分离,可以将复杂 的软件系统分解为更易组织、更易理解和控制的部件,通常认为关注点 分离可以带来更高级别的抽象层次,更易理解和追踪的代码和更加耦合 的可复用模块。所以,对关注点的有效的分离在软件设计中起着非常重 要的作用,可以大大提高软件设计的效率,提高模块的独立性、增强了 代码的重用性和系统的可维护性。 面向过程的程序设计方法采用了自顶向下、逐步求精的设计方法将 系统功能分解为相对独立的模块,每个模块采用顺序、选择、循环三种 基本的结构组成。其模块化的具体实现方式用子程序或函数来实现。 面向对象的程序设计方法把现实世界抽象为一个个不同的类,以类 为其模块化和信息封装的单元,提出了多态和继承的方式简化了一些特 殊类之间的关系,很好地解决了类与类之间纵向间的关注点之间的关系, 一定程度上提高了代码的复用性,也提高了程序设计的灵活性。 尽管对关注点的分离一直是软件开发中研究的热点和重点,也提出 了很多方法,但是,都不能很好地解决横切关注点横跨多个模块的问题, 那是因为目前的软件开发方法通常采用一维的方法学实现,这与需求空 间的多维性相矛盾【8j 。即需求空间是n 维的,而实现空间却是一维的。 8 一 这使得从需求到实现只能沿着单一的维来映射,如图2 2 所示。一个模 拟系统的三维关注点空间被传统的编程方法学映射实现为一维实现空间 中的混合代码,从而不能有效地实现关注点分离。 l o g g i n g 图2 2 传统编程方法的一维处理方法 因为传统方法在实现空间上是一维的,所以系统设计人员只是关注系 统的核心关注点,而忽略了分散在各个模块中的横切关注点。使得横切代 码混乱分散在各个模块中,降低了模块的独立性和代码的重用性,也为以 后的维护带来了很大的困难。 传统方法处理关注点主要存在以下问题: 1 代码交织( c o d et a n g l i n g ) :一个软件系统的模块可能同时与数个 需求交互。比如一个类,除了要处理系统需要的核心功能之外,还要输入 身份验证、安全检查等这些辅助功能。 2 代码分散( c o d es c a t t e r i n g ) :由于横切关注点横跨多个模块,所以 与这些横切关注点相关的实现代码也跨越所有这些模块。比如身份验证, 在任何需要的模块中都要出现与之相关的处理语句。 这种现象可以用a t m 系统中日志关注点( l o g g i n gc o n c e r n ) 的分布进 行模拟,图2 3 中每一个垂直的条形都代表系统中的一个模块,条形中的黑 线代表每一条日志输出语句。可以直观地看出这种分布是杂乱无章并且毫 无规律可言。 图2 3o o p 对横切关注点的处理 9 为了解决传统的软件开发方法中对横切关注点不能有效分离的问 题,上世纪9 0 年代早期美国硅谷p a r c 研究中心首席科学家g r e g o r k i c z a l e s ( 目前是加拿大不列颠哥伦比亚大学计算机科学教授) 带领的研 究小组先后尝试了反射( r e n e c t i o n ) 和元对象协议( m e t a o b i c c tp r o t o c 0 1 ) 等多种技术,但这些技术非常复杂,难以被广泛利用。最终,g r e g o r k i c z a l e s 等人抓住了问题的要害一一横切( c r o s s c u t t i n g ) ,并在1 9 9 7 年欧 洲面向对象程序设计大会( e c o o p 9 7 ) 提出了面向方面程序设计 ( 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 ) 1 1 】的概念,其目的是让程序员能够在 自己的代码中将“横切结构 模块化,这就是a o p 的起源。1 9 9 7 年, p a r c 开始开发a s p e c t j ( a o p 在j a v a 语言基础上的扩展) ,1 9 9 8 年首次 对外公布,2 0 0 1 年发布1 0 版本。随后,a s p e c t c + + ,a s p e c t c 挣等等都相 继涌现。a o p 作为一种新的程序设计范型,体现出了强大的生命力,而 且生命可能才刚刚开始。 从此,在每年的e c o o p 上都有与a o p 相关的专题研讨会,各大公 司、大学和研究机构也纷纷加入人员进行研究。 a o p 被看作是标志软件设计和编写方法基础型转变的三大运动之一 ( 重构、契约式设计、a o p ) 【9 1 。从2 0 0 2 年起,每年春天分别在欧洲和美 国轮流召开的a o s d 国际学术会议,每年都有不同的有关于a o s d 的新 思想和新方法被纷纷提出,研究人员也大量增加。由此可以看出,a o s d 已经成为研究的热点,也必将成为今后重要的软件开发方法。 2 2 2 面向a s p e c t 编程思想 “分而治之 一直都是软件开发的核心思想,a o p 技术是一种新技 术,在该思想的基础上,对软件系统中的横切行为进行模块化,把系统 看成是多个关注点的组合,为实现关注点分离提供了另外一种分而治之 1 0 的方法。它为开发者提供了一套对横切行为进行描述、封装以及将横切 行为组合到面向对象的软件系统中的完整机制。 a o p 不是o o p 的替代品,而是在0 0 p 基础上的进一步补充和完善, 两者相辅相成。在某些场合下,a o p 可以很轻松地解决o o p 沉重的负 担,比较典型的例子是用a o p 来实现设计模式o b s e r v e r 【1 0 j 。通过比较 a o p 与o o p 实现设计模式的方式的差异,我们发现a o p 应用在对象之 间横向联系较为频繁的场合下,非常自然却又显现出惊人的强大,这些 原先在o o p 中需要很多技巧的工作,a o p 却能轻松解决。a o p 通过a s p e c t 来模块化软件中的横切关注点,这些关注点包括同步控制、日志记录、 性能优化、安全验证等,严格并且彻底清晰地划分了软件的角色。a o p 中的类只需明确自己的主要职责,而o o p 中分散或交织在核心功能模块 中的横切关注点,被从中抽取出来,交给a s p e c t 实现模块化管理,从而 降低类与类之间的耦合度,增强了类的内聚度,使软件更易于维护、复 用和扩展,使系统构架更为灵活、轻便。 然而,a o p 并不万能,g r e g o rk i c z a l e s 认为:“我们并没有也不想 把一切推倒重来,我们提供的是一种1 5 的解决方案 ,这正如从过程 发展到对象时,人们并没有完全抛弃过程。通过比较分析多种g o f 设计 模式的o o p 与a o p 实现方式,我们发现,在对象之间横向联系不很频 繁的场合,a o p 并不一定比o o p 更有优势,甚至有时使用a o p 反而不 如o o p 自然,所以a o p 只是o o p 在某些应用场合的补充而已。并且 a o p 并不能完全解决软件的维护和复用问题,a o p 只是通过分离关注 点,来实现软件模块之间的松散耦合,从而提高软件的可维护性和可复 用性,可以说是在这点上继o o p 后的进一步改进。 2 2 3 关注点的有效分离 a o p 是一种新的程序设计方法,专注于软件系统的关注点分离,基 本目标是横切关注点的有效分离。通过运用a s p e c t 这种程序设计单元, 允许开发者使用结构化的设计和代码,更加自然的反映开发者对待实现 系统的认识方式,达到使横切关注点局部化、模块化、结构化的目的, 避免面向对象软件开发方法导致的横切关注点弥漫于整个系统中的现 象,克服了支配性分解的专制性的弊端。同时在运行时织入模块的能力, 极大地改善了软件系统的可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年省直辖行政单位辅警协警招聘考试真题及答案详解一套
- 2025年潮州辅警招聘考试真题及答案详解(历年真题)
- 2025年黄石辅警协警招聘考试备考题库附答案详解(完整版)
- 2025年海西州辅警协警招聘考试备考题库及完整答案详解一套
- 2025年铁岭辅警协警招聘考试真题及一套答案详解
- 2025年铜陵辅警招聘考试题库附答案详解(达标题)
- 2025年雅安辅警招聘考试真题及1套完整答案详解
- 2025年阿勒泰辅警招聘考试题库含答案详解(突破训练)
- 2025年深圳辅警招聘考试题库附答案详解(综合卷)
- 2025年黔西南州辅警协警招聘考试真题附答案详解(研优卷)
- 重症医学科个案护理查房
- 监督式机器学习在食品霉菌毒素检测中的应用研究进展
- 尊享会员合同:全方位权益保障协议
- 混动汽车热管理系统优化
- 肾内科医生进修总结汇报
- 新版煤矿重大事故隐患判定标准应急管理部令第4号解读
- CRRT的枸橼酸抗凝(ICU)培训课件
- 防沙治沙施工设计方案
- 银行运营主管
- 鸡颈部皮下注射培训
- 外墙保温简单安全免责协议书(2篇)
评论
0/150
提交评论