余 強(qiáng)
(安徽水利水電職業(yè)技術(shù)學(xué)院,安徽合肥231603)
面向方面的UML建模方法及應(yīng)用
余 強(qiáng)
(安徽水利水電職業(yè)技術(shù)學(xué)院,安徽合肥231603)
面向方面編程(Aspect-Oriented Programming,AOP)提供了一種描述和實(shí)現(xiàn)橫切關(guān)注點(diǎn)的機(jī)制。分析面向方面軟件設(shè)計原則與方法步驟后,利用統(tǒng)一建模語言(UML)對系統(tǒng)建模橫切的關(guān)注點(diǎn)實(shí)現(xiàn)了分離和織入。最后通過一個實(shí)例來驗(yàn)證了這種方法能增強(qiáng)軟件的模塊性與重用性。
面向方面編程;面向方面建模;UML;網(wǎng)上書店
面向方面編程(AOP)[1]是1997年由施樂公司帕洛阿爾托研究中心開發(fā)的一種新的編程范型,它提供了一種明確捕獲和模塊化橫切關(guān)注點(diǎn)的機(jī)制,有效解決了由于橫切屬性引起的代碼分散和代碼混亂等問題。AOP大都用在程序級和執(zhí)行級實(shí)現(xiàn)橫切關(guān)注點(diǎn)的模塊化,AOP技術(shù)提供了一種在編程階段實(shí)現(xiàn)關(guān)注點(diǎn)分離的有效有段。
AOP是一種新的編程范型,尚未提供正式的建模技術(shù)和建模工具,研究人員僅僅在建模語言、建模工具、建模方法以及建模思想等方面對其進(jìn)行了研究。而統(tǒng)一建模語言(UML)可以描述軟件開發(fā)中從需求分析直到實(shí)現(xiàn)和測試的全過程。AOP思想引入到軟件開發(fā)的需求分析階段實(shí)現(xiàn)模塊化橫切關(guān)注點(diǎn)的分離,并用UML的實(shí)現(xiàn)面向方面的系統(tǒng)類圖和狀態(tài)圖,并對方面進(jìn)行織入,完成系統(tǒng)建模的整個過程。
1.1 面向方面編程的定義
面向方面編程(AOP),是一種基于關(guān)注分離的新技術(shù),是建立在已有的如面向?qū)ο缶幊?OOP)和面向過程的程序設(shè)計方法之上的,AOP是對OOP的繼承和發(fā)展,AOP增加了一些概念和結(jié)構(gòu)用來模塊化橫切關(guān)注點(diǎn),并能夠自動將橫切關(guān)注點(diǎn)植入到面向?qū)ο蟮能浖到y(tǒng)中[2]。
在AOP中增加方面(Aspect)來封裝橫切關(guān)注點(diǎn),目的就是清晰地分離關(guān)注點(diǎn),解決代碼混亂和分散的問題。面向方面的軟件開發(fā)采用先進(jìn)的技術(shù)來分離關(guān)注點(diǎn),并強(qiáng)調(diào)分離和組合關(guān)注點(diǎn)。其目標(biāo)是通過使系統(tǒng)的功能需求、非功能需求、平臺特性等諸多不同的關(guān)注點(diǎn)相互獨(dú)立,實(shí)現(xiàn)更好的模塊化,構(gòu)建易于理解、易于擴(kuò)展、高復(fù)用性、高質(zhì)量的軟件系統(tǒng)。
1.2 面向方面編程中核心概念
面向方面編程的核心概念有:
1.方面(Aspect):所謂的Aspect,從抽象意義上講,是對系統(tǒng)組件的性能和語法產(chǎn)生一定的影響的一些屬性[3];從設(shè)計上講,是橫切系統(tǒng)的一些軟件系統(tǒng)關(guān)注點(diǎn);從實(shí)現(xiàn)上講,Aspect是一種程序結(jié)構(gòu)單元,它支持將橫切系統(tǒng)的關(guān)注點(diǎn)封裝到單獨(dú)的模塊單位中[4],典型的Aspect應(yīng)用情況如系統(tǒng)異常和出錯處理、同步和并發(fā)控制、內(nèi)存訪問模式以及特定于應(yīng)用的程序關(guān)注點(diǎn)等。
2.連接點(diǎn)(joinpoint):是代碼中激活advice被執(zhí)行的觸發(fā)點(diǎn),是在程序執(zhí)行過程中明確定義的某個執(zhí)行點(diǎn),在這些點(diǎn)中執(zhí)行Aspect的代碼。
3.切點(diǎn)(pointcut):是捕捉連接點(diǎn)的結(jié)構(gòu),用來指明所需連接的程序結(jié)構(gòu),是advice的激發(fā)條件,同時還為連接點(diǎn)上執(zhí)行的通知提供上下文環(huán)境。
4.通知(advice):定義了方面的實(shí)現(xiàn),比如日志寫入的實(shí)際代碼,或者是安全檢查的實(shí)際代碼。也就是說,通知是指在定義好的切入點(diǎn)處,所要執(zhí)行的程序代碼。通知包含自身的一組規(guī)則,這組規(guī)則規(guī)定了何時調(diào)用通知,這是與被觸發(fā)的連接點(diǎn)相關(guān)的。通知分為“before”、“after”等[5]。
5.織入(wave):以自動化的方式把方面代碼組織到業(yè)務(wù)核心代碼的相關(guān)類中,形成最后完整的程序的過程稱為織入。
2.1 面向方面軟件設(shè)計原則
面向方面軟件設(shè)計遵循的原則有:
1.方面(Aspect)描述模塊應(yīng)具有通用性;
2.方面(Aspect)描述模塊應(yīng)與現(xiàn)行程序模塊具有兼容性;
3.方面(Aspect)描述模塊應(yīng)具有可擴(kuò)展性。
2.2 面向方面編程開發(fā)步驟
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ā)方式包括3個清晰的步驟[6],如圖1所示:
圖1 面向方面開發(fā)步驟
1.Aspect分解:分解需求提取出一般關(guān)注點(diǎn)和橫切關(guān)注點(diǎn),即將一個系統(tǒng)的核心模塊關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)分離開來。
2.關(guān)注點(diǎn)實(shí)現(xiàn):對于核心關(guān)注點(diǎn),采用面向?qū)ο蠹夹g(shù)來實(shí)現(xiàn);而對于橫切關(guān)注點(diǎn),將采用AOP技術(shù)。
3.Aspect重新組合:Aspect織入器通過創(chuàng)建的Aspect來指定重組的規(guī)則,該規(guī)則規(guī)定了實(shí)現(xiàn)的Aspect如何與OOP實(shí)現(xiàn)基礎(chǔ)。
2.3 面向方面的UML建模方法
面向方面建模的目的是用圖形方式顯示出包括方面的整體結(jié)構(gòu),并且具有詳細(xì)的語義定義說明。面向方面建模方法分兩個階段完成,首先需將方面抽取出來進(jìn)行單獨(dú)的分析與設(shè)計,然后按照織入規(guī)則將方面織入到原型中并與其它模塊組件緊密結(jié)合[7]。
對于關(guān)注點(diǎn)的分離,在UML中,可將方面定義為一個方面類,用{Aspect}表示。{Aspect}中由方面名與操作組成,其中操作必須包含切入操作:{pointcut} pointcut(),{advice}advice(),也可包含其他功能操作,如讀、寫等。方面類是擴(kuò)充的方面UML中的類,是UML的事物構(gòu)造模塊中結(jié)構(gòu)事物的一個基本元素,建模時方面類的使用方法與基本類相似。
織入階段的主要任務(wù)是分析關(guān)注點(diǎn)與方面的特性,識別出合適的切入點(diǎn),然后在根據(jù)織入規(guī)則通知機(jī)制將方面切入到原模型中。在用例圖中,方面可以作為用例圖中的一個擴(kuò)展用例加入織入其中,擴(kuò)展點(diǎn)不是被真正插入到基礎(chǔ)用例的事件流中,而是被添加到事件流頂部的外罩。擴(kuò)展的方面用例也可以有前置條件和后置條件。必須滿足前置條件,否則不執(zhí)行橫切操作,后置條件在方面執(zhí)行后約束系統(tǒng)的狀態(tài)。切入點(diǎn)相當(dāng)于方面中的聯(lián)結(jié)點(diǎn)。
方面的織入是UML的事物構(gòu)造中行為構(gòu)造的一個基本元素,表示在特定上下文中方面類與基本類或方面類之間,為達(dá)到某一目的而進(jìn)行的一系列消息交換而組成的動作。這些動作是動態(tài)進(jìn)行的,表示模型隨時間環(huán)境等條件的改變不斷變化,從而實(shí)現(xiàn)了動態(tài)建模,提高了系統(tǒng)在設(shè)計階段的仿真能力并為軟件實(shí)現(xiàn)階段提供了可靠的支撐依據(jù)。
該實(shí)例是一個網(wǎng)上書店系統(tǒng),利用UML進(jìn)行建模。由于書店店主要了解本書店書籍的銷售情況以及退書原因,以便書店主對銷售書籍品種的及時改進(jìn)和調(diào)整。
網(wǎng)上書店系統(tǒng)中涉及有客戶類、訂單類、書店類、書籍類、倉庫類等。客戶要了解訂單狀態(tài),從而了解購買活動所處的狀態(tài);書商根據(jù)客戶訂單情況,進(jìn)行訂單的確認(rèn),然后根據(jù)用戶付款信息通知倉庫備貨送貨;倉庫根據(jù)訂單執(zhí)行狀態(tài),決定是送貨還是積極備貨。在訂單查詢系統(tǒng)中,客戶類、訂單類、書店類、書籍類、倉庫類中都包含跟蹤trace()操作,追蹤訂單的運(yùn)行狀態(tài)。
圖2 網(wǎng)上書店面向?qū)ο蟮念悎D
面向?qū)ο蟮念悎D2中,在客戶類、訂單類、書店類和倉庫類中均要進(jìn)行描述,出現(xiàn)大量的重復(fù)代碼,效率下降,影響程序的效率。如果要對trace()進(jìn)行修改,工作量也是極大的。在這種情況下必須利用AOP技術(shù)中的方面構(gòu)建來描述,對橫切關(guān)注點(diǎn)進(jìn)行分離,經(jīng)分離后的跟蹤放到trace()操作中,并單獨(dú)寫為如下代碼形式:Public aspect trace{
……
before():execution(**.*(..))
{Trace.write();}
after():execution(**.*(..))}
Trace.free();
……
} 然后在訂單適當(dāng)?shù)臅r候切入到系統(tǒng)中,這樣可以大大減少修改的工作量、另外也減少了代碼重復(fù)行、達(dá)到高復(fù)用的代碼,也便于對代碼運(yùn)行效率的提高。
圖3 網(wǎng)上書店面向方面的類圖
面向方面編程中不但要把方面從系統(tǒng)中分離出來,另外也必須使用新的方法將方面重新織入系統(tǒng)。圖3網(wǎng)上書店面向方面的類圖中,將追蹤分離出來構(gòu)造了一個追蹤方面,建立了一比較完整的追蹤模型來建模系統(tǒng)中的追蹤事件,從而提高了改事件的可重用性。
圖4 面向方面的系統(tǒng)活動圖
接下來是如何是將方面織入系統(tǒng)中,實(shí)現(xiàn)完整性,在如圖4面向方面的系統(tǒng)活動圖中,按照aspect (trace)描述的機(jī)制,在創(chuàng)建訂單將訂單Aspect(trace)方面織入系統(tǒng)中。當(dāng)系統(tǒng)創(chuàng)建訂單時,追蹤使用寫操作記錄下訂單的一些必要信息,系統(tǒng)進(jìn)行訂單核對和商品檢查后,回復(fù)客戶(接受訂單或拒絕訂單),此時追蹤也必須記錄此信息,當(dāng)回復(fù)完成后,追蹤執(zhí)行free()操作。
本文介紹了面向方面編程的原理、方法和步驟的基礎(chǔ)上,利用UML技術(shù)實(shí)現(xiàn)方面建模。結(jié)合網(wǎng)上書店訂單查詢系統(tǒng)實(shí)例,在面向?qū)ο蟮念悎D基礎(chǔ)上,引入方面trace,構(gòu)建了面向方面的網(wǎng)上書店類圖,并用系統(tǒng)活動圖反映出方面的織入機(jī)制。AOP中增加方面(Aspect)來封裝橫切關(guān)注點(diǎn),達(dá)到清晰地分離關(guān)注點(diǎn),解決了代碼混亂和分散的問題,實(shí)現(xiàn)更好的模塊化,構(gòu)建易于理解、易于擴(kuò)展、高復(fù)用性、高質(zhì)量的軟件系統(tǒng)。
參考文獻(xiàn):
[1]Kiczales G,Lamping J,Mendhekar A Macda G,Lapes B, Longtier J M,Ir min J.Aspect-oriented romramming,Proceeding of ECOOP’97(springer verlag,1997).
[2]周屹,郁哲.一種基于AOP和UML的用例擴(kuò)展關(guān)系建模方法[J].黑龍江工程學(xué)院學(xué)報,2009,23(1):51.
[3]The Aspect J team.Aspect-Oriented Programming with AspectJ.Available at:http://aspect.org.
[4]Joseph D.Gradecki,NicholasLesiecki.面向方面的Java編程指南[M].北京:清華大學(xué)出版社,2005.
[5]黃興華,胡飛.AOP技術(shù)在面向用戶的軟件組件測試中的應(yīng)用[J].計算機(jī)應(yīng)用與軟件,2009,26(8):126.
[6]馬欣,楊連賀.面向方面編程技術(shù)的研究[J].儀器儀表用戶,2009,16(2):72-73.
[7]李婷,劉建勛,尹雁青.面向方面建模方法的研究及其應(yīng)用[J].計算機(jī)技術(shù)與發(fā)展,2009,19(1):113-115.
[責(zé)任編輯 姜仁達(dá)]
Face aspect UML modelling method and application
YU Q iang
(Anhui Technical College ofWater ResourcesAnd Hydroelecric Power,Hefei 231603,China)
AbstractAspect-oriented programming(AOP)Provides a description and i mplementation mechanis ms for crosscutting concerns.Analysis of aspect-oriented software design principles and methods of procedure,the use ofUnifiedModelingLanguage(UML)on modeling crosscutting concerns to achieve a separation and weaving.,Finally,an example to validate thismethod enhances software modularity and reuse.
aspect-oriented programming;aspect-oriented modeling;UML;Online Bookstore
book=8,ebook=165
TP31 文獻(xiàn)標(biāo)碼:A
1008-9128(2010)04-0059-04
2010-05-13
余強(qiáng)(1973-),男,安徽岳西人,講師,碩士。研究方向:信息系統(tǒng)與電子商務(wù)。