




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
摘要PAGE1摘要軟件工程的主要目標(biāo)是改善軟件質(zhì)量,減少軟件產(chǎn)品的成本,便于維護(hù)和進(jìn)化。為了實(shí)現(xiàn)這些目標(biāo),軟件工程師們不斷尋找開發(fā)技術(shù)和方法,以減少軟件的復(fù)雜度,提高可理解性和可重用性,同時(shí)促進(jìn)演化。盡管在軟件工程領(lǐng)域內(nèi)已經(jīng)有許多好的研究成果,但仍然存在一些問題使得軟件工程復(fù)雜化。軟件的易理解性會隨著時(shí)間而降低,軟件產(chǎn)品只具有有限的重用性,或重用起來很困難,在不同的制品之間的可跟蹤性也是受限的。目前的軟件開發(fā)方法己經(jīng)不能很好處理橫切關(guān)注點(diǎn)的模塊化問題,所以就導(dǎo)致面向方面編程AOP(Aspect-OrientedProgramming)和面向方面的軟件開發(fā)方法AOSD(Aspect-OrientedSoftwareDevelopment)的出現(xiàn)。面向方面編程是一種支持分離橫切關(guān)注點(diǎn)的技術(shù),表達(dá)了更高層次的抽象,能更有效地模塊化系統(tǒng)的橫切關(guān)注點(diǎn)。面向方面軟件開發(fā)方法是貫穿于需求分析、系統(tǒng)分析、實(shí)現(xiàn)和測試全過程的面向軟件開發(fā)的整體方法。本文將討論AOP技術(shù)及其在軟件開發(fā)過程中的應(yīng)用。本文在借鑒國內(nèi)外相關(guān)研究成果的基礎(chǔ)上,重點(diǎn)研究基于用例的面向方面軟件開發(fā)方法,引入面向方面用例建模,介紹如何基于用例捕獲關(guān)注點(diǎn)和實(shí)現(xiàn)關(guān)注點(diǎn)分離,還嘗試將研究的內(nèi)容應(yīng)用一個(gè)遠(yuǎn)程教育系統(tǒng)中。本文主要要完成的工作如下:首先,本文將介紹了課題的研究背景、對面向方面的國內(nèi)外研究現(xiàn)狀進(jìn)行總結(jié)和剖析,提出了本課題的主要研究內(nèi)容。其次,介紹AOP技術(shù)發(fā)展、AOP技術(shù)基本概念,同時(shí)介紹AOP程序開發(fā)的步驟,并對AOP技術(shù)及其支持工具的語言機(jī)制進(jìn)行比較。接著,分析目前開發(fā)軟件的方法及存在的不足,同時(shí)引入面向方面軟件開發(fā)方法(AOSD),介紹其基本思想,提出一種基于用例的過程模型,介紹AOSD的發(fā)展現(xiàn)狀,還闡述AOSD的優(yōu)點(diǎn)及存在的問題。然后,AOSD建模研究,介紹UML建模語言及其擴(kuò)展機(jī)制,引入面向方面用例建模,介紹如何基于用例捕獲關(guān)注點(diǎn)和實(shí)現(xiàn)關(guān)注點(diǎn)分離。最后是嘗試將面向方面軟件開發(fā)方法和相關(guān)技術(shù)引入到一個(gè)系統(tǒng)的開發(fā)過程中,給出了一個(gè)應(yīng)用的過程,特別是針對異常處理、日志管理和權(quán)限驗(yàn)證方面進(jìn)行了分析。關(guān)鍵字:AOP,關(guān)注點(diǎn),AOSD,UML建模語言,面向方面用例建模廣東工業(yè)大學(xué)工程碩士學(xué)位論文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國內(nèi)外研究狀況的分析 21.3論文的組織 3第二章AOP技術(shù)研究 42.1AOP技術(shù)發(fā)展 42.1.1現(xiàn)有軟件技術(shù)的不足 42.1.2AOP的出現(xiàn) 62.1.3AOP與OOP的比較 92.2AOP的基本概念 92.2.1連接點(diǎn) 92.2.2切入點(diǎn) 102.2.3通知 102.2.4類型間聲明 112.2.5方面 122.2.6編織 132.3AOP程序設(shè)計(jì)的步驟 142.4AOP支持工具的比較 152.4.1語法的區(qū)別 152.4.2連接點(diǎn)模型的區(qū)別 162.4.3編織方式的區(qū)別 172.4.4AspectJ的特點(diǎn) 182.5本章小結(jié) 19第三章面向方面軟件開發(fā)方法(AOSD)研究 203.1AOSD基本思想 203.2基于用例的AOSD過程模型 213.2.1需求分析階段 223.2.2系統(tǒng)分析和設(shè)計(jì)階段 223.2.3系統(tǒng)實(shí)現(xiàn)階段 223.2.4系統(tǒng)測試階段 233.3AOSD的發(fā)展現(xiàn)狀 233.4AOSD優(yōu)點(diǎn) 243.5AOSD存在的問題 253.6本章小結(jié) 25第四章AOSD建模研究 264.1統(tǒng)一建模語言UML及其擴(kuò)展機(jī)制 264.1.1UML概述 264.1.2UML在軟件開發(fā)中的應(yīng)用 274.1.3UML的擴(kuò)展機(jī)制 284.1.4擴(kuò)展UML支持AOP 294.2面向方面用例建模 324.2.1用例技術(shù)和方面技術(shù)的結(jié)合 324.2.2基于用例捕獲關(guān)注點(diǎn)并建模 344.2.3基于用例模塊實(shí)現(xiàn)關(guān)注點(diǎn)分離 354.3本章小結(jié) 38第五章面向方面系統(tǒng)開發(fā)的案例應(yīng)用 395.1遠(yuǎn)程教育系統(tǒng)概述 395.2需求階段 395.3系統(tǒng)分析和設(shè)計(jì)階段 425.4系統(tǒng)實(shí)現(xiàn)階段 475.4.1權(quán)限驗(yàn)證方面 475.4.2日志記錄方面 485.5本章小結(jié) 50結(jié)論與展望 51參考文獻(xiàn) 52攻讀學(xué)位期間發(fā)表的論文 55獨(dú)創(chuàng)性聲明 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第一章緒論第一章緒論隨著軟件系統(tǒng)規(guī)模和復(fù)雜性的不斷增加,系統(tǒng)各個(gè)組件之間的相互影響變得越來越復(fù)雜。這些相互影響可能會限制軟件的重用性、可擴(kuò)展性,并使系統(tǒng)的設(shè)計(jì)和正確性驗(yàn)證變得很困難。為了滿足未來的需求,我們不可避免地要對這些系統(tǒng)進(jìn)行重新設(shè)計(jì)和構(gòu)造。本章將闡述面向方面(aspect-oriented)技術(shù)的研究背景與研究意義,并概述了國內(nèi)外的研究現(xiàn)狀,最后說明了本論文的組織。1.1選題背景和研究意義軟件工程的主要目標(biāo)是改善軟件質(zhì)量,減少軟件產(chǎn)品的成本,便于維護(hù)和進(jìn)化。為了實(shí)現(xiàn)這些目標(biāo),軟件工程師們不斷尋找開發(fā)技術(shù)和方法,以減少軟件的復(fù)雜度,提高可理解性和可重用性,同時(shí)促進(jìn)演化。盡管在軟件工程領(lǐng)域內(nèi)已經(jīng)有許多好的研究成果,但仍然存在一些問題使得軟件工程復(fù)雜化。軟件的易理解性會隨著時(shí)間而降低,軟件產(chǎn)品只具有有限的重用性,或重用起來很困難,在不同的制品之間的可跟蹤性也是受限的。所有這些不同問題的原因或者是大部分原因在于關(guān)注點(diǎn)分離有關(guān)的限制和無法完成的需求。實(shí)現(xiàn)軟件工程這一目標(biāo)的能力,主要依賴于保持軟件系統(tǒng)中所有關(guān)注點(diǎn)的獨(dú)立能力。所有現(xiàn)有的軟件形式體系通過分解和組合機(jī)制,都支持某種程度的關(guān)注點(diǎn)分離。然而,在所有形式體系只提供小規(guī)模的、受限的分解和組合機(jī)制,這些通常一次只支持一個(gè)“主要的”分離緯度。實(shí)現(xiàn)軟件工程的主要目標(biāo)需要支持多緯度分解重疊關(guān)注點(diǎn)的并發(fā)操作。目前的軟件開發(fā)方法己經(jīng)不能很好處理橫切關(guān)注點(diǎn)的模塊化問題,所以就導(dǎo)致面向方面編程AOP(Aspect-OrientedProgramming)和面向方面的軟件開發(fā)方法(Aspect-OrientedSoftwareDevelopment,AOSD)的出現(xiàn)。目前AOP正在逐漸形成一套完整的程序設(shè)計(jì)思想,各種平臺AOP的技術(shù)也應(yīng)運(yùn)而生。Java平臺是AOP應(yīng)用最早的,也是目前運(yùn)用最為成熟的,出現(xiàn)了很多支持AOP的框架如JBossAOP,SpringAOP,AspectzWork和基于Java的擴(kuò)展語言AspectJ[1],這里列舉的四種AOP工具都是基于Java的AOP實(shí)現(xiàn),它們被公認(rèn)為是走在AOP的最前列。然而,AOP作為一種新的編程思想和模式仍有待進(jìn)一步探討研究,基于AOP設(shè)計(jì)開發(fā)的相關(guān)理論目前也很欠缺,AOP的具體實(shí)現(xiàn)技術(shù)還有很多不成熟的地方,更沒有一個(gè)真正的AOP語言,所有這些導(dǎo)致AOP距離廣泛應(yīng)用仍然有相當(dāng)大的距離。AOP大多數(shù)應(yīng)用仍然處在實(shí)驗(yàn)研究階段,AOP僅僅是作為OOP一個(gè)輔助工具在被使用,在系統(tǒng)開發(fā)中真正應(yīng)用的也非常有限,大多數(shù)系統(tǒng)都只是應(yīng)用AOP工具提供的AOP框架實(shí)現(xiàn)解決了某些特定的功能。面向方面軟件開發(fā)方法作為一種嶄新的軟件開發(fā)方法,必然對軟件開發(fā)方法注入新的活力和動力。目前要在方法、過程,技術(shù)和工具等各個(gè)方面完成AOP的擴(kuò)展以適應(yīng)開發(fā)的需要,還有很多工作要做。另外,從發(fā)展和完善軟件開發(fā)技術(shù)的角度講,在越來越復(fù)雜化的軟件開發(fā)領(lǐng)域中進(jìn)行AOP應(yīng)用的嘗試,獲取相關(guān)的實(shí)踐方法和經(jīng)驗(yàn),這不僅是對現(xiàn)有AOP思想,理論,技術(shù)的一種檢驗(yàn),也有利于AOP的進(jìn)一步發(fā)展和完善。因此,本課題的研究具有重要的理論意義和實(shí)用價(jià)值。1.2國內(nèi)外研究狀況的分析面向方面編程(AOP)是由施樂公司帕洛阿爾托研究中心(XeroxPARC)的首席科學(xué)家、大不列顛哥倫比亞大學(xué)教授GregorKiczales等人在1997年的歐洲面向?qū)ο缶幊檀髸‥COOP97)上提出的一種編程范式[2],它從編程方法學(xué)的角度對橫切關(guān)注點(diǎn)問題進(jìn)行了有效的解決,是一種新興的編程技術(shù)。目前,國外許多大學(xué)和研究機(jī)構(gòu)都投入人員對面向方面編程技術(shù)進(jìn)行研究并取得了一定的成果,例如:(1)加拿大大不列顛哥倫比亞大學(xué)的a-kernel項(xiàng)目組將AOP思想引入到操作系統(tǒng)設(shè)計(jì)中,試圖提高操作系統(tǒng)代碼的模塊性,他們利用AspectC對FreeBSDv3.3操作系統(tǒng)內(nèi)核作了修改,將操作系統(tǒng)的內(nèi)存缺頁處理作為一個(gè)aspect進(jìn)行處理,收到了很好的效果。(2)比利時(shí)Katholieke大學(xué)研發(fā)了一種基于aspect的中間件Lasagne,主要用于分布式系統(tǒng)中的服務(wù)定制。采用aspect思想,Lasagne可以在不改變代碼的情況下,實(shí)現(xiàn)動態(tài)程序擴(kuò)充。服務(wù)作為一種aspect以Wrapper的形式存在,利用運(yùn)行時(shí)聯(lián)結(jié)的思想在運(yùn)行時(shí)被動態(tài)選取。(3)華盛頓大學(xué)的FACET(FrameworkforAspectCompositionforanEventChannel)項(xiàng)目組利用AOP方法來實(shí)現(xiàn)可定制中間件,他們使用AspectJ開發(fā)了一個(gè)實(shí)時(shí)事件信道,該信道和TAO實(shí)時(shí)事件信道相比,具有更好的模塊性、更少的代碼以及簡單和易于擴(kuò)展等特點(diǎn)。許多大公司也已經(jīng)開始注意到這種新技術(shù)的應(yīng)用,紛紛在各自的產(chǎn)品中支持面向方面編程技術(shù),如JBoss4.0中就提供了一個(gè)AOP的框架支持面向方面編程,IBM公司也宣布將把一直停留在理論研究階段的面向方面軟件開發(fā)技術(shù)應(yīng)用于商業(yè)產(chǎn)品開發(fā)[3]。國內(nèi)對面向方面編程技術(shù)的研究尚處于起步階段。目前所查閱到的國內(nèi)相關(guān)參考文獻(xiàn)大多都是關(guān)于面向方面編程綜述之類的文章,而對面向方面軟件開發(fā)技術(shù)的研究是比較少的,而把AOSD應(yīng)用到實(shí)際系統(tǒng)的開發(fā)過程是更少的。目前AOP的研究,主要體現(xiàn)在:AOP的編程方法,基于AOP的異常處理框架,基于AOP技術(shù)的重構(gòu)方法研究與實(shí)現(xiàn),基于Spring的面向方面編程,AOP在WEB系統(tǒng)、分布式系統(tǒng)、實(shí)時(shí)系統(tǒng)中應(yīng)用等等。隨著AOP分析方法和編程技術(shù)的成熟,需要一個(gè)指南來支持良好工程化的面向方面軟件開發(fā)。1.3論文的組織論文共分為5章。第一章:緒論。介紹了課題的研究背景、對面向方面的國內(nèi)外研究現(xiàn)狀進(jìn)行總結(jié)和剖析,提出了本課題的主要研究內(nèi)容。第二章:介紹AOP技術(shù)發(fā)展、AOP技術(shù)基本概念,同時(shí)介紹AOP程序開發(fā)的步驟,并對AOP技術(shù)及其支持工具的語言工具進(jìn)行比較。第三章:分析目前開發(fā)軟件的方法及存在的不足,同時(shí)引入面向方面軟件開發(fā)方法(AOSD),介紹其基本思想,提出一種基于用例的過程模型,介紹AOSD的發(fā)展現(xiàn)狀,還闡述AOSD的優(yōu)點(diǎn)及存在的問題。第四章:AOSD建模研究,介紹UML建模語言及其擴(kuò)展機(jī)制,引入面向方面用例建模,介紹如何基于用例捕獲關(guān)注點(diǎn)和實(shí)現(xiàn)關(guān)注點(diǎn)分離。第五章:嘗試將面向方面軟件開發(fā)方法和相關(guān)技術(shù)引入到一個(gè)系統(tǒng)的開發(fā)過程中,給出了一個(gè)應(yīng)用的過程,特別是針對異常處理、日志管理和權(quán)限驗(yàn)證方面進(jìn)行了分析。最后是總結(jié),說明論文所做的工作,并指出今后進(jìn)一步研究的工作展望和設(shè)想。第二章AOP技術(shù)研究第二章AOP技術(shù)研究面向方面編程是對系統(tǒng)更高層次的抽象,它提供一種不同以往的機(jī)制來模塊化系統(tǒng)的橫切關(guān)注點(diǎn),面向方面編程方式的提出是人們認(rèn)知問題能力的提高,是為了解決面向?qū)ο笏荒芙鉀Q的問題。針對面向方面AOP這一新興的技術(shù),現(xiàn)在已經(jīng)有了越來越多的研究,面向方面的技術(shù)正逐漸成為軟件開發(fā)方法中最為活躍的領(lǐng)域之一。本章將對面向方面技術(shù)進(jìn)行綜述,并對現(xiàn)有的相關(guān)研究進(jìn)行分析和總結(jié)。2.1AOP技術(shù)發(fā)展軟件開發(fā)的過程就是使用各種計(jì)算機(jī)語言將人們關(guān)心的現(xiàn)實(shí)世界映射到計(jì)算機(jī)世界的過程。在軟件開發(fā)的過程中,關(guān)注點(diǎn)分離原則貫穿始終。從軟件工程的角度來說,軟件開發(fā)方法發(fā)展的過程也就是達(dá)到更好的關(guān)注點(diǎn)分離的發(fā)展過程。2.1.1現(xiàn)有軟件技術(shù)的不足在軟件的開發(fā)技術(shù)中,先后出現(xiàn)了面向過程的開發(fā)方法和面向?qū)ο蟮拈_發(fā)方法。其中,面向過程開發(fā)方法是一種“功能性程序設(shè)計(jì)”的開發(fā)方法,針對特定問題,根據(jù)所需功能,制定特定方法進(jìn)行結(jié)構(gòu)化的軟件開發(fā)方法。面向過程開發(fā)方法接近于計(jì)算機(jī)世界的物理實(shí)現(xiàn),將程序分離為數(shù)據(jù)結(jié)構(gòu)和相應(yīng)的算法,以變量、函數(shù)和過程等單元來對客觀世界進(jìn)行描述,實(shí)現(xiàn)了一定程度上的模塊化,關(guān)注點(diǎn)分離程度不高。而面向?qū)ο螅∣bject-Oriented)開發(fā)方法是隨著OOP(面向?qū)ο缶幊蹋琌bject-OrientedProgramming)向OOD(面向?qū)ο笤O(shè)計(jì),Object-OrientedDesign)和OOA(面向?qū)ο蠓治?,Object-OrientedAnalyze)的發(fā)展而形成的。面向?qū)ο蠓椒ㄏ鄬τ诿嫦蜻^程的方法來說有了進(jìn)一步的抽象提高,采用了類和對象的概念,把變量以及對變量進(jìn)行操作的函數(shù)和過程封裝在一起,用這種更高一級的抽象來表達(dá)客觀世界。但OOP也存在不可避免的缺陷,當(dāng)系統(tǒng)非常復(fù)雜的時(shí)候,對象之間的關(guān)聯(lián)也將趨于復(fù)雜,這樣在關(guān)注點(diǎn)分離,及復(fù)用方面仍舊是不理想的。因此需要一種更高抽象級的關(guān)注點(diǎn)分離方法的出現(xiàn)。近幾年來,大量研究人員提出來了一系列有助于克服關(guān)注點(diǎn)分離不足而導(dǎo)致大量問題的高級模塊化機(jī)制。這些關(guān)注點(diǎn)分離的方法有:適應(yīng)編程(adaptiveprogramming)[4]、復(fù)合過濾(compositionfilters)[5]、生成式編程(generativeprogramming)[6]、多維關(guān)注點(diǎn)分離(multi-dimensionalseparationofconcerns)[7]、面向主題編程(subject-orientedprogramming)[8-10]等。每種方法實(shí)現(xiàn)了一個(gè)或多個(gè)附加維的關(guān)注點(diǎn)分離。但是,從抽象的層次上說,它們集中一個(gè)共同的目標(biāo),就是對程序中使用分解單元不易模塊化的一個(gè)或者多個(gè)維的關(guān)注點(diǎn)進(jìn)行模塊化,以改變傳統(tǒng)方法使用一維方法難以實(shí)現(xiàn)多維需求的現(xiàn)狀。目前的采用的這兩種實(shí)現(xiàn)技術(shù)只提供了一維方法學(xué)實(shí)現(xiàn)系統(tǒng)的關(guān)注點(diǎn),該單一維度一般是核心需求和關(guān)注點(diǎn)的模塊化實(shí)現(xiàn),其他類型的需求也被迫和該主導(dǎo)維度一致。問題空間是n維的,而解空間是一維的。這種失配必然導(dǎo)致需求和實(shí)現(xiàn)之間的失配。如圖2-1所示,源程序就會變成一些為不同關(guān)注目的而編制的指令的纏結(jié)混亂物。安全事務(wù)安全事務(wù)業(yè)務(wù)主導(dǎo)維業(yè)務(wù)(a)問題空間(b)解空間圖2-1問題空間與解空間的匹配[11]Figure2-1Thematchofproblemspaceandsolutionspace纏結(jié)現(xiàn)象是現(xiàn)有軟件系統(tǒng)中許多不必要的復(fù)雜性的核心。它增加了功能構(gòu)件之間的依賴性,分散了構(gòu)件原來假定要做的事情,提供了許多程序設(shè)計(jì)出錯(cuò)的機(jī)會,使得一些功能構(gòu)件難以復(fù)用,源代碼難以開發(fā)、理解和發(fā)展。2.1.2AOP的出現(xiàn)經(jīng)過近幾年來大量的研究,一種能有效解決模塊化關(guān)注點(diǎn)的機(jī)制出現(xiàn)了,那就是AOP。AOP(Aspect-OrientedProgramming,面向方面編程),可以說是OOP(Object-OrientedPrograming,面向?qū)ο缶幊蹋┑难a(bǔ)充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結(jié)構(gòu),用以模擬公共行為的一個(gè)集合。當(dāng)需要為分散的對象引入公共行為的時(shí)候,OOP則顯得無能為力。也就是說,OOP允許定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關(guān)系。對于其他類型的代碼,如安全性、異常處理和透明的持續(xù)性也是如此。這種散布在各處的無關(guān)的代碼被稱為橫切(cross-cutting)代碼,在OOP設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用。而AOP技術(shù)則恰恰相反,它利用一種稱為“橫切”的技術(shù),剖解開封裝的對象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護(hù)性。使用“橫切”技術(shù),AOP把軟件系統(tǒng)分為兩個(gè)部分:核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)。業(yè)務(wù)處理的主要流程是核心關(guān)注點(diǎn),與之關(guān)系不大的部分是橫切關(guān)注點(diǎn)。橫切關(guān)注點(diǎn)的一個(gè)特點(diǎn)是,他們經(jīng)常發(fā)生在核心關(guān)注點(diǎn)的多處,而各處都基本相似。比如權(quán)限認(rèn)證、日志、事務(wù)處理。AOP的作用在于分離系統(tǒng)中的各種關(guān)注點(diǎn),將核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)分離開來。正如Avanade公司的高級方案構(gòu)架師AdamMagee所說,AOP的核心思想就是“將應(yīng)用程序中的商業(yè)邏輯同對其提供支持的通用服務(wù)進(jìn)行分離[12]?!眻D2-2顯示了由不同模塊實(shí)現(xiàn)的一組關(guān)注點(diǎn)組成的一個(gè)系統(tǒng)。圖2-2一個(gè)典型應(yīng)用系統(tǒng)中的關(guān)注點(diǎn)Figure2-2Theconcernsofatypicalapplication如果將整個(gè)模塊比喻為一個(gè)圓柱體,那么關(guān)注點(diǎn)識別過程可以用三棱鏡法則來形容,穿越三棱鏡的光束(指需求),照射到圓柱體各處,獲得不同顏色的光束,最后識別出不同的關(guān)注點(diǎn)。如圖2-3所示:圖2-3關(guān)注點(diǎn)識別:三棱鏡法則Figure2-3Identifytheconcerns:prismlaw上圖識別出來的關(guān)注點(diǎn)中,BusinessLogic屬于核心關(guān)注點(diǎn),它會調(diào)用到Security,Logging,Persistence等橫切關(guān)注點(diǎn)。publicclassBusinessLogic
{
publicvoidSomeOperation()
{
//驗(yàn)證安全性;Securtity關(guān)注點(diǎn);
//執(zhí)行前記錄日志;Logging關(guān)注點(diǎn);
DoSomething();
//保存邏輯運(yùn)算后的數(shù)據(jù);Persistence關(guān)注點(diǎn);
//執(zhí)行結(jié)束記錄日志;Logging關(guān)注點(diǎn);
}
}AOP的目的,就是要將諸如Logging之類的橫切關(guān)注點(diǎn)從BusinessLogic類中分離出來。利用AOP技術(shù),可以對相關(guān)的橫切關(guān)注點(diǎn)封裝,形成單獨(dú)的“aspect”。這就保證了橫切關(guān)注點(diǎn)的復(fù)用。由于BusinessLogic類中不再包含橫切關(guān)注點(diǎn)的邏輯代碼,為達(dá)到調(diào)用橫切關(guān)注點(diǎn)的目的,可以利用橫切技術(shù),截取BusinessLogic類中相關(guān)方法的消息,例如SomeOperation()方法,然后將這些“aspect”織入到該方法中。例如圖2-4所示:圖2-4將橫切關(guān)注點(diǎn)織入到核心關(guān)注點(diǎn)中Figure2-4Weavingthecrosscuttingconcernsintocoreconcerns通過利用AOP技術(shù),改變了整個(gè)系統(tǒng)的設(shè)計(jì)方式。在分析系統(tǒng)需求之初,利用AOP的思想,分離出核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)。在實(shí)現(xiàn)了諸如日志、事務(wù)管理、權(quán)限控制等橫切關(guān)注點(diǎn)的通用邏輯后,開發(fā)人員就可以專注于核心關(guān)注點(diǎn),將精力投入到解決企業(yè)的商業(yè)邏輯上來。同時(shí),這些封裝好了的橫切關(guān)注點(diǎn)提供的功能,可以最大限度地復(fù)用于商業(yè)邏輯的各個(gè)部分,既不需要開發(fā)人員作特殊的編碼,也不會因?yàn)樾薷臋M切關(guān)注點(diǎn)的功能而影響具體的業(yè)務(wù)功能[13]。2.1.3AOP與OOP的比較OOP是AOP的技術(shù)基礎(chǔ),AOP是對OOP的繼承和發(fā)展,AOP與OOP追求的共同目標(biāo)都是實(shí)現(xiàn)軟件進(jìn)一步解耦、提高軟件的利用性、增加軟件的可擴(kuò)展性、減輕開發(fā)負(fù)擔(dān)、提高開發(fā)效率。接下來,將從不同方面對兩者進(jìn)行比較??蓴U(kuò)展性:指軟件系統(tǒng)在需求更改時(shí)程序的易更改能力。OOP主要通過提供繼承和重載機(jī)制來提高軟件的可擴(kuò)展性。AOP通過擴(kuò)展Aspect或增加Aspect,系統(tǒng)相關(guān)的各個(gè)部分都隨之產(chǎn)生變化??芍赜眯裕褐改硞€(gè)應(yīng)用系統(tǒng)中的元素被應(yīng)用到其他應(yīng)用系統(tǒng)的能力。OOP以類機(jī)制作為一種抽象的數(shù)據(jù)類型,提供了比過程化更好的重用性。OOP的重用性對非特定于系統(tǒng)的功能模塊有很好的支持,如堆棧的操作和窗口機(jī)制的實(shí)現(xiàn)。對于不能封裝成類的元素,如異常處理等,很難實(shí)現(xiàn)重用。AOP使不能封裝成類的元素的重用成為可能。易理解性和易維護(hù)性:代碼纏結(jié)問題的存在,使OOP技術(shù)在易理解性和易維護(hù)性方面都難有很大的提高。統(tǒng)計(jì)發(fā)現(xiàn):“如果一個(gè)他人寫的程序有37處需要改動,對于一個(gè)最優(yōu)秀的軟件開發(fā)人員,也大概只能找到35個(gè)”。對于AOP,對一個(gè)Aspect修改可以通過聯(lián)結(jié)器影響到系統(tǒng)相關(guān)的各個(gè)部分,從而大大提高系統(tǒng)的易維護(hù)性。2.2AOP的基本概念下面將簡單介紹一下AOP的基本概念,包括連接點(diǎn)、切入點(diǎn)、通知、類型間聲明、方面等。2.2.1連接點(diǎn)連接點(diǎn)(joinpoint)是程序運(yùn)行流程中的一點(diǎn),可以看成是在程序運(yùn)行的過程中發(fā)生的一個(gè)事件(thingsthathappen)。典型的連接點(diǎn)有方法的調(diào)用、對象的初始化、域的讀寫、異常處理的執(zhí)行等,如表2-1所示。表2-1方面中典型的連接點(diǎn)Table2-1Thetypicaljoinpointofaspect連接點(diǎn)說明方法調(diào)用(call)包括類的成員方法的調(diào)用,類的構(gòu)造方法的調(diào)用等方法執(zhí)行(execution)包括類的成員方法的執(zhí)行,類的構(gòu)造方法的執(zhí)行等對象初始化對對象進(jìn)行初始化(new)操作域成員的讀寫獲得域成員的值,或者改寫域成員的值異常處理的執(zhí)行程序拋出異常后轉(zhuǎn)去的代碼的執(zhí)行通知的執(zhí)行Aspect中advice定義的代碼段的執(zhí)行進(jìn)入某些代碼段程序運(yùn)行流入到某些代碼段某個(gè)條件成立某個(gè)條件(表達(dá)式表示)成立這里要說明的是調(diào)用連接點(diǎn)和執(zhí)行連接點(diǎn)的區(qū)別:執(zhí)行是指真正的方法體的運(yùn)行,而調(diào)用則是指整個(gè)方法要執(zhí)行所做的一切工作;因此籠統(tǒng)地看,一個(gè)方法的調(diào)用連接點(diǎn)在執(zhí)行連接點(diǎn)之前。2.2.2切入點(diǎn)切入點(diǎn)(pointcut)收集程序運(yùn)行流程中的連接點(diǎn)?;蛘哒f切入點(diǎn)是某些連接點(diǎn)的集合,這些連接點(diǎn)或是通過邏輯關(guān)系組合起來,或是通過通配、正則表達(dá)式等方式集中起來。切入點(diǎn)代表了具有某個(gè)或某些特征的一類連接點(diǎn),如“某個(gè)類所有方法的調(diào)用”、“所有名字含‘set’子串的方法的執(zhí)行”、“對某個(gè)類所有字符串類型的域成員的讀取”等。切入點(diǎn)是面向方面理論的重要概念。一般來說,連接點(diǎn)極少單個(gè)出現(xiàn),通常都是以切入點(diǎn)的形式出現(xiàn)在方面中。2.2.3通知通知(advice)定義了當(dāng)程序到達(dá)某些連接點(diǎn)時(shí)需要執(zhí)行的操作。通知通常有三種:before通知、after通知和around通知,分別表示在連接點(diǎn)之前、之后和代替連接點(diǎn)執(zhí)行的操作,表2-2。通知的作用在于它可以訪問在連接點(diǎn)運(yùn)行時(shí)的上下文中的值,因此可以根據(jù)情況做出不同的反應(yīng)。表2-2方面的三種通知Table2-2Thethreeadviceofaspect通知類型通知描述Before通知定義了當(dāng)程序恰好到達(dá)某些連接點(diǎn)之前需要執(zhí)行的操作After通知定義了當(dāng)程序恰好到達(dá)某些連接點(diǎn)之后需要執(zhí)行的操作Around通知定義了代替指定連接點(diǎn)原來代碼的操作2.2.4類型間聲明類型間聲明(inter-typedeclaration)是指那些跨越類/構(gòu)件和它們的層次結(jié)構(gòu)的聲明。這些聲明可能是橫跨多個(gè)類的成員聲明或者是類之間繼承關(guān)系的改變。不像通知是動態(tài)操作,類型間聲明是編譯時(shí)的靜態(tài)操作。典型的類型間聲明有定義類的成員方法、定義類的域成員、定義類的繼承關(guān)系、定義異常等(見表2-3)。在類型間聲明中對類/構(gòu)件的定義或?qū)哟谓Y(jié)構(gòu)的改變,只在相關(guān)的方面中有效:在其他方面或類/構(gòu)件中則不產(chǎn)生任何作用。也就是說,類型間聲明實(shí)際上并沒有影響到原來的面向?qū)ο蠼Y(jié)構(gòu),即沒有破壞原來面向?qū)ο笏x的內(nèi)容。表2-3方面中典型的類型間聲明Table2-3Thetypicalintertypeofaspect類型間聲明例子定義類的成員方法為類Employee增加一個(gè)shoStatus()方法定義類的域成員為類Employee增加一個(gè)OTTime域定義類的構(gòu)造方法為類Employee增加一個(gè)參數(shù)是id號的構(gòu)造方法定義類的繼承關(guān)系類的繼承:聲明類C是類A的子類;接口的實(shí)現(xiàn):聲明類M和類N實(shí)現(xiàn)了接口X定義需要打包的異常類A拋出的所有I/O異常定義警告和錯(cuò)誤警告:當(dāng)對空字符串讀取時(shí)提示警告信息“這是空串!”錯(cuò)誤:當(dāng)對空對象進(jìn)行添加時(shí)提示錯(cuò)誤信息:“不能增加空記錄!”定義方面的優(yōu)先次序聲明方面A比方面B具有更高級的優(yōu)先級一般說來,使用AOP編程會對現(xiàn)有的類和方法進(jìn)行擴(kuò)展。圖2-5展示了兩個(gè)aspect(A1,A2)通過多個(gè)joinpoint(虛箭頭表示)對三個(gè)class(CA–CC)進(jìn)行了擴(kuò)展。AA1A2CACBCC圖2-5兩個(gè)aspect對三個(gè)類的擴(kuò)展Figure2-5Thethreeclass’sextensionofthetwoaspect2.2.5方面上文所述的切入點(diǎn)、通知以及類型間聲明組成了方面aspect的最核心部分,同時(shí)也是方面有別于類的最明顯特征。核心部分再加上方面自身的域成員和方法定義,構(gòu)成了一個(gè)完整的方面。換句話說,方面是切入點(diǎn)、通知和類型間聲明等的聯(lián)合體,如圖2-6所示。圖2-6方面的組成Figure2-6Thecompositionofaspect從結(jié)構(gòu)上看,方面很像面向?qū)ο笾械念?,類是?shù)據(jù)對象和數(shù)據(jù)操作的統(tǒng)一體。表2-4和表2-5分別總結(jié)了方面與類的相同點(diǎn)和不同點(diǎn)。表2-4方面與類的相同點(diǎn)Table2-4Thesameofaspectandclass相同點(diǎn)1.都有類型。類是一種類型,方面也是一種類型。2.都可以繼承。類可以繼承類,方面也可以繼承類或者其它方面。3.方面和類一樣,可以是抽象的,也可以是具體的。4.與非抽象類可以實(shí)例化一樣,非抽象方面也可以實(shí)例化。5.與類相似,方面可以有靜態(tài)和非靜態(tài)的狀態(tài)(域)和行為(方法)。6.與類相似,方面可以有域、方法和類型作為它的成員。7.非特權(quán)方面的成員使用跟類相同的訪問規(guī)則(Public,Private,Protected)。表2-5方面與類的不同點(diǎn)Table2-5Thedifferenceofaspectandclass不同點(diǎn)方面類封裝的關(guān)注點(diǎn)橫切關(guān)注點(diǎn)公共關(guān)注點(diǎn)橫切點(diǎn)有無通知有無類型間定義有無構(gòu)造方法無有析構(gòu)方法無有訪問其他類型私有成員特權(quán)方面可訪問其他類型的私有成員不能2.2.6編織編織(weave)是把特定連接點(diǎn)的實(shí)現(xiàn)代碼(advice)插入到相應(yīng)的連接點(diǎn)代碼上。通過編織工具,通知會被“插入”到通知對應(yīng)的連接點(diǎn)的前面、后面或連接點(diǎn)所在的代碼中。編織技術(shù)主要有兩種,一種是靜態(tài)編織[14],即在系統(tǒng)編譯時(shí)把方面編織到構(gòu)件中:另一種時(shí)動態(tài)編織[15],即在系統(tǒng)運(yùn)行時(shí)把方面加入到構(gòu)件中。靜態(tài)編織要求程序員在系統(tǒng)編譯前就確定方面的實(shí)現(xiàn)代碼,而動態(tài)編織則可以在系統(tǒng)運(yùn)行后自由地啟用和禁用方面。靜態(tài)編織對系統(tǒng)性能損耗較少:而動態(tài)編織對系統(tǒng)性能損耗相對較多,但運(yùn)用更靈活,系統(tǒng)性能的損耗可以通過并發(fā)處理等方法來彌補(bǔ)。2.3AOP程序設(shè)計(jì)的步驟AOP采用一種松散耦合的方式來實(shí)現(xiàn)獨(dú)立的關(guān)注點(diǎn),然后再組合這些實(shí)現(xiàn),建立最終的系統(tǒng)。采用AOP所建立的系統(tǒng)是由松散耦合的、模塊化實(shí)現(xiàn)的橫切關(guān)注點(diǎn)來搭建的,基于AOP的軟件開發(fā)方式包括三個(gè)步驟:一、對需求規(guī)約進(jìn)行Aspect分解。=1\*GB3①確定哪些功能是組件必須實(shí)現(xiàn)的,即提取出核心關(guān)注點(diǎn)。=2\*GB3②哪些功能可以以aspect的形式動態(tài)加入到系統(tǒng)組件中去,即提取出系統(tǒng)級的橫切關(guān)注點(diǎn)。二、對標(biāo)識出的Aspect分別通過程序機(jī)制實(shí)現(xiàn)。=1\*GB3①構(gòu)造系統(tǒng)的組件。利用組件語言實(shí)現(xiàn)系統(tǒng)的組件。對于OOP語言,這些組件可以是類;對于過程化程序設(shè)計(jì)語言,這些組件可以是各種函數(shù)和API。=2\*GB3②構(gòu)造系統(tǒng)的aspect。利用一種或多種aspect語言實(shí)現(xiàn)aspect。aspect語言必須提供聲明aspect的機(jī)制。其中包括aspect如何聲明、連接點(diǎn)如何定義、aspect代碼如何定義aspect的參數(shù)化程度等。三、用aspect編織器將所有的單元編排重組在一起,形成最終的可運(yùn)行系統(tǒng)。=1\*GB3①為組件語言和aspect語言構(gòu)造相應(yīng)的語法樹;依據(jù)aspect中的連接點(diǎn)定義對語法樹進(jìn)行聯(lián)結(jié);在連接的語法樹上生成中間文件或目標(biāo)代碼。=2\*GB3②aspect語言必須提供將aspect代碼和基礎(chǔ)代碼組合編排(weaving)在一起的機(jī)制。定義編排語言和規(guī)則;解決aspect之間潛在的沖突;為組裝和執(zhí)行建立外部約束。=3\*GB3③aspect語言必須提供生成可運(yùn)行系統(tǒng)的實(shí)現(xiàn)機(jī)制。系統(tǒng)的組合是在編譯時(shí)靜態(tài)組裝還是運(yùn)行時(shí)動態(tài)進(jìn)行;對程序單元分別進(jìn)行編譯的模塊化編譯機(jī)制;對組裝結(jié)果的驗(yàn)證機(jī)制等[17,16]。整個(gè)AOP開發(fā)步驟如下圖2-7所示:橫切關(guān)注點(diǎn)的實(shí)現(xiàn)橫切關(guān)注點(diǎn)的實(shí)現(xiàn)核心關(guān)注點(diǎn)的實(shí)現(xiàn)關(guān)注點(diǎn)分解重新組合需求最終系統(tǒng)圖2-7AOP開發(fā)步驟Figure2-7ThedevelopmentstepsofAOP2.4AOP支持工具的比較AOP是一種程序設(shè)計(jì)方法,不是工具或語言。在現(xiàn)實(shí)生活中,需要使用AOP的實(shí)現(xiàn)語言來應(yīng)用AOP方法。這類似與OOP方法和其實(shí)語言JAVA、C++、C#等語言之間的關(guān)系。近年來,涌現(xiàn)了四個(gè)主要的支持AOP的工具:AspectJ、AspectWerkz、JbossAOP和SpringAOP[18]。AspectJ[19]:于2001年由XeroxPARC的AOP小組發(fā)行,目前由IBM支持。AspectWerkz:于2002年發(fā)布,由BEASystems支持。JbossAOP:于2004年作為Jboss應(yīng)用程序服務(wù)器框架的擴(kuò)展發(fā)布。SpringAOP:于2004年作為Spring框架的擴(kuò)展發(fā)布。2.4.1語法的區(qū)別AspectJ與其他三種AOP工具的一個(gè)重要區(qū)別在于AspectJ擴(kuò)展了Java語法,而其他三個(gè)工具都沒有改變Java語法。如表2-6所示。表2-6語法的差異Table2-6Thedifferenceofsyntax方面聲明類型間聲明通知主體切入點(diǎn)配置AspectJ代碼.lstinclusionlistAspectWerkzannotation或xmljava方法字符串值aop.xmlJbossAOPjboss-aop.xmlSpringAOPxmlSpringconfig.xml以實(shí)現(xiàn)多個(gè)類的授權(quán)功能為例:AspectJ通過擴(kuò)展Java語言語法,可以在代碼中完成對方面的聲明及實(shí)現(xiàn)。建立一個(gè)Authenticationaspect,在aspect中指明切入點(diǎn)和通知后,AspectJ的編譯器將該aspect編譯成普通Java類。AspectWerkz既支持基于注釋(Annotation)的開發(fā),又支持基于XML樣式的開發(fā)。注釋(Annotation)是J2SE5.0中新增的語言性能,通過注釋可以向任意Java結(jié)構(gòu)中附加元數(shù)據(jù)。AspectWerkz會建立一個(gè)普通的Java類Authentication以實(shí)現(xiàn)授權(quán)功能。JbossAOP基于XML聲明aspect,pointcut和advice。通知用攔截器實(shí)現(xiàn),用普通的Java方法攔截業(yè)務(wù)模塊中的方法調(diào)用、構(gòu)造器調(diào)用或者域訪問,定義要插入的邏輯,然后由JbossAOP框架調(diào)用這段攔截行為。AspectWerkz和JbossAOP支持用方面元數(shù)據(jù)對Java代碼進(jìn)行注釋或者在獨(dú)立的XML文件中對方面進(jìn)行聲明。SpringAOP中完全用XML對方面進(jìn)行聲明。2.4.2連接點(diǎn)模型的區(qū)別AOP工具表達(dá)連接點(diǎn)的方式?jīng)Q定了連接點(diǎn)的粒度和匹配方式。如表2-7所示。連接點(diǎn)模型是AOP工具的核心,它定義了AOP工具控制橫切的粒度。這些AOP工具均采用了連接點(diǎn)(joinpoint)的模型和機(jī)制,顯式地聲明程序的橫切結(jié)構(gòu)。表2-7AOP工具的連接點(diǎn)模型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各個(gè)AOP工具具有相同的連接點(diǎn)模型概念,都以pointcut作為匹配連接點(diǎn)的機(jī)制,以advice作為指定連接點(diǎn)匹配時(shí)執(zhí)行操作的機(jī)制。核心概念的相同使得容易從一項(xiàng)AOP技術(shù)轉(zhuǎn)移到另外一項(xiàng)AOP技術(shù)[20-23]。2.4.3編織方式的區(qū)別根據(jù)編織時(shí)機(jī)的不同,編織方式分為:=1\*GB3①編譯時(shí)編織(CompileTimeWeaving):由編譯器根據(jù)編織規(guī)則,在源代碼級別上把AOP代碼與基代碼混合起來,然后生成最終可運(yùn)行的字節(jié)碼。=2\*GB3②編譯后編織(PostCompileTimeWeaving):根據(jù)編織規(guī)則,把AOP代碼和已經(jīng)編譯過的基代碼編譯生成最終字節(jié)碼。=3\*GB3③載入時(shí)編織(LoadTimeWeaving):在載入基代碼時(shí),由定制的類裝載器進(jìn)行編織操作。=4\*GB3④運(yùn)行時(shí)編織(RunTimeWeaving):載入基代碼后,在運(yùn)行時(shí)由運(yùn)行環(huán)境負(fù)責(zé)編織。編譯時(shí)編織和編譯后編織都是在編譯期將aspect代碼織入原來的基代碼,在運(yùn)行時(shí)可以按照確定的行為執(zhí)行。其優(yōu)點(diǎn)在于能夠在編譯期及早發(fā)現(xiàn)錯(cuò)誤,編譯時(shí)對生成的字節(jié)碼進(jìn)行優(yōu)化,提升了運(yùn)行性能。缺點(diǎn)是造成切入點(diǎn)與通知之間的綁定不夠靈活。裝載時(shí)編織在類裝載時(shí)對字節(jié)碼進(jìn)行編織修改,然后加載修改后的類。在類第一次加載完成之后,運(yùn)行性能與編譯時(shí)編織相近。當(dāng)切入點(diǎn)與通知間的綁定關(guān)系改變時(shí),不需要重新編譯,重新部署就可以實(shí)現(xiàn)。AspectJ,AspectWerkz,Jboss和Spring中都提供了裝載時(shí)編織方式。AspectJ使用一個(gè)特殊的類加載器進(jìn)行編織;Jboss和Spring使用一個(gè)框架進(jìn)行編織。運(yùn)行時(shí)編織在類己經(jīng)裝入后根據(jù)需要進(jìn)行編織,可以在運(yùn)行期調(diào)整切入點(diǎn)與通知間的綁定關(guān)系。但會造成性能上的下降。AspectWerkz也支持運(yùn)行時(shí)編織。AOP工具支持紡織方式的區(qū)別如表2-8所示。表2-8AOP工具支持紡織方式Table2-8TheweavingwayofAOPtoolsAspectJAspectWerkzJbossAOPSpringAOP編譯時(shí)紡織支持編譯后紡織支持裝載時(shí)紡織支持支持支持支持裝載后紡織支持支持2.4.4AspectJ的特點(diǎn)這些工具采用不同的AOP實(shí)現(xiàn)機(jī)制,各有優(yōu)缺點(diǎn)。2005年AspectJ項(xiàng)目和AspectWerkz項(xiàng)目合并,致力于創(chuàng)建一個(gè)統(tǒng)一的AOP平臺。合作發(fā)布的AspectJ5融合了AspectJ和AspectWerkz的優(yōu)點(diǎn):既支持AspectJ的語言擴(kuò)展特性,又支持AspectWerkz原有的基于注釋(Annotation)的開發(fā)風(fēng)格,同時(shí)也為Java5語言特性提供了AOP支持。與其他AOP工具相比,AspectJ的主要特點(diǎn)是:=1\*GB3①AspectJ的代碼風(fēng)格避免了使用XML風(fēng)格時(shí)的復(fù)雜配置,但伴隨著語法擴(kuò)展的巨大代價(jià);=2\*GB3②類Java的簡明語法減少了輸入錯(cuò)誤;=3\*GB3③方面中定義的切入點(diǎn)結(jié)構(gòu)是一級實(shí)體,更容易控制;=4\*GB3④用XML進(jìn)行聲明性編程比用Java語言擴(kuò)展更熟悉;但是在AspectJ中,通知和切入點(diǎn)的綁定缺乏靈活性,而使用XML聲明這種綁定關(guān)系的AOP工具則支持了綁定的靈活性。2.5本章小結(jié)本章首先介紹了面向方面的技術(shù)發(fā)展,分析現(xiàn)有軟件技術(shù)的不足,引出AOP技術(shù),并將AOP和OOP進(jìn)行比較,并詳細(xì)地介紹了AOP的基本概念和AOP程序開發(fā)的步驟,最后對AOP所支持的各種語言工具做詳細(xì)對比,這些研究為后續(xù)的AOP軟件開發(fā)過程的展開奠定了基礎(chǔ)。廣東工業(yè)大學(xué)工程碩士學(xué)位論文第三章面向方面軟件開發(fā)方法(AOSD)研究第三章面向方面軟件開發(fā)方法(AOSD)研究3.1AOSD基本思想AOSD(Aspect-OrientedSoftwareDevelopment)即面向方面軟件開發(fā)方法,是面向?qū)ο蠓椒ǖ难堇[與發(fā)展,它提供了一個(gè)描述模塊橫切關(guān)注點(diǎn)(系統(tǒng)級關(guān)注點(diǎn))的機(jī)制,并能夠?qū)M切關(guān)注點(diǎn)織入到面向?qū)ο蟮能浖到y(tǒng)中,從而實(shí)現(xiàn)橫切關(guān)注點(diǎn)的模塊化,這種方法解決了面向?qū)ο蠓椒ㄓ龅降碾y題。AOSD現(xiàn)在已經(jīng)引起了國內(nèi)外的廣泛關(guān)注,被《MIT技術(shù)評論》雜志評為21世紀(jì)十種對人類生活和工作方式產(chǎn)生最具影響力的技術(shù)之一[24]。AOSD是隨著AOP技術(shù)的發(fā)展而產(chǎn)生的。AOP是AOSD的一個(gè)重要組成部分,也是AOSD形成的基礎(chǔ),在目前AOSD尚處于發(fā)展的階段,AOP也是其最完善的部分。AOSD方法借助AOP技術(shù),在方法論里引入了“方面”(Aspect)來描述橫切關(guān)注點(diǎn),并給出了將方面與原系統(tǒng)相合成的技術(shù)。AOSD方法根據(jù)系統(tǒng)需求分析的結(jié)果,分離出系統(tǒng)關(guān)注點(diǎn)與一般關(guān)注點(diǎn),對于一般關(guān)注點(diǎn)可以根據(jù)OOP的方法實(shí)現(xiàn),而對于用OOP方法難以清晰的封裝并模塊化實(shí)現(xiàn)的系統(tǒng)關(guān)注點(diǎn),可以用AOP技術(shù)封裝為獨(dú)立的模塊。方面的實(shí)現(xiàn)與傳統(tǒng)的開發(fā)方法中模塊的實(shí)現(xiàn)不同,方面之間是一種弱耦合的關(guān)系,各Aspect的開發(fā)彼此獨(dú)立,只有在最后系統(tǒng)組裝時(shí)刻,才將各方面和主代碼編織、融合在一起。這使得軟件開發(fā)過程中不需考慮各個(gè)模塊之間的存在的錯(cuò)綜復(fù)雜的關(guān)系,從而在很大程度上降低軟件開發(fā)和維護(hù)的復(fù)雜度。AOSD方法的出現(xiàn),并不是為了取代OOP方法,而是構(gòu)建在OOP方法的基礎(chǔ)上的,是對OOA方法的一種繼承與發(fā)展,AOSD方法可以更好的描述OOP方法不擅長描述的橫跨多個(gè)模塊的需求或特性,很好的將關(guān)注點(diǎn)分離,從而可以模塊化地實(shí)現(xiàn)橫切特性,總之,AOSD方法實(shí)現(xiàn)了各構(gòu)件或模塊的弱藕合性,在系統(tǒng)功能設(shè)計(jì)時(shí),不需要考慮散雜在對象中的關(guān)注點(diǎn),降低了開發(fā)和維護(hù)的難度,提高了代碼的復(fù)用粒度。3.2基于用例的AOSD過程模型國內(nèi)外計(jì)算機(jī)界對面向方面的軟件開發(fā)方法的研究才剛剛開始起步,當(dāng)前主要集中在面向方面的程序設(shè)計(jì)(AOP)和一般面向方面基本概念上,至于如何識別關(guān)注點(diǎn)、如何對關(guān)注點(diǎn)進(jìn)行建模、如何分離方面和非方面仍需要系統(tǒng)化的方法。本文在總結(jié)和分析面向方面軟件開發(fā)實(shí)踐的基礎(chǔ)上,參考軟件開發(fā)的瀑布模型和噴泉模型[25],借助用例驅(qū)動建模,提出一種基于用例的面向方面軟件開發(fā)過程模型[26,27]。面向方面的軟件開發(fā)方法主要包括需求分析、系統(tǒng)分析、設(shè)計(jì)、實(shí)現(xiàn)、測試幾個(gè)階段,實(shí)質(zhì)為面向?qū)ο蠓椒ǖ腁OP擴(kuò)展,要在系統(tǒng)分析中引入方面分解、在系統(tǒng)實(shí)現(xiàn)階段引入關(guān)注點(diǎn)實(shí)現(xiàn)和方面再組合。細(xì)化后其模型如圖3-1所示:需求分析需求分析獲取需求識別關(guān)注點(diǎn)系統(tǒng)分析(用例模型)核心關(guān)注點(diǎn)分析(應(yīng)用用例)橫切關(guān)注點(diǎn)分析(基礎(chǔ)結(jié)構(gòu)用例)架構(gòu)及其它分析系統(tǒng)設(shè)計(jì)(設(shè)計(jì)模型)類設(shè)計(jì)分解基礎(chǔ)用例為可操作行為并規(guī)劃為方面架構(gòu)及其它設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)(生成代碼)類實(shí)現(xiàn)方面實(shí)現(xiàn)架構(gòu)實(shí)現(xiàn)合成兩種代碼分別測試兩種代碼系統(tǒng)測試圖3-1:基于用例AOSD過程模型Figure3-1Thedevelopingprocessmodelofuse-caseAOSD3.2.1需求分析階段由于AOSD把系統(tǒng)看做是關(guān)注點(diǎn)的集合,所以采用AOSD開發(fā)系統(tǒng),需求分析就是明確將要解決的問題,獲取系統(tǒng)的關(guān)注點(diǎn),這些關(guān)注點(diǎn)包括核心關(guān)注點(diǎn)(功能關(guān)注)和橫切關(guān)注點(diǎn)(非功能關(guān)注)。所謂的用例指的是系統(tǒng)執(zhí)行的動作序列,它為特定的用戶產(chǎn)生了可觀測到的有價(jià)值的結(jié)果。在關(guān)注點(diǎn)中,橫切關(guān)注點(diǎn)其實(shí)就是一個(gè)用例。當(dāng)你識別用例時(shí),其實(shí)也就是在識別方面。需要分析階段主要完成的工作有:確定系統(tǒng)的功能列表:包括功能需求和非功能需求。抽取系統(tǒng)特性,特性指的是系統(tǒng)與其功能的高層描述,它可以是功能性的(指的是系統(tǒng)要完成什么),或者是非功能性的(性能、日志、安全等)。畫出系統(tǒng)的用例圖,確定用例,將用例分組,將功能需求和非功能需求分配給用例。確定其優(yōu)先級,必須系統(tǒng)地組織涉眾關(guān)注點(diǎn),涉眾關(guān)注點(diǎn)就是滿足系統(tǒng)特性的關(guān)注,是程序員關(guān)心的東西。3.2.2系統(tǒng)分析和設(shè)計(jì)階段分析和設(shè)計(jì)階段主要的任務(wù):完成核心關(guān)注點(diǎn)的分析和設(shè)計(jì);完成橫切關(guān)注點(diǎn)(基礎(chǔ)結(jié)構(gòu)用例)的分析和設(shè)計(jì),包括分析基礎(chǔ)用例的影響范圍,這點(diǎn)關(guān)系到后期實(shí)現(xiàn)階段是否把橫切關(guān)注實(shí)現(xiàn)的方面是否都匹配到系統(tǒng)需要被橫切的地方;完成架構(gòu)和其它的分析和設(shè)計(jì)。分析和設(shè)計(jì)階段要完成的另一個(gè)任務(wù)是用例的描述,根據(jù)需求分析階段確定的需求,分別描述采用用例驅(qū)動的開發(fā)過程,對系統(tǒng)的兩種關(guān)注點(diǎn)分別處理,核心關(guān)注(應(yīng)用用例)采用面向?qū)ο蟮姆椒ǎ悾﹣硖幚恚鴮M切關(guān)注(基礎(chǔ)結(jié)構(gòu)用例),把它們分解為可操作行為并規(guī)劃為方面,也就是通過AOP的方法來實(shí)現(xiàn)。同時(shí)繪制時(shí)序圖,通過詳細(xì)的設(shè)計(jì)信息完成靜態(tài)模型,最后核對設(shè)計(jì)是否滿足已經(jīng)確定的所有需求。3.2.3系統(tǒng)實(shí)現(xiàn)階段根據(jù)系統(tǒng)時(shí)序圖編寫代碼,核心關(guān)注點(diǎn)采用面向?qū)ο蠓椒▽?shí)現(xiàn),橫切關(guān)注點(diǎn)采用面向方面實(shí)現(xiàn)。在各種面向方面編程工具中,AspectJ工具比較成熟和強(qiáng)大,AspectJ是一種基于JAVA的方面語言,它支持獨(dú)立于JAVA類代碼的形式化表示。方面代碼的編寫是采用動態(tài)對象調(diào)用圖中對聯(lián)結(jié)點(diǎn)的引用來實(shí)現(xiàn)的,它提供了一種方面編織器組合來組合方面和類,還以IDE擴(kuò)展的形式提供了附加開發(fā)的支持。本文在最后一章的案例中,將采用此語言作為實(shí)現(xiàn)工具。3.2.4系統(tǒng)測試階段測試階段主要完成的任務(wù)是測試兩種代碼,然后合成代碼?;谟美能浖_發(fā)方法很好地分離了基礎(chǔ)用例和應(yīng)用用例,而且系統(tǒng)的實(shí)現(xiàn)是一個(gè)用例一個(gè)用例疊加完成的,所以,實(shí)現(xiàn)階段完成的代碼可以很容易的移植到測試階段。更重要的是,當(dāng)不同類型的用例保持獨(dú)立時(shí),整個(gè)系統(tǒng)更易于測試,也便于將缺陷隔離出來。測試大體上分為兩個(gè)階段進(jìn)行:第一階段:采用已有的OOP測試方法測試核心功能代碼,這方面的測試技術(shù)和測試工具已經(jīng)相當(dāng)?shù)耐晟?。對于方面代碼而言,現(xiàn)階段還沒有以成熟的工具或技術(shù)可以用于測試,目前采用是MOCK對象,腳本語言進(jìn)行一些簡單的方面測試。第二階段:對合成代碼(把方面代碼植入到系統(tǒng))再進(jìn)行測試。測試完全通過了才算是測試階段完成[14][26][27]。3.3AOSD的發(fā)展現(xiàn)狀A(yù)OSD目前仍處于技術(shù)啟動階段,雖然已經(jīng)有大量的實(shí)用語言的支持,但仍沒有得到大規(guī)模的實(shí)踐,很多領(lǐng)域有待于進(jìn)一步的研究。目前世界各種組織和院校都開展了AOSD的研究工作,比較有代表的是包括每年舉行的AOSD國際年會議和AOSD歐洲聰盟。這些研究涉及到面向方面軟件開發(fā)語言、分析、設(shè)計(jì)、實(shí)現(xiàn)的方法等等。結(jié)合本人閱讀的資料,總結(jié)為以下幾個(gè)方面:AOP編程語言的研究與開發(fā)目前已經(jīng)有部分支持面向方面概念的編程語言,但存在使用難度大,速度慢,且沒相應(yīng)集成開發(fā)環(huán)境支持等問題,無法廣泛使用,所以這一領(lǐng)域還有待進(jìn)一步改善和優(yōu)化,同時(shí)最重要的是AOP語義的正確性需要進(jìn)行嚴(yán)格的驗(yàn)證。面向方面的建模研究面向方面的建模技術(shù)是當(dāng)前AOP技術(shù)領(lǐng)域研究的一個(gè)熱點(diǎn),統(tǒng)一建模語言(UML)作為可視化(Visualizing)、規(guī)范定義(Specifying)、構(gòu)造(Constructing)和文檔化(Documenting)的建模語言,不但是面向?qū)ο筌浖到y(tǒng)分析和設(shè)計(jì)的必備工具,也是AOSD方法各階段都要用到的工具。Theme/UML是在UML中引入了對橫切關(guān)注點(diǎn)的描述與表示方法,進(jìn)行AOP擴(kuò)展,以適應(yīng)面向方面軟件開發(fā)方法的需要。AOSD在設(shè)計(jì)模式研究設(shè)計(jì)模式是對被用來在特定場景下一般設(shè)計(jì)問題的類和相互通信的對象的描述。用設(shè)計(jì)模式來實(shí)現(xiàn)系統(tǒng)時(shí),編程語言的選擇非常重要,它影響著人們理解問題的出發(fā)點(diǎn)。對支持AOP的編程語言來說,設(shè)計(jì)模式的研究也成為研究的一大熱點(diǎn)。AOSD在分布式系統(tǒng)中的應(yīng)用分布式系統(tǒng)是對持久化、分布式、同步性有著特殊要求的系統(tǒng),這些需求都具有橫切行為的特征,如何更好的使用面向方面的思想模塊化控制這些行為具有廣泛的研究空間。AOSD在嵌入式系統(tǒng)中的應(yīng)用嵌入式系統(tǒng)是一個(gè)有著諸如同步、實(shí)時(shí)控制、并行計(jì)算等多方面要求的系統(tǒng)。嵌入式系統(tǒng)的特點(diǎn)是,在存儲容量,CPU速度等各方面存在較嚴(yán)的資源限制,而對性能又有特高要求,如要求實(shí)時(shí)響應(yīng)能力強(qiáng)等。AOP的引入必將更好地突破各方面的資源限制,滿足各種性能要求。3.4AOSD優(yōu)點(diǎn)OOSD方法和AOSD方法的相同點(diǎn),就是從需求分析到系統(tǒng)實(shí)現(xiàn)過程中試圖對軟件進(jìn)行模塊化,降低模塊間的耦合度。不同點(diǎn)就是OOP技術(shù)成功地對核心關(guān)注點(diǎn)實(shí)現(xiàn)模塊化,并降低模塊間的耦合度,而AOP技術(shù)可成功地對橫切關(guān)注點(diǎn)實(shí)現(xiàn)模塊化,并降低橫切模塊與核心模塊間的耦合度。AOSD的優(yōu)點(diǎn)具體體現(xiàn)在下面幾個(gè)方面:(1)更高的模塊化AOP提供了一種以最小的耦合單獨(dú)處理各種關(guān)注點(diǎn)的機(jī)制,使得橫切行為得到了結(jié)構(gòu)化、局部化的處理。橫切關(guān)注點(diǎn)的有效分離消除了傳統(tǒng)程序設(shè)計(jì)中代碼的“分散”和“混亂”,增強(qiáng)了軟件開發(fā)的模塊化程序,提高了系統(tǒng)的可維護(hù)性。(2)更易演化AOP模塊化單獨(dú)的“方面”,核心模塊與“方面”之間具有“不知覺性”,每個(gè)核心關(guān)注點(diǎn)的實(shí)現(xiàn)絕不知道其它橫切關(guān)注點(diǎn)的存在,更不知道橫切行為發(fā)生在自己身上,因此添加新的功能只是增加新的“方面”就可以,而不用改變核心模塊,相應(yīng)的,增加新的模塊也使得橫切條件的“方面”立即可以對其發(fā)揮作用,達(dá)到一種緊密演化的效果。(3)更高的重用性AOP允許每一個(gè)“方面”作為一個(gè)獨(dú)立分割的模塊,與傳統(tǒng)實(shí)現(xiàn)相比這些模塊更松散耦合,系統(tǒng)功能構(gòu)件設(shè)計(jì)時(shí),不需要考慮散雜在對象中的關(guān)注點(diǎn),提高了代碼的重用。3.5AOSD存在的問題面向方面軟件開發(fā)方法(AOSD)已經(jīng)作為一種嶄新的軟件開發(fā)范型,作為一種新技術(shù),目前并沒有完全成熟,開發(fā)工具還很缺乏,目前主要是基于JAVA的AspectJ,而基于C#和.NET以及其他語言上的開發(fā)工具都尚在研究中。關(guān)于AOSD分析方法、過程、設(shè)計(jì)和分解方面的基本原則,如何調(diào)試都有待進(jìn)一步研究。另外,AOSD理論支持方面也有待進(jìn)一步研究。隨著對AOSD方法的不斷研究,相信這一方法必然會為業(yè)界越來越多的人接受,并逐漸成為主流的軟件開發(fā)方法。3.6本章小結(jié)面向方面軟件開發(fā)方法作為一種嶄新的軟件開發(fā)范型,受了越來越多軟件開發(fā)人員的關(guān)注。本章詳細(xì)地介紹AOSD的基本概念,分析了AOSD研究現(xiàn)狀,然后著重闡述了AOSD過程模型以及AOSD的優(yōu)點(diǎn)及存在的問題。第四章AOSD建模研究第四章AOSD建模研究4.1統(tǒng)一建模語言UML及其擴(kuò)展機(jī)制4.1.1UML概述統(tǒng)一建模語言(UnitedModellingLanguage,UML)[28-30]是在統(tǒng)一20世紀(jì)80年代后期與90年代初期成長的許多面向?qū)ο蠼UZ言的基礎(chǔ)上誕生的,1995年形成了“統(tǒng)一方法(UnifiedMethod)”0.8版,1996年成長為“統(tǒng)一建模語言”0.9版。在美國,截至1996年10月,UML獲得了工業(yè)界,科技界和應(yīng)用界的廣泛支持,己有700多個(gè)公司表示支持采用UML作為建模語言。1996年底,UML已穩(wěn)占面向?qū)ο蠹夹g(shù)市場的85%,成為可視化建模語言事實(shí)上的工業(yè)標(biāo)準(zhǔn)。1997年11月7日,OMG采納UML1.1作為基于面向?qū)ο蠹夹g(shù)的標(biāo)準(zhǔn)建模語言。2003年6月12日,巴黎的OMG技術(shù)會議上,分析和設(shè)計(jì)專案小組投票通過了UML2.0Superstructure規(guī)約。UML是一種定義良好、易于表達(dá)、功能強(qiáng)大且普遍適用的建模語言。它溶入了軟件工程領(lǐng)域的新思想、新方法和新技術(shù)。它的作用域不限于支持面向?qū)ο蟮姆治雠c設(shè)計(jì),還支持從需求分析開始的軟件開發(fā)的全過程,它是軟件工程領(lǐng)域中具有劃時(shí)代意義的研究成果。它代表了面向?qū)ο蠓椒ǖ能浖_發(fā)技術(shù)的發(fā)展方向,得到了如IBM,HP,Oracle,Microsoft等大公司的支持,目前己經(jīng)成為面向?qū)ο蠹夹g(shù)領(lǐng)域內(nèi)占主導(dǎo)地位的標(biāo)準(zhǔn)建模語言。UML是面向?qū)ο蠓治雠c設(shè)計(jì)方法的后繼工作,是一種圖形化的表示法,用于以圖形化方式描述軟件概念。憑借它,人們可以以圖形化方式描述某個(gè)問題域,描述一個(gè)構(gòu)思中的軟件設(shè)計(jì),或者描述已經(jīng)完成的軟件實(shí)現(xiàn)。它包含下列五類圖形:(1)用例圖。從用戶角度描述系統(tǒng)功能,并指出各功能的操作者。(2)靜態(tài)圖(Staticdiagram)。包括類圖、對象圖和包圖。其中類圖描述系統(tǒng)中類的靜態(tài)結(jié)構(gòu)。對象圖是類圖的實(shí)例,幾乎使用與類圖完全相同的標(biāo)識。包圖用于描述系統(tǒng)的分層結(jié)構(gòu)。(3)行為圖(Behaviordiagram)。描述系統(tǒng)的動態(tài)模型和組成對象間的交互關(guān)系。其中狀態(tài)圖描述類的對象所有可能的狀態(tài)以及事件發(fā)生時(shí)狀態(tài)的轉(zhuǎn)移條件;而活動圖描述滿足用例要求所要進(jìn)行的活動以及活動間的約束關(guān)系,有利于識別活動。(4)交互圖(Interactivediagram)。描述對象間的交互關(guān)系。其中順序圖顯示對象之間的動態(tài)合作關(guān)系,它強(qiáng)調(diào)對象之間消息發(fā)送的時(shí)間順序,同時(shí)顯示對象之間的交互;合作圖描述對象間的協(xié)作關(guān)系,強(qiáng)調(diào)對象間的上級關(guān)系。(5)實(shí)現(xiàn)圖(Implementationdiagram)。其中構(gòu)件圖描述代碼部件的物理結(jié)構(gòu)及各部件之間的依賴關(guān)系。配置圖定義系統(tǒng)中軟硬件的物理體系結(jié)構(gòu)。它可以顯示實(shí)際的計(jì)算機(jī)和設(shè)備(用節(jié)點(diǎn)表示)以及它們之間的連接關(guān)系,也可顯示連接的類型及部件之間的依賴性。在節(jié)點(diǎn)內(nèi)部,放置可執(zhí)行部件和對象以顯示節(jié)點(diǎn)跟可執(zhí)行軟件單元的對應(yīng)關(guān)系[31,32]。需要指出的是,UML是標(biāo)準(zhǔn)的建模語言,而不是標(biāo)準(zhǔn)的開發(fā)過程。盡管UML的應(yīng)用必然以系統(tǒng)的開發(fā)過程為背景,但由于不同的組織和不同的應(yīng)用領(lǐng)域,需要采取不同的開發(fā)過程。實(shí)際上,UML中所提供標(biāo)準(zhǔn)的圖符,相當(dāng)于音樂五線譜里的樂符,學(xué)會看樂符才能看得懂樂譜,才能進(jìn)一步創(chuàng)造音樂。同樣,懂得UML中的圖符才能進(jìn)行系統(tǒng)分析和設(shè)計(jì)。4.1.2UML在軟件開發(fā)中的應(yīng)用UML的目標(biāo)是以面向?qū)ο髨D的方式來描述任何類型的系統(tǒng),具有很寬的應(yīng)用領(lǐng)域。其中最常用的是建立軟件系統(tǒng)的模型,但它同樣可以用于描述非軟件領(lǐng)域的系統(tǒng),如機(jī)械系統(tǒng)、企業(yè)機(jī)構(gòu)或業(yè)務(wù)過程,以及處理復(fù)雜數(shù)據(jù)的信息系統(tǒng)、具有實(shí)時(shí)要求的工業(yè)系統(tǒng)或工業(yè)過程等??傊?,UML是一個(gè)通用的標(biāo)準(zhǔn)建模語言,可以對任何具有靜態(tài)結(jié)構(gòu)和動態(tài)行為的系統(tǒng)進(jìn)行建模。此外,UML適用于系統(tǒng)開發(fā)過程中從需求規(guī)格描述到系統(tǒng)完成后測試的不同階段。UML對面向?qū)ο箝_發(fā)方法中以下方面提供支持:(1)需求階段,通過調(diào)查獲知用戶需要的功能,使用用例來捕獲用戶需求,描述對系統(tǒng)感興趣的外部角色及其對系統(tǒng)(用例)的功能要求,形成用例圖。(2)系統(tǒng)分析階段,是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 業(yè)務(wù)運(yùn)營績效評估表
- 化肥吊裝安裝施工方案
- 產(chǎn)品分類與價(jià)格對比表格
- 三農(nóng)村畜牧業(yè)發(fā)展手冊
- 建設(shè)工程施工保修協(xié)議書
- 全球石油天然氣產(chǎn)量分布表
- 軟土路基施工方案
- 集成隔音鋁板施工方案
- 儲罐保溫施工方案
- 輸配電施工方案
- 專題05標(biāo)點(diǎn)符號考點(diǎn)專訓(xùn)(01)(含答案)2025年新高考語文一輪復(fù)習(xí)考點(diǎn)滿分寶典
- 國家公務(wù)員考試(面試)試題及解答參考(2024年)
- 保密法實(shí)施條例培訓(xùn)
- 鉗工工藝學(xué)(第6版)完整全套教學(xué)課件
- DB11T 1035-2013 城市軌道交通能源消耗評價(jià)方法
- 老年科護(hù)士進(jìn)修匯報(bào)
- 2024新能源光伏電站運(yùn)行規(guī)程和檢修規(guī)程
- 2024-2025學(xué)年初中音樂九年級下冊滬教版教學(xué)設(shè)計(jì)合集
- 同等學(xué)力英語申碩考試詞匯(第六版大綱)電子版
- 有機(jī)化學(xué)完整版本
- 銀行存管三方協(xié)議書
評論
0/150
提交評論