AOP技术研究及其在软件开发中的应用 蔡燕敏工程硕士论文.docx
- 文档编号:30221047
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:65
- 大小:383.50KB
AOP技术研究及其在软件开发中的应用 蔡燕敏工程硕士论文.docx
《AOP技术研究及其在软件开发中的应用 蔡燕敏工程硕士论文.docx》由会员分享,可在线阅读,更多相关《AOP技术研究及其在软件开发中的应用 蔡燕敏工程硕士论文.docx(65页珍藏版)》请在冰豆网上搜索。
AOP技术研究及其在软件开发中的应用蔡燕敏工程硕士论文
广东工业大学硕士学位论文
(工程硕士)
AOP技术研究及其在软件开发中的应用
蔡燕敏
二○○八年十一月
分类号:
学校代号:
11911
UDC:
密级:
学号:
2260605053
广东工业大学学位论文
AOP技术研究及其在软件开发中的应用
蔡燕敏
指导教师:
张立臣教授
学科学科门类:
工学
z专业名称:
软件工程
申请学位级别:
硕士
论文提交日期:
2008年10月
论文答辩日期:
2008年11月
学位授予单位:
广东工业大学
ADissertationSubmittedtoGuangdongUniversityofTechnologyfortheDegreeofMasterofEngineering
TheResearchofAspect-OrientedTechnlogyandApplicationofSoftwareDevelopment
Master'sDegree.Candidate:
CaiYanmin
Supervisor:
Prof.ZhangLichen
Nov2008
SchoolofSoftwareEngineering
GaungdongUniversityofTechnology
Guangzhou,Guangdong,P.R.China,510090
摘要
软件工程的主要目标是改善软件质量,减少软件产品的成本,便于维护和进化。
为了实现这些目标,软件工程师们不断寻找开发技术和方法,以减少软件的复杂度,提高可理解性和可重用性,同时促进演化。
尽管在软件工程领域内已经有许多好的研究成果,但仍然存在一些问题使得软件工程复杂化。
软件的易理解性会随着时间而降低,软件产品只具有有限的重用性,或重用起来很困难,在不同的制品之间的可跟踪性也是受限的。
目前的软件开发方法己经不能很好处理横切关注点的模块化问题,所以就导致面向方面编程AOP(Aspect-OrientedProgramming)和面向方面的软件开发方法AOSD(Aspect-OrientedSoftwareDevelopment)的出现。
面向方面编程是一种支持分离横切关注点的技术,表达了更高层次的抽象,能更有效地模块化系统的横切关注点。
面向方面软件开发方法是贯穿于需求分析、系统分析、实现和测试全过程的面向软件开发的整体方法。
本文将讨论AOP技术及其在软件开发过程中的应用。
本文在借鉴国内外相关研究成果的基础上,重点研究基于用例的面向方面软件开发方法,引入面向方面用例建模,介绍如何基于用例捕获关注点和实现关注点分离,还尝试将研究的内容应用一个远程教育系统中。
本文主要要完成的工作如下:
首先,本文将介绍了课题的研究背景、对面向方面的国内外研究现状进行总结和剖析,提出了本课题的主要研究内容。
其次,介绍AOP技术发展、AOP技术基本概念,同时介绍AOP程序开发的步骤,并对AOP技术及其支持工具的语言机制进行比较。
接着,分析目前开发软件的方法及存在的不足,同时引入面向方面软件开发方法(AOSD),介绍其基本思想,提出一种基于用例的过程模型,介绍AOSD的发展现状,还阐述AOSD的优点及存在的问题。
然后,AOSD建模研究,介绍UML建模语言及其扩展机制,引入面向方面用例建模,介绍如何基于用例捕获关注点和实现关注点分离。
最后是尝试将面向方面软件开发方法和相关技术引入到一个系统的开发过程中,给出了一个应用的过程,特别是针对异常处理、日志管理和权限验证方面进行了分析。
关键字:
AOP,关注点,AOSD,UML建模语言,面向方面用例建模
Abstract
ThemajorgoalofSoftwareEngineeringistoimprovesoftwarequalityandreducethecostofsoftwareproductsforthemaintenanceandevolution.Inordertoachievethesegoals,softwareengineerslookforthedevelopingtechnologiesandmethodsconstantlywhichcanreducethecomplexityofthesoftware,improveintelligibilityandreusability,promoteevolutionatthesametime.Althoughthefieldofsoftwareengineeringhasmanygoodresearchresults,buttherearestillsomeissuesmakesoftwareengineeringcomplex.Thesoftware’sunderstandingreducesovertime.Softwareproductshaveonlylimitedreusabilityandareverydifficulttoreuse.Thetraceabilityisalsolimitedbetweendifferentproducts.
Thecurrentmethodofsoftwaredevelopmenthasbeenunabletodealwithcross-cuttingconcernsofthemodular,soledtotheaspect-orientedprogrammingAOP(Aspect-OrientedProgramming)andaspect-orientedsoftwaredevelopmentmethodAOSD(Aspect-OrientedSoftwareDevelopment)appearance.Aspect-orientedprogrammingisatechniqueforseparationofcross-cuttingconcernswithexpressesshigherabstraction.Itismoreeffectivemethodtomodulalizethecross-cuttingconcernsofsoftware.Aspect-orientedsoftwaredevelopmentmethodisawholeprocessthatrunthroughtherequirement,softwaredesign,realizationandsoftwaretesting.ThisarticlewilldiscusstheAOPtechnologyanditsapplicationofsoftwaredevelopment.
Basedonrelevantstudiesinthisfield,thisarticleprimarilystudiestheuse-caseAOSD.Atthesametime,thisarticlewillintroducetheUMLModelingLanguageandtellyouhowtocaptureconcernsbasedonusecaseandachieveseparationofconcerns.Andthenmakeanapplicationprocessusingthestudiedmethodsandtechnologies.Maintasksofthischapter:
Firstofall,thisarticlewillintroducethebackgroundoftheresearch,sumup,analysethereasearchsituation,andputforwardthemajortasksofthisresearch.
Secondly,thisarticlewillintroduceAOPtechnologydevelopment,AOPtechnologybasicconcepts,andwillintroduceAOPdevelopment‘sstepsatthesametime.ThelanguagemechanismofAOPtechnologywillbeanalysedandcompareddeeply.
Then,thisarticlewillanalysetheshortcomingsofcurrentsoftwaredevelopmentmethodsandputforwardtheaspect-orientedsoftwaredevelopmentmethod(AOSD).Thisarticlewillintroduceit’sbasicidea.AndIwillputforwardause-casedevelopmentmodel.Andit’sdevelopingsituation,anditsadvantagesandproblemswillbeintroduced.
Then,studytheAOSDmodeling.ThischapterwillintroducetheUMLModelingLanguage,anditsextentedmechanism.Futhermore,captureconcernsbasedonusecaseandachieveseparationofconcernswillbeintroduced.
Finally,Iwilltrytomakeanapplicationprocessusingaspect-orientedsoftwaredevelopmentmethodsandtechnologies.Analyseparticularlyaspects,suchastheexceptionhandling,logmanagementandauthoritytoverify.
Keywords:
AOP,Concerns,AOSD,UMLModelinglanguage,aspect-orientedmodelingwithusecases
Contents
第一章绪论
随着软件系统规模和复杂性的不断增加,系统各个组件之间的相互影响变得越来越复杂。
这些相互影响可能会限制软件的重用性、可扩展性,并使系统的设计和正确性验证变得很困难。
为了满足未来的需求,我们不可避免地要对这些系统进行重新设计和构造。
本章将阐述面向方面(aspect-oriented)技术的研究背景与研究意义,并概述了国内外的研究现状,最后说明了本论文的组织。
1.1选题背景和研究意义
软件工程的主要目标是改善软件质量,减少软件产品的成本,便于维护和进化。
为了实现这些目标,软件工程师们不断寻找开发技术和方法,以减少软件的复杂度,提高可理解性和可重用性,同时促进演化。
尽管在软件工程领域内已经有许多好的研究成果,但仍然存在一些问题使得软件工程复杂化。
软件的易理解性会随着时间而降低,软件产品只具有有限的重用性,或重用起来很困难,在不同的制品之间的可跟踪性也是受限的。
所有这些不同问题的原因或者是大部分原因在于关注点分离有关的限制和无法完成的需求。
实现软件工程这一目标的能力,主要依赖于保持软件系统中所有关注点的独立能力。
所有现有的软件形式体系通过分解和组合机制,都支持某种程度的关注点分离。
然而,在所有形式体系只提供小规模的、受限的分解和组合机制,这些通常一次只支持一个“主要的”分离纬度。
实现软件工程的主要目标需要支持多纬度分解重叠关注点的并发操作。
目前的软件开发方法己经不能很好处理横切关注点的模块化问题,所以就导致面向方面编程AOP(Aspect-OrientedProgramming)和面向方面的软件开发方法(Aspect-OrientedSoftwareDevelopment,AOSD)的出现。
目前AOP正在逐渐形成一套完整的程序设计思想,各种平台AOP的技术也应运而生。
Java平台是AOP应用最早的,也是目前运用最为成熟的,出现了很多支持AOP的框架如JBossAOP,SpringAOP,AspectzWork和基于Java的扩展语言AspectJ[1],这里列举的四种AOP工具都是基于Java的AOP实现,它们被公认为是走在AOP的最前列。
然而,AOP作为一种新的编程思想和模式仍有待进一步探讨研究,基于AOP设计开发的相关理论目前也很欠缺,AOP的具体实现技术还有很多不成熟的地方,更没有一个真正的AOP语言,所有这些导致AOP距离广泛应用仍然有相当大的距离。
AOP大多数应用仍然处在实验研究阶段,AOP仅仅是作为OOP一个辅助工具在被使用,在系统开发中真正应用的也非常有限,大多数系统都只是应用AOP工具提供的AOP框架实现解决了某些特定的功能。
面向方面软件开发方法作为一种崭新的软件开发方法,必然对软件开发方法注入新的活力和动力。
目前要在方法、过程,技术和工具等各个方面完成AOP的扩展以适应开发的需要,还有很多工作要做。
另外,从发展和完善软件开发技术的角度讲,在越来越复杂化的软件开发领域中进行AOP应用的尝试,获取相关的实践方法和经验,这不仅是对现有AOP思想,理论,技术的一种检验,也有利于AOP的进一步发展和完善。
因此,本课题的研究具有重要的理论意义和实用价值。
1.2国内外研究状况的分析
面向方面编程(AOP)是由施乐公司帕洛阿尔托研究中心(XeroxPARC)的首席科学家、大不列颠哥伦比亚大学教授GregorKiczales等人在1997年的欧洲面向对象编程大会(ECOOP97)上提出的一种编程范式[2],它从编程方法学的角度对横切关注点问题进行了有效的解决,是一种新兴的编程技术。
目前,国外许多大学和研究机构都投入人员对面向方面编程技术进行研究并取得了一定的成果,例如:
(1)加拿大大不列颠哥伦比亚大学的a-kernel项目组将AOP思想引入到操作系统设计中,试图提高操作系统代码的模块性,他们利用AspectC对FreeBSDv3.3操作系统内核作了修改,将操作系统的内存缺页处理作为一个aspect进行处理,收到了很好的效果。
(2)比利时Katholieke大学研发了一种基于aspect的中间件Lasagne,主要用于分布式系统中的服务定制。
采用aspect思想,Lasagne可以在不改变代码的情况下,实现动态程序扩充。
服务作为一种aspect以Wrapper的形式存在,利用运行时联结的思想在运行时被动态选取。
(3)华盛顿大学的FACET(FrameworkforAspectCompositionforanEventChannel)项目组利用AOP方法来实现可定制中间件,他们使用AspectJ开发了一个实时事件信道,该信道和TAO实时事件信道相比,具有更好的模块性、更少的代码以及简单和易于扩展等特点。
许多大公司也已经开始注意到这种新技术的应用,纷纷在各自的产品中支持面向方面编程技术,如JBoss4.0中就提供了一个AOP的框架支持面向方面编程,IBM公司也宣布将把一直停留在理论研究阶段的面向方面软件开发技术应用于商业产品开发[3]。
国内对面向方面编程技术的研究尚处于起步阶段。
目前所查阅到的国内相关参考文献大多都是关于面向方面编程综述之类的文章,而对面向方面软件开发技术的研究是比较少的,而把AOSD应用到实际系统的开发过程是更少的。
目前AOP的研究,主要体现在:
AOP的编程方法,基于AOP的异常处理框架,基于AOP技术的重构方法研究与实现,基于Spring的面向方面编程,AOP在WEB系统、分布式系统、实时系统中应用等等。
随着AOP分析方法和编程技术的成熟,需要一个指南来支持良好工程化的面向方面软件开发。
1.3论文的组织
论文共分为5章。
第一章:
绪论。
介绍了课题的研究背景、对面向方面的国内外研究现状进行总结和剖析,提出了本课题的主要研究内容。
第二章:
介绍AOP技术发展、AOP技术基本概念,同时介绍AOP程序开发的步骤,并对AOP技术及其支持工具的语言工具进行比较。
第三章:
分析目前开发软件的方法及存在的不足,同时引入面向方面软件开发方法(AOSD),介绍其基本思想,提出一种基于用例的过程模型,介绍AOSD的发展现状,还阐述AOSD的优点及存在的问题。
第四章:
AOSD建模研究,介绍UML建模语言及其扩展机制,引入面向方面用例建模,介绍如何基于用例捕获关注点和实现关注点分离。
第五章:
尝试将面向方面软件开发方法和相关技术引入到一个系统的开发过程中,给出了一个应用的过程,特别是针对异常处理、日志管理和权限验证方面进行了分析。
最后是总结,说明论文所做的工作,并指出今后进一步研究的工作展望和设想。
第二章AOP技术研究
面向方面编程是对系统更高层次的抽象,它提供一种不同以往的机制来模块化系统的横切关注点,面向方面编程方式的提出是人们认知问题能力的提高,是为了解决面向对象所不能解决的问题。
针对面向方面AOP这一新兴的技术,现在已经有了越来越多的研究,面向方面的技术正逐渐成为软件开发方法中最为活跃的领域之一。
本章将对面向方面技术进行综述,并对现有的相关研究进行分析和总结。
2.1AOP技术发展
软件开发的过程就是使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程。
在软件开发的过程中,关注点分离原则贯穿始终。
从软件工程的角度来说,软件开发方法发展的过程也就是达到更好的关注点分离的发展过程。
2.1.1现有软件技术的不足
在软件的开发技术中,先后出现了面向过程的开发方法和面向对象的开发方法。
其中,面向过程开发方法是一种“功能性程序设计”的开发方法,针对特定问题,根据所需功能,制定特定方法进行结构化的软件开发方法。
面向过程开发方法接近于计算机世界的物理实现,将程序分离为数据结构和相应的算法,以变量、函数和过程等单元来对客观世界进行描述,实现了一定程度上的模块化,关注点分离程度不高。
而面向对象(Object-Oriented)开发方法是随着OOP(面向对象编程,Object-OrientedProgramming)向OOD(面向对象设计,Object-OrientedDesign)和OOA(面向对象分析,Object-OrientedAnalyze)的发展而形成的。
面向对象方法相对于面向过程的方法来说有了进一步的抽象提高,采用了类和对象的概念,把变量以及对变量进行操作的函数和过程封装在一起,用这种更高一级的抽象来表达客观世界。
但OOP也存在不可避免的缺陷,当系统非常复杂的时候,对象之间的关联也将趋于复杂,这样在关注点分离,及复用方面仍旧是不理想的。
因此需要一种更高抽象级的关注点分离方法的出现。
近几年来,大量研究人员提出来了一系列有助于克服关注点分离不足而导致大量问题的高级模块化机制。
这些关注点分离的方法有:
适应编程(adaptiveprogramming)[4]、复合过滤(compositionfilters)[5]、生成式编程(generativeprogramming)[6]、多维关注点分离(multi-dimensionalseparationofconcerns)[7]、面向主题编程(subject-orientedprogramming)[8-10]等。
每种方法实现了一个或多个附加维的关注点分离。
但是,从抽象的层次上说,它们集中一个共同的目标,就是对程序中使用分解单元不易模块化的一个或者多个维的关注点进行模块化,以改变传统方法使用一维方法难以实现多维需求的现状。
目前的采用的这两种实现技术只提供了一维方法学实现系统的关注点,该单一维度一般是核心需求和关注点的模块化实现,其他类型的需求也被迫和该主导维度一致。
问题空间是n维的,而解空间是一维的。
这种失配必然导致需求和实现之间的失配。
如图2-1所示,源程序就会变成一些为不同关注目的而编制的指令的缠结混乱物。
(a)问题空间(b)解空间
图2-1问题空间与解空间的匹配[11]
Figure2-1Thematchofproblemspaceandsolutionspace
缠结现象是现有软件系统中许多不必要的复杂性的核心。
它增加了功能构件之间的依赖性,分散了构件原来假定要做的事情,提供了许多程序设计出错的机会,使得一些功能构件难以复用,源代码难以开发、理解和发展。
2.1.2AOP的出现
经过近几年来大量的研究,一种能有效解决模块化关注点的机制出现了,那就是AOP。
AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。
OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。
当需要为分散的对象引入公共行为的时候,OOP则显得无能为力。
也就是说,OOP允许定义从上到下的关系,但并不适合定义从左到右的关系。
例如日志功能。
日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。
对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。
这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。
所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
使用“横切”技术,AOP把软件系统分为两个部分:
核心关注点和横切关注点。
业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。
横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。
比如权限认证、日志、事务处理。
AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
正如Avanade公司的高级方案构架师AdamMagee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离[12]。
”图2-2显示了由不同模块实现的一组关注点组成的一个系统。
图2-2一个典型应用系统中的关注点
Figure2-2Theconcernsofatypicalapplication
如果将整个模块比喻为一个圆柱体,那么关注点识别过程可以用三棱镜法则来形容,穿越三棱镜的光束(指需求),照
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AOP技术研究及其在软件开发中的应用 蔡燕敏工程硕士论文 AOP 技术研究 及其 软件 开发 中的 应用 蔡燕敏 工程硕士 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)