AOP技术研究及其在软件开发中的应用_第1页
AOP技术研究及其在软件开发中的应用_第2页
AOP技术研究及其在软件开发中的应用_第3页
AOP技术研究及其在软件开发中的应用_第4页
AOP技术研究及其在软件开发中的应用_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

摘要PAGE1摘要软件工程的主要目标是改善软件质量,减少软件产品的成本,便于维护和进化。为了实现这些目标,软件工程师们不断寻找开发技术和方法,以减少软件的复杂度,提高可理解性和可重用性,同时促进演化。尽管在软件工程领域内已经有许多好的研究成果,但仍然存在一些问题使得软件工程复杂化。软件的易理解性会随着时间而降低,软件产品只具有有限的重用性,或重用起来很困难,在不同的制品之间的可跟踪性也是受限的。目前的软件开发方法己经不能很好处理横切关注点的模块化问题,所以就导致面向方面编程AOP(Aspect-OrientedProgramming)和面向方面的软件开发方法AOSD(Aspect-OrientedSoftwareDevelopment)的出现。面向方面编程是一种支持分离横切关注点的技术,表达了更高层次的抽象,能更有效地模块化系统的横切关注点。面向方面软件开发方法是贯穿于需求分析、系统分析、实现和测试全过程的面向软件开发的整体方法。本文将讨论AOP技术及其在软件开发过程中的应用。本文在借鉴国内外相关研究成果的基础上,重点研究基于用例的面向方面软件开发方法,引入面向方面用例建模,介绍如何基于用例捕获关注点和实现关注点分离,还尝试将研究的内容应用一个远程教育系统中。本文主要要完成的工作如下:首先,本文将介绍了课题的研究背景、对面向方面的国内外研究现状进行总结和剖析,提出了本课题的主要研究内容。其次,介绍AOP技术发展、AOP技术基本概念,同时介绍AOP程序开发的步骤,并对AOP技术及其支持工具的语言机制进行比较。接着,分析目前开发软件的方法及存在的不足,同时引入面向方面软件开发方法(AOSD),介绍其基本思想,提出一种基于用例的过程模型,介绍AOSD的发展现状,还阐述AOSD的优点及存在的问题。然后,AOSD建模研究,介绍UML建模语言及其扩展机制,引入面向方面用例建模,介绍如何基于用例捕获关注点和实现关注点分离。最后是尝试将面向方面软件开发方法和相关技术引入到一个系统的开发过程中,给出了一个应用的过程,特别是针对异常处理、日志管理和权限验证方面进行了分析。关键字:AOP,关注点,AOSD,UML建模语言,面向方面用例建模广东工业大学工程硕士学位论文AbstractPAGEVIIIAbstractThemajorgoalofSoftwareEngineeringistoimprovesoftwarequalityandreducethecostofsoftwareproductsforthemaintenanceandevolution.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目录目录TOC\o"1-3"\h\z第一章绪论 11.1选题背景和研究意义 11.2国内外研究状况的分析 21.3论文的组织 3第二章AOP技术研究 42.1AOP技术发展 42.1.1现有软件技术的不足 42.1.2AOP的出现 62.1.3AOP与OOP的比较 92.2AOP的基本概念 92.2.1连接点 92.2.2切入点 102.2.3通知 102.2.4类型间声明 112.2.5方面 122.2.6编织 132.3AOP程序设计的步骤 142.4AOP支持工具的比较 152.4.1语法的区别 152.4.2连接点模型的区别 162.4.3编织方式的区别 172.4.4AspectJ的特点 182.5本章小结 19第三章面向方面软件开发方法(AOSD)研究 203.1AOSD基本思想 203.2基于用例的AOSD过程模型 213.2.1需求分析阶段 223.2.2系统分析和设计阶段 223.2.3系统实现阶段 223.2.4系统测试阶段 233.3AOSD的发展现状 233.4AOSD优点 243.5AOSD存在的问题 253.6本章小结 25第四章AOSD建模研究 264.1统一建模语言UML及其扩展机制 264.1.1UML概述 264.1.2UML在软件开发中的应用 274.1.3UML的扩展机制 284.1.4扩展UML支持AOP 294.2面向方面用例建模 324.2.1用例技术和方面技术的结合 324.2.2基于用例捕获关注点并建模 344.2.3基于用例模块实现关注点分离 354.3本章小结 38第五章面向方面系统开发的案例应用 395.1远程教育系统概述 395.2需求阶段 395.3系统分析和设计阶段 425.4系统实现阶段 475.4.1权限验证方面 475.4.2日志记录方面 485.5本章小结 50结论与展望 51参考文献 52攻读学位期间发表的论文 55独创性声明 56致谢 57ContentsContentsTOC\o"1-3"\h\zChapter1Introduction 11.1Thebackgroundandsignificanceofthepaper 11.2TheanalysisofDomesticandInternationalResearchpresentcondition 21.3论文的组织 3Chapter2Arrangementofthepaper 42.1ThedevelopmentofAOPtechnology 42.1.1Theshortcomingsofavailablesoftwaretechnology 42.1.2TheappearanceofAOP 62.1.3ThecomparisionofAOPandOOP 92.2ThebasisconceptofAOP 92.2.1Joinpoint 92.2.2Pointcut 102.2.3Advice 102.2.4Intertypedeclaration 112.2.5Aspect 122.2.6Weave 132.3TheprogrammingstepsofAOP 142.4ThecomparisionofAOPtools 152.4.1ThedifferenceofSyntax 152.4.2Thedifferenceofjoinpointmodle 162.4.3Thedifferenceofweave 172.4.4ThecharateristicsofAspectJ 182.5ThischapterSummary 19Chapter3TheResearchofAOSD 203.1ThebasisideaofAOSD 203.2Theprocessmodelofuse-caseAOSD 213.2.1RequirementsPhase 223.2.2AnalysisandDesignPhase 223.2.3ImplementationPhase 223.2.4TestingPhase 233.3ThedevelopingstatusofAOSD 233.4TheadvantangeofAOSD 243.5TheproblemofAOSD 253.6Thischaptersummary 25Chapter4TheModelingResearchofAOSD 264.1TheUnifiedModelingLanguageanditsextendingmechanism 264.1.1TheoverviewofUML 264.1.2ThesoftwaredevelopingapplicationofUML 274.1.3TheextendingmechanismofUML 284.1.4SupportAOPforextensionsinUML 294.2Theusecasemodelingofaspect-oriented 324.2.1Thecombinationofusecasesandaspects 324.2.2CapuringandModelingconcernswithusecases 344.2.3Keeptheconcernsseparatedwithuse-casemodules 354.3Thischaptersummary 38Chapter5TheapplicationnofAspect-orientedsystem 395.1TheoverviewoftheRemoteEducationSystem 395.2RequirmentsPhase 395.3AnalysisandDesignPhase 425.4ImplementationPhase 475.4.1AuthenticationAspect 475.4.2LoggingAspect 485.5Thischaptersummary 50ConclusionandOutlook 51References 52PapersPublishedduringtheStudeyforaMaster’sDegree 55OriginalStatement 56Thanks 57第一章绪论第一章绪论随着软件系统规模和复杂性的不断增加,系统各个组件之间的相互影响变得越来越复杂。这些相互影响可能会限制软件的重用性、可扩展性,并使系统的设计和正确性验证变得很困难。为了满足未来的需求,我们不可避免地要对这些系统进行重新设计和构造。本章将阐述面向方面(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技术研究面向方面编程是对系统更高层次的抽象,它提供一种不同以往的机制来模块化系统的横切关注点,面向方面编程方式的提出是人们认知问题能力的提高,是为了解决面向对象所不能解决的问题。针对面向方面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如果将整个模块比喻为一个圆柱体,那么关注点识别过程可以用三棱镜法则来形容,穿越三棱镜的光束(指需求),照射到圆柱体各处,获得不同颜色的光束,最后识别出不同的关注点。如图2-3所示:图2-3关注点识别:三棱镜法则Figure2-3Identifytheconcerns:prismlaw上图识别出来的关注点中,BusinessLogic属于核心关注点,它会调用到Security,Logging,Persistence等横切关注点。publicclassBusinessLogic

{

publicvoidSomeOperation()

{

//验证安全性;Securtity关注点;

//执行前记录日志;Logging关注点;

DoSomething();

//保存逻辑运算后的数据;Persistence关注点;

//执行结束记录日志;Logging关注点;

}

}AOP的目的,就是要将诸如Logging之类的横切关注点从BusinessLogic类中分离出来。利用AOP技术,可以对相关的横切关注点封装,形成单独的“aspect”。这就保证了横切关注点的复用。由于BusinessLogic类中不再包含横切关注点的逻辑代码,为达到调用横切关注点的目的,可以利用横切技术,截取BusinessLogic类中相关方法的消息,例如SomeOperation()方法,然后将这些“aspect”织入到该方法中。例如图2-4所示:图2-4将横切关注点织入到核心关注点中Figure2-4Weavingthecrosscuttingconcernsintocoreconcerns通过利用AOP技术,改变了整个系统的设计方式。在分析系统需求之初,利用AOP的思想,分离出核心关注点和横切关注点。在实现了诸如日志、事务管理、权限控制等横切关注点的通用逻辑后,开发人员就可以专注于核心关注点,将精力投入到解决企业的商业逻辑上来。同时,这些封装好了的横切关注点提供的功能,可以最大限度地复用于商业逻辑的各个部分,既不需要开发人员作特殊的编码,也不会因为修改横切关注点的功能而影响具体的业务功能[13]。2.1.3AOP与OOP的比较OOP是AOP的技术基础,AOP是对OOP的继承和发展,AOP与OOP追求的共同目标都是实现软件进一步解耦、提高软件的利用性、增加软件的可扩展性、减轻开发负担、提高开发效率。接下来,将从不同方面对两者进行比较。可扩展性:指软件系统在需求更改时程序的易更改能力。OOP主要通过提供继承和重载机制来提高软件的可扩展性。AOP通过扩展Aspect或增加Aspect,系统相关的各个部分都随之产生变化。可重用性:指某个应用系统中的元素被应用到其他应用系统的能力。OOP以类机制作为一种抽象的数据类型,提供了比过程化更好的重用性。OOP的重用性对非特定于系统的功能模块有很好的支持,如堆栈的操作和窗口机制的实现。对于不能封装成类的元素,如异常处理等,很难实现重用。AOP使不能封装成类的元素的重用成为可能。易理解性和易维护性:代码缠结问题的存在,使OOP技术在易理解性和易维护性方面都难有很大的提高。统计发现:“如果一个他人写的程序有37处需要改动,对于一个最优秀的软件开发人员,也大概只能找到35个”。对于AOP,对一个Aspect修改可以通过联结器影响到系统相关的各个部分,从而大大提高系统的易维护性。2.2AOP的基本概念下面将简单介绍一下AOP的基本概念,包括连接点、切入点、通知、类型间声明、方面等。2.2.1连接点连接点(joinpoint)是程序运行流程中的一点,可以看成是在程序运行的过程中发生的一个事件(thingsthathappen)。典型的连接点有方法的调用、对象的初始化、域的读写、异常处理的执行等,如表2-1所示。表2-1方面中典型的连接点Table2-1Thetypicaljoinpointofaspect连接点说明方法调用(call)包括类的成员方法的调用,类的构造方法的调用等方法执行(execution)包括类的成员方法的执行,类的构造方法的执行等对象初始化对对象进行初始化(new)操作域成员的读写获得域成员的值,或者改写域成员的值异常处理的执行程序抛出异常后转去的代码的执行通知的执行Aspect中advice定义的代码段的执行进入某些代码段程序运行流入到某些代码段某个条件成立某个条件(表达式表示)成立这里要说明的是调用连接点和执行连接点的区别:执行是指真正的方法体的运行,而调用则是指整个方法要执行所做的一切工作;因此笼统地看,一个方法的调用连接点在执行连接点之前。2.2.2切入点切入点(pointcut)收集程序运行流程中的连接点。或者说切入点是某些连接点的集合,这些连接点或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来。切入点代表了具有某个或某些特征的一类连接点,如“某个类所有方法的调用”、“所有名字含‘set’子串的方法的执行”、“对某个类所有字符串类型的域成员的读取”等。切入点是面向方面理论的重要概念。一般来说,连接点极少单个出现,通常都是以切入点的形式出现在方面中。2.2.3通知通知(advice)定义了当程序到达某些连接点时需要执行的操作。通知通常有三种:before通知、after通知和around通知,分别表示在连接点之前、之后和代替连接点执行的操作,表2-2。通知的作用在于它可以访问在连接点运行时的上下文中的值,因此可以根据情况做出不同的反应。表2-2方面的三种通知Table2-2Thethreeadviceofaspect通知类型通知描述Before通知定义了当程序恰好到达某些连接点之前需要执行的操作After通知定义了当程序恰好到达某些连接点之后需要执行的操作Around通知定义了代替指定连接点原来代码的操作2.2.4类型间声明类型间声明(inter-typedeclaration)是指那些跨越类/构件和它们的层次结构的声明。这些声明可能是横跨多个类的成员声明或者是类之间继承关系的改变。不像通知是动态操作,类型间声明是编译时的静态操作。典型的类型间声明有定义类的成员方法、定义类的域成员、定义类的继承关系、定义异常等(见表2-3)。在类型间声明中对类/构件的定义或层次结构的改变,只在相关的方面中有效:在其他方面或类/构件中则不产生任何作用。也就是说,类型间声明实际上并没有影响到原来的面向对象结构,即没有破坏原来面向对象所定义的内容。表2-3方面中典型的类型间声明Table2-3Thetypicalintertypeofaspect类型间声明例子定义类的成员方法为类Employee增加一个shoStatus()方法定义类的域成员为类Employee增加一个OTTime域定义类的构造方法为类Employee增加一个参数是id号的构造方法定义类的继承关系类的继承:声明类C是类A的子类;接口的实现:声明类M和类N实现了接口X定义需要打包的异常类A抛出的所有I/O异常定义警告和错误警告:当对空字符串读取时提示警告信息“这是空串!”错误:当对空对象进行添加时提示错误信息:“不能增加空记录!”定义方面的优先次序声明方面A比方面B具有更高级的优先级一般说来,使用AOP编程会对现有的类和方法进行扩展。图2-5展示了两个aspect(A1,A2)通过多个joinpoint(虚箭头表示)对三个class(CA–CC)进行了扩展。AA1A2CACBCC图2-5两个aspect对三个类的扩展Figure2-5Thethreeclass’sextensionofthetwoaspect2.2.5方面上文所述的切入点、通知以及类型间声明组成了方面aspect的最核心部分,同时也是方面有别于类的最明显特征。核心部分再加上方面自身的域成员和方法定义,构成了一个完整的方面。换句话说,方面是切入点、通知和类型间声明等的联合体,如图2-6所示。图2-6方面的组成Figure2-6Thecompositionofaspect从结构上看,方面很像面向对象中的类,类是数据对象和数据操作的统一体。表2-4和表2-5分别总结了方面与类的相同点和不同点。表2-4方面与类的相同点Table2-4Thesameofaspectandclass相同点1.都有类型。类是一种类型,方面也是一种类型。2.都可以继承。类可以继承类,方面也可以继承类或者其它方面。3.方面和类一样,可以是抽象的,也可以是具体的。4.与非抽象类可以实例化一样,非抽象方面也可以实例化。5.与类相似,方面可以有静态和非静态的状态(域)和行为(方法)。6.与类相似,方面可以有域、方法和类型作为它的成员。7.非特权方面的成员使用跟类相同的访问规则(Public,Private,Protected)。表2-5方面与类的不同点Table2-5Thedifferenceofaspectandclass不同点方面类封装的关注点横切关注点公共关注点横切点有无通知有无类型间定义有无构造方法无有析构方法无有访问其他类型私有成员特权方面可访问其他类型的私有成员不能2.2.6编织编织(weave)是把特定连接点的实现代码(advice)插入到相应的连接点代码上。通过编织工具,通知会被“插入”到通知对应的连接点的前面、后面或连接点所在的代码中。编织技术主要有两种,一种是静态编织[14],即在系统编译时把方面编织到构件中:另一种时动态编织[15],即在系统运行时把方面加入到构件中。静态编织要求程序员在系统编译前就确定方面的实现代码,而动态编织则可以在系统运行后自由地启用和禁用方面。静态编织对系统性能损耗较少:而动态编织对系统性能损耗相对较多,但运用更灵活,系统性能的损耗可以通过并发处理等方法来弥补。2.3AOP程序设计的步骤AOP采用一种松散耦合的方式来实现独立的关注点,然后再组合这些实现,建立最终的系统。采用AOP所建立的系统是由松散耦合的、模块化实现的横切关注点来搭建的,基于AOP的软件开发方式包括三个步骤:一、对需求规约进行Aspect分解。=1\*GB3①确定哪些功能是组件必须实现的,即提取出核心关注点。=2\*GB3②哪些功能可以以aspect的形式动态加入到系统组件中去,即提取出系统级的横切关注点。二、对标识出的Aspect分别通过程序机制实现。=1\*GB3①构造系统的组件。利用组件语言实现系统的组件。对于OOP语言,这些组件可以是类;对于过程化程序设计语言,这些组件可以是各种函数和API。=2\*GB3②构造系统的aspect。利用一种或多种aspect语言实现aspect。aspect语言必须提供声明aspect的机制。其中包括aspect如何声明、连接点如何定义、aspect代码如何定义aspect的参数化程度等。三、用aspect编织器将所有的单元编排重组在一起,形成最终的可运行系统。=1\*GB3①为组件语言和aspect语言构造相应的语法树;依据aspect中的连接点定义对语法树进行联结;在连接的语法树上生成中间文件或目标代码。=2\*GB3②aspect语言必须提供将aspect代码和基础代码组合编排(weaving)在一起的机制。定义编排语言和规则;解决aspect之间潜在的冲突;为组装和执行建立外部约束。=3\*GB3③aspect语言必须提供生成可运行系统的实现机制。系统的组合是在编译时静态组装还是运行时动态进行;对程序单元分别进行编译的模块化编译机制;对组装结果的验证机制等[17,16]。整个AOP开发步骤如下图2-7所示:横切关注点的实现横切关注点的实现核心关注点的实现关注点分解重新组合需求最终系统图2-7AOP开发步骤Figure2-7ThedevelopmentstepsofAOP2.4AOP支持工具的比较AOP是一种程序设计方法,不是工具或语言。在现实生活中,需要使用AOP的实现语言来应用AOP方法。这类似与OOP方法和其实语言JAVA、C++、C#等语言之间的关系。近年来,涌现了四个主要的支持AOP的工具:AspectJ、AspectWerkz、JbossAOP和SpringAOP[18]。AspectJ[19]:于2001年由XeroxPARC的AOP小组发行,目前由IBM支持。AspectWerkz:于2002年发布,由BEASystems支持。JbossAOP:于2004年作为Jboss应用程序服务器框架的扩展发布。SpringAOP:于2004年作为Spring框架的扩展发布。2.4.1语法的区别AspectJ与其他三种AOP工具的一个重要区别在于AspectJ扩展了Java语法,而其他三个工具都没有改变Java语法。如表2-6所示。表2-6语法的差异Table2-6Thedifferenceofsyntax方面声明类型间声明通知主体切入点配置AspectJ代码.lstinclusionlistAspectWerkzannotation或xmljava方法字符串值aop.xmlJbossAOPjboss-aop.xmlSpringAOPxmlSpringconfig.xml以实现多个类的授权功能为例:AspectJ通过扩展Java语言语法,可以在代码中完成对方面的声明及实现。建立一个Authenticationaspect,在aspect中指明切入点和通知后,AspectJ的编译器将该aspect编译成普通Java类。AspectWerkz既支持基于注释(Annotation)的开发,又支持基于XML样式的开发。注释(Annotation)是J2SE5.0中新增的语言性能,通过注释可以向任意Java结构中附加元数据。AspectWerkz会建立一个普通的Java类Authentication以实现授权功能。JbossAOP基于XML声明aspect,pointcut和advice。通知用拦截器实现,用普通的Java方法拦截业务模块中的方法调用、构造器调用或者域访问,定义要插入的逻辑,然后由JbossAOP框架调用这段拦截行为。AspectWerkz和JbossAOP支持用方面元数据对Java代码进行注释或者在独立的XML文件中对方面进行声明。SpringAOP中完全用XML对方面进行声明。2.4.2连接点模型的区别AOP工具表达连接点的方式决定了连接点的粒度和匹配方式。如表2-7所示。连接点模型是AOP工具的核心,它定义了AOP工具控制横切的粒度。这些AOP工具均采用了连接点(joinpoint)的模型和机制,显式地声明程序的横切结构。表2-7AOP工具的连接点模型Table2-7Thejoinpoint’smodelofAOPtoolsJointpointkindsandkindedpointcutsKindlesspointcutsinvocationinitializationAccessExceptionhandlingControlflowcontainmentconditionalAspectJ{method,constructor,advice}X{call,execution}instance,static,pre-initfieldget/sethandlercflow,cflowbelowwithin,withincodeifAspectWerkzinstance,staticwithin,withincode,hasmethod/fieldwithinJbossAOPinstance(viaadvice)(viaspecifiedcallstack)within,withincode,hasmethod/field,all(viaDynamicCflow)SpringAOPmethodexecution(viaadvice)CflowCustompointcut各个AOP工具具有相同的连接点模型概念,都以pointcut作为匹配连接点的机制,以advice作为指定连接点匹配时执行操作的机制。核心概念的相同使得容易从一项AOP技术转移到另外一项AOP技术[20-23]。2.4.3编织方式的区别根据编织时机的不同,编织方式分为:=1\*GB3①编译时编织(CompileTimeWeaving):由编译器根据编织规则,在源代码级别上把AOP代码与基代码混合起来,然后生成最终可运行的字节码。=2\*GB3②编译后编织(PostCompileTimeWeaving):根据编织规则,把AOP代码和已经编译过的基代码编译生成最终字节码。=3\*GB3③载入时编织(LoadTimeWeaving):在载入基代码时,由定制的类装载器进行编织操作。=4\*GB3④运行时编织(RunTimeWeaving):载入基代码后,在运行时由运行环境负责编织。编译时编织和编译后编织都是在编译期将aspect代码织入原来的基代码,在运行时可以按照确定的行为执行。其优点在于能够在编译期及早发现错误,编译时对生成的字节码进行优化,提升了运行性能。缺点是造成切入点与通知之间的绑定不够灵活。装载时编织在类装载时对字节码进行编织修改,然后加载修改后的类。在类第一次加载完成之后,运行性能与编译时编织相近。当切入点与通知间的绑定关系改变时,不需要重新编译,重新部署就可以实现。AspectJ,AspectWerkz,Jboss和Spring中都提供了装载时编织方式。AspectJ使用一个特殊的类加载器进行编织;Jboss和Spring使用一个框架进行编织。运行时编织在类己经装入后根据需要进行编织,可以在运行期调整切入点与通知间的绑定关系。但会造成性能上的下降。AspectWerkz也支持运行时编织。AOP工具支持纺织方式的区别如表2-8所示。表2-8AOP工具支持纺织方式Table2-8TheweavingwayofAOPtoolsAspectJAspectWerkzJbossAOPSpringAOP编译时纺织支持编译后纺织支持装载时纺织支持支持支持支持装载后纺织支持支持2.4.4AspectJ的特点这些工具采用不同的AOP实现机制,各有优缺点。2005年AspectJ项目和AspectWerkz项目合并,致力于创建一个统一的AOP平台。合作发布的AspectJ5融合了AspectJ和AspectWerkz的优点:既支持AspectJ的语言扩展特性,又支持AspectWerkz原有的基于注释(Annotation)的开发风格,同时也为Java5语言特性提供了AOP支持。与其他AOP工具相比,AspectJ的主要特点是:=1\*GB3①AspectJ的代码风格避免了使用XML风格时的复杂配置,但伴随着语法扩展的巨大代价;=2\*GB3②类Java的简明语法减少了输入错误;=3\*GB3③方面中定义的切入点结构是一级实体,更容易控制;=4\*GB3④用XML进行声明性编程比用Java语言扩展更熟悉;但是在AspectJ中,通知和切入点的绑定缺乏灵活性,而使用XML声明这种绑定关系的AOP工具则支持了绑定的灵活性。2.5本章小结本章首先介绍了面向方面的技术发展,分析现有软件技术的不足,引出AOP技术,并将AOP和OOP进行比较,并详细地介绍了AOP的基本概念和AOP程序开发的步骤,最后对AOP所支持的各种语言工具做详细对比,这些研究为后续的AOP软件开发过程的展开奠定了基础。广东工业大学工程硕士学位论文第三章面向方面软件开发方法(AOSD)研究第三章面向方面软件开发方法(AOSD)研究3.1AOSD基本思想AOSD(Aspect-OrientedSoftwareDevelopment)即面向方面软件开发方法,是面向对象方法的演绎与发展,它提供了一个描述模块横切关注点(系统级关注点)的机制,并能够将横切关注点织入到面向对象的软件系统中,从而实现横切关注点的模块化,这种方法解决了面向对象方法遇到的难题。AOSD现在已经引起了国内外的广泛关注,被《MIT技术评论》杂志评为21世纪十种对人类生活和工作方式产生最具影响力的技术之一[24]。AOSD是随着AOP技术的发展而产生的。AOP是AOSD的一个重要组成部分,也是AOSD形成的基础,在目前AOSD尚处于发展的阶段,AOP也是其最完善的部分。AOSD方法借助AOP技术,在方法论里引入了“方面”(Aspect)来描述横切关注点,并给出了将方面与原系统相合成的技术。AOSD方法根据系统需求分析的结果,分离出系统关注点与一般关注点,对于一般关注点可以根据OOP的方法实现,而对于用OOP方法难以清晰的封装并模块化实现的系统关注点,可以用AOP技术封装为独立的模块。方面的实现与传统的开发方法中模块的实现不同,方面之间是一种弱耦合的关系,各Aspect的开发彼此独立,只有在最后系统组装时刻,才将各方面和主代码编织、融合在一起。这使得软件开发过程中不需考虑各个模块之间的存在的错综复杂的关系,从而在很大程度上降低软件开发和维护的复杂度。AOSD方法的出现,并不是为了取代OOP方法,而是构建在OOP方法的基础上的,是对OOA方法的一种继承与发展,AOSD方法可以更好的描述OOP方法不擅长描述的横跨多个模块的需求或特性,很好的将关注点分离,从而可以模块化地实现横切特性,总之,AOSD方法实现了各构件或模块的弱藕合性,在系统功能设计时,不需要考虑散杂在对象中的关注点,降低了开发和维护的难度,提高了代码的复用粒度。3.2基于用例的AOSD过程模型国内外计算机界对面向方面的软件开发方法的研究才刚刚开始起步,当前主要集中在面向方面的程序设计(AOP)和一般面向方面基本概念上,至于如何识别关注点、如何对关注点进行建模、如何分离方面和非方面仍需要系统化的方法。本文在总结和分析面向方面软件开发实践的基础上,参考软件开发的瀑布模型和喷泉模型[25],借助用例驱动建模,提出一种基于用例的面向方面软件开发过程模型[26,27]。面向方面的软件开发方法主要包括需求分析、系统分析、设计、实现、测试几个阶段,实质为面向对象方法的AOP扩展,要在系统分析中引入方面分解、在系统实现阶段引入关注点实现和方面再组合。细化后其模型如图3-1所示:需求分析需求分析获取需求识别关注点系统分析(用例模型)核心关注点分析(应用用例)横切关注点分析(基础结构用例)架构及其它分析系统设计(设计模型)类设计分解基础用例为可操作行为并规划为方面架构及其它设计系统实现(生成代码)类实现方面实现架构实现合成两种代码分别测试两种代码系统测试图3-1:基于用例AOSD过程模型Figure3-1Thedevelopingprocessmodelofuse-caseAOSD3.2.1需求分析阶段由于AOSD把系统看做是关注点的集合,所以采用AOSD开发系统,需求分析就是明确将要解决的问题,获取系统的关注点,这些关注点包括核心关注点(功能关注)和横切关注点(非功能关注)。所谓的用例指的是系统执行的动作序列,它为特定的用户产生了可观测到的有价值的结果。在关注点中,横切关注点其实就是一个用例。当你识别用例时,其实也就是在识别方面。需要分析阶段主要完成的工作有:确定系统的功能列表:包括功能需求和非功能需求。抽取系统特性,特性指的是系统与其功能的高层描述,它可以是功能性的(指的是系统要完成什么),或者是非功能性的(性能、日志、安全等)。画出系统的用例图,确定用例,将用例分组,将功能需求和非功能需求分配给用例。确定其优先级,必须系统地组织涉众关注点,涉众关注点就是满足系统特性的关注,是程序员关心的东西。3.2.2系统分析和设计阶段分析和设计阶段主要的任务:完成核心关注点的分析和设计;完成横切关注点(基础结构用例)的分析和设计,包括分析基础用例的影响范围,这点关系到后期实现阶段是否把横切关注实现的方面是否都匹配到系统需要被横切的地方;完成架构和其它的分析和设计。分析和设计阶段要完成的另一个任务是用例的描述,根据需求分析阶段确定的需求,分别描述采用用例驱动的开发过程,对系统的两种关注点分别处理,核心关注(应用用例)采用面向对象的方法(类)来处理,而对横切关注(基础结构用例),把它们分解为可操作行为并规划为方面,也就是通过AOP的方法来实现。同时绘制时序图,通过详细的设计信息完成静态模型,最后核对设计是否满足已经确定的所有需求。3.2.3系统实现阶段根据系统时序图编写代码,核心关注点采用面向对象方法实现,横切关注点采用面向方面实现。在各种面向方面编程工具中,AspectJ工具比较成熟和强大,AspectJ是一种基于JAVA的方面语言,它支持独立于JAVA类代码的形式化表示。方面代码的编写是采用动态对象调用图中对联结点的引用来实现的,它提供了一种方面编织器组合来组合方面和类,还以IDE扩展的形式提供了附加开发的支持。本文在最后一章的案例中,将采用此语言作为实现工具。3.2.4系统测试阶段测试阶段主要完成的任务是测试两种代码,然后合成代码。基于用例的软件开发方法很好地分离了基础用例和应用用例,而且系统的实现是一个用例一个用例叠加完成的,所以,实现阶段完成的代码可以很容易的移植到测试阶段。更重要的是,当不同类型的用例保持独立时,整个系统更易于测试,也便于将缺陷隔离出来。测试大体上分为两个阶段进行:第一阶段:采用已有的OOP测试方法测试核心功能代码,这方面的测试技术和测试工具已经相当的完善。对于方面代码而言,现阶段还没有以成熟的工具或技术可以用于测试,目前采用是MOCK对象,脚本语言进行一些简单的方面测试。第二阶段:对合成代码(把方面代码植入到系统)再进行测试。测试完全通过了才算是测试阶段完成[14][26][27]。3.3AOSD的发展现状AOSD目前仍处于技术启动阶段,虽然已经有大量的实用语言的支持,但仍没有得到大规模的实践,很多领域有待于进一步的研究。目前世界各种组织和院校都开展了AOSD的研究工作,比较有代表的是包括每年举行的AOSD国际年会议和AOSD欧洲聪盟。这些研究涉及到面向方面软件开发语言、分析、设计、实现的方法等等。结合本人阅读的资料,总结为以下几个方面:AOP编程语言的研究与开发目前已经有部分支持面向方面概念的编程语言,但存在使用难度大,速度慢,且没相应集成开发环境支持等问题,无法广泛使用,所以这一领域还有待进一步改善和优化,同时最重要的是AOP语义的正确性需要进行严格的验证。面向方面的建模研究面向方面的建模技术是当前AOP技术领域研究的一个热点,统一建模语言(UML)作为可视化(Visualizing)、规范定义(Specifying)、构造(Constructing)和文档化(Documenting)的建模语言,不但是面向对象软件系统分析和设计的必备工具,也是AOSD方法各阶段都要用到的工具。Theme/UML是在UML中引入了对横切关注点的描述与表示方法,进行AOP扩展,以适应面向方面软件开发方法的需要。AOSD在设计模式研究设计模式是对被用来在特定场景下一般设计问题的类和相互通信的对象的描述。用设计模式来实现系统时,编程语言的选择非常重要,它影响着人们理解问题的出发点。对支持AOP的编程语言来说,设计模式的研究也成为研究的一大热点。AOSD在分布式系统中的应用分布式系统是对持久化、分布式、同步性有着特殊要求的系统,这些需求都具有横切行为的特征,如何更好的使用面向方面的思想模块化控制这些行为具有广泛的研究空间。AOSD在嵌入式系统中的应用嵌入式系统是一个有着诸如同步、实时控制、并行计算等多方面要求的系统。嵌入式系统的特点是,在存储容量,CPU速度等各方面存在较严的资源限制,而对性能又有特高要求,如要求实时响应能力强等。AOP的引入必将更好地突破各方面的资源限制,满足各种性能要求。3.4AOSD优点OOSD方法和AOSD方法的相同点,就是从需求分析到系统实现过程中试图对软件进行模块化,降低模块间的耦合度。不同点就是OOP技术成功地对核心关注点实现模块化,并降低模块间的耦合度,而AOP技术可成功地对横切关注点实现模块化,并降低横切模块与核心模块间的耦合度。AOSD的优点具体体现在下面几个方面:(1)更高的模块化AOP提供了一种以最小的耦合单独处理各种关注点的机制,使得横切行为得到了结构化、局部化的处理。横切关注点的有效分离消除了传统程序设计中代码的“分散”和“混乱”,增强了软件开发的模块化程序,提高了系统的可维护性。(2)更易演化AOP模块化单独的“方面”,核心模块与“方面”之间具有“不知觉性”,每个核心关注点的实现绝不知道其它横切关注点的存在,更不知道横切行为发生在自己身上,因此添加新的功能只是增加新的“方面”就可以,而不用改变核心模块,相应的,增加新的模块也使得横切条件的“方面”立即可以对其发挥作用,达到一种紧密演化的效果。(3)更高的重用性AOP允许每一个“方面”作为一个独立分割的模块,与传统实现相比这些模块更松散耦合,系统功能构件设计时,不需要考虑散杂在对象中的关注点,提高了代码的重用。3.5AOSD存在的问题面向方面软件开发方法(AOSD)已经作为一种崭新的软件开发范型,作为一种新技术,目前并没有完全成熟,开发工具还很缺乏,目前主要是基于JAVA的AspectJ,而基于C#和.NET以及其他语言上的开发工具都尚在研究中。关于AOSD分析方法、过程、设计和分解方面的基本原则,如何调试都有待进一步研究。另外,AOSD理论支持方面也有待进一步研究。随着对AOSD方法的不断研究,相信这一方法必然会为业界越来越多的人接受,并逐渐成为主流的软件开发方法。3.6本章小结面向方面软件开发方法作为一种崭新的软件开发范型,受了越来越多软件开发人员的关注。本章详细地介绍AOSD的基本概念,分析了AOSD研究现状,然后着重阐述了AOSD过程模型以及AOSD的优点及存在的问题。第四章AOSD建模研究第四章AOSD建模研究4.1统一建模语言UML及其扩展机制4.1.1UML概述统一建模语言(UnitedModellingLanguage,UML)[28-30]是在统一20世纪80年代后期与90年代初期成长的许多面向对象建模语言的基础上诞生的,1995年形成了“统一方法(UnifiedMethod)”0.8版,1996年成长为“统一建模语言”0.9版。在美国,截至1996年10月,UML获得了工业界,科技界和应用界的广泛支持,己有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月7日,OMG采纳UML1.1作为基于面向对象技术的标准建模语言。2003年6月12日,巴黎的OMG技术会议上,分析和设计专案小组投票通过了UML2.0Superstructure规约。UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程,它是软件工程领域中具有划时代意义的研究成果。它代表了面向对象方法的软件开发技术的发展方向,得到了如IBM,HP,Oracle,Microsoft等大公司的支持,目前己经成为面向对象技术领域内占主导地位的标准建模语言。UML是面向对象分析与设计方法的后继工作,是一种图形化的表示法,用于以图形化方式描述软件概念。凭借它,人们可以以图形化方式描述某个问题域,描述一个构思中的软件设计,或者描述已经完成的软件实现。它包含下列五类图形:(1)用例图。从用户角度描述系统功能,并指出各功能的操作者。(2)静态图(Staticdiagram)。包括类图、对象图和包图。其中类图描述系统中类的静态结构。对象图是类图的实例,几乎使用与类图完全相同的标识。包图用于描述系统的分层结构。(3)行为图(Behaviordiagram)。描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件;而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别活动。(4)交互图(Interactivediagram)。描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的时间顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,强调对象间的上级关系。(5)实现图(Implementationdiagram)。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。配置图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系[31,32]。需要指出的是,UML是标准的建模语言,而不是标准的开发过程。尽管UML的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需要采取不同的开发过程。实际上,UML中所提供标准的图符,相当于音乐五线谱里的乐符,学会看乐符才能看得懂乐谱,才能进一步创造音乐。同样,懂得UML中的图符才能进行系统分析和设计。4.1.2UML在软件开发中的应用UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。此外,UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。UML对面向对象开发方法中以下方面提供支持:(1)需求阶段,通过调查获知用户需要的功能,使用用例来捕获用户需求,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求,形成用例图。(2)系统分析阶段,是

温馨提示

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

评论

0/150

提交评论