999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向方面編程的研究

2008-12-31 00:00:00牛文峰
電腦知識與技術(shù) 2008年24期

摘要:面向方面編程(AOP)是一種新的編程技術(shù),它彌補(bǔ)了面向?qū)ο缶幊蹋∣OP)在跨越模塊行為上的不足,AOP引進(jìn)了Aspect,允許程序員對橫切關(guān)注點(diǎn)進(jìn)行模塊化,增強(qiáng)了系統(tǒng)的可維護(hù)性和代碼的重用性。該文介紹了AOP的關(guān)鍵概念和開發(fā)流程,給出了AOP的原理和AOP的JBoss實(shí)現(xiàn),并說明了AOP的優(yōu)點(diǎn)和有待于進(jìn)一步研究的問題。

關(guān)鍵詞:面向方面編程;橫切關(guān)注點(diǎn);AOP

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2008)24-1210-02

The Study of Aspect-Oriented Programming

NIU Wen-feng

(Shanxi Professional College of Finance, Taiyuan 030001, China)

Abstract: AOP is a new programming technology, which makes up the weakness of OOP in leaping over the modules. AOP fetches in Aspect, and allows the programming maker to modularize

Crosscutting Concern. This expands the maintainability of the system and the repeated using ability of the codes. This paper introduces the pivotal concept and programming process of AOP, illustrates the principle and JBoss realization method of AOP, and states the strongpoint and someproblems that need further studies.

Key words: Aspect-Oriented Programming; crosscutting concern;AOP

1 OOP介紹

面向?qū)ο蟮木幊蹋∣bject-Oriented Programming,OOP)技術(shù)相信大家都非常熟悉,由于面向?qū)ο蠹夹g(shù)很好地解決了軟件系統(tǒng)中角色劃分的問題,所以現(xiàn)在大多數(shù)的軟件項(xiàng)目都選擇面向?qū)ο蟮木幊谭绞?。開發(fā)者借助于面向?qū)ο蟮姆治?、設(shè)計(jì)和實(shí)現(xiàn)技術(shù),可以很方便地將問題領(lǐng)域的“名詞”轉(zhuǎn)換成軟件系統(tǒng)中的對象,從而自然地完成從問題到軟件的轉(zhuǎn)換。當(dāng)前,OOP已經(jīng)成為大多數(shù)軟件開發(fā)項(xiàng)目的選擇。

目前OOP提供的類概念還只能分離關(guān)注方面的一維,所以利用OOP不能有效地反映系統(tǒng)的所有關(guān)注點(diǎn),這樣就造成了代碼纏結(jié)和代碼分散問題,使系統(tǒng)難以理解、實(shí)現(xiàn)和演進(jìn)。從整體來看,這樣開發(fā)出來的軟件系統(tǒng)很難具備良好的重用性和擴(kuò)展性,無法適應(yīng)需求的不斷變化。

為了解決上述問題,在上世紀(jì)末人們又提出了AOP的概念,AOP能有效地改善功能代碼和方面代碼的分離和自動合成,使程序更加容易理解、設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)。

2 AOP關(guān)鍵概念分析

面向方面程序設(shè)計(jì)(Aspect-Oriented Programming)是由Xerox Palo Alto研究中心(Xerox PARC)的Gregorkiczales等研究人員于1997年提出的一種新的程序設(shè)計(jì)思想和模型,它為開發(fā)者提供了一種模塊化橫切關(guān)注點(diǎn)的機(jī)制,并能夠自動將橫切關(guān)注點(diǎn)織入到面向?qū)ο蟮能浖到y(tǒng)中,從而完成橫向功能的模塊化。AOP和OOP結(jié)合起來就可以很好地完成對真實(shí)系統(tǒng)的橫向和縱向的兩個維度的建模,從而更加容易地構(gòu)建穩(wěn)定且易于維護(hù)的軟件系統(tǒng)。

AOP思想的本質(zhì)是用一種松散耦合的方式來實(shí)現(xiàn)獨(dú)立的關(guān)注點(diǎn),通過組合這些實(shí)現(xiàn)來建立最終的系統(tǒng)。在AOP中封裝橫切關(guān)注點(diǎn)的模塊單元被稱為方面(Aspect),而在面向?qū)ο笾蟹庋b一般關(guān)注點(diǎn)的模塊單元被稱為類。下面對AOP的幾個核心概念進(jìn)行一下探討。

1)橫切關(guān)注點(diǎn)(Crosscutting Concern):有一些關(guān)注點(diǎn)從邏輯本身上看就是獨(dú)立的,比如說很多具體業(yè)務(wù)對象以及方法,而有一些關(guān)注點(diǎn)的邏輯本身是橫向的,也就意味著其它多個獨(dú)立的關(guān)注點(diǎn)都對其有依賴關(guān)系,比如說許多系統(tǒng)級代碼是很多業(yè)務(wù)模塊都需要包含的,這些貫穿多個模塊的關(guān)注點(diǎn)被定義為橫切關(guān)注點(diǎn)。橫切關(guān)注點(diǎn)如果不被模塊化將會導(dǎo)致軟件系統(tǒng)在很多方面存在缺陷,典型的問題就是代碼混亂和代碼擴(kuò)散。

2)方面(Aspect):一系列被分解出來的關(guān)注點(diǎn)集就構(gòu)成了方面,方面是AOP技術(shù)中封裝的基本模塊單元,利用方面這個概念我們可以方便地對橫切關(guān)注點(diǎn)進(jìn)行抽象,并且在方面里面進(jìn)行一系列其它要素的定義。

3)連接點(diǎn)(Join Point):連接點(diǎn)是Aspect J中的一個重要概念,它是程序執(zhí)行過程中明確定義的點(diǎn),連接點(diǎn)可能定義在方法調(diào)用、條件檢測、循環(huán)的開始或是賦值動作處,連接點(diǎn)有一個與之相關(guān)聯(lián)的上下文,一個方法調(diào)用連接點(diǎn)的上下文可能會包含一個目標(biāo)對象及調(diào)用參數(shù)等。

4)切入點(diǎn)(Pointcut):用來指明所要連接的程序結(jié)構(gòu),同時(shí)還為在連接點(diǎn)上執(zhí)行的通知提供上下文環(huán)境。切入點(diǎn)的本質(zhì)就是捕捉連接點(diǎn)的結(jié)構(gòu)和通知的激發(fā)條件,它告訴AOP框架哪些攔截器綁定到哪些類,哪些原數(shù)據(jù)應(yīng)用于哪些類,哪一個引導(dǎo)被引入哪些類。切入點(diǎn)決定了各種AOP的特征怎樣被運(yùn)用于應(yīng)用程序中的類。

5)通知(Advice):一個通知就是由一個特定事件觸發(fā)的程序邏輯,是能夠被插入在調(diào)用者和被調(diào)用者之間的一個行為。

6)導(dǎo)言(Introduce):導(dǎo)言是一個增加方法或域到已存在的類中的途徑,它甚至允許你改變當(dāng)前存在的類的顯式接口,并能引入一個混合的類以實(shí)現(xiàn)新的接口,導(dǎo)言還允許你將多繼承引入到一般的Java類。它一個主要的用例就是當(dāng)有一個方面并讓這個方面有一個運(yùn)行時(shí)間接口或跨越不同的對象層次時(shí),仍然要讓應(yīng)用開發(fā)者能夠調(diào)用特定方面的APIs。導(dǎo)言還能夠是一個方法,它將一個新的API綁定到一個存在的對象模型。

7)元數(shù)據(jù)(Metadata):元數(shù)據(jù)用來描述類本身的一些附加信息,它和其描述的類捆綁在一起,可以靜態(tài)地或者在運(yùn)行時(shí)刻獲得這些類的描述信息,甚至還可以動態(tài)地將Metadata添加到一個給定的類的實(shí)例。在EJB中就使用了大量的Metadata,Metadata也已經(jīng)整合在C#和JDK 1. 5中。

8)織入(Weave):織入是實(shí)現(xiàn)AOP技術(shù)的關(guān)鍵概念之一,當(dāng)我們使用關(guān)注點(diǎn)分離原則把橫切關(guān)注點(diǎn)模塊化成方面后,就需要考慮如何以自動化的方式把方面組織到程序相關(guān)業(yè)務(wù)類中以形成最后完整的程序,這個裝配方面代碼和業(yè)務(wù)核心代碼的過程就稱為織入??椚胪ǔ?梢允褂渺o態(tài)和動態(tài)兩種方式完成,靜態(tài)織入的實(shí)現(xiàn)可以依靠語言預(yù)處理器、擴(kuò)展編譯器以及擴(kuò)展鏈接器等語言環(huán)境,而動態(tài)織入的實(shí)現(xiàn)就要依靠動態(tài)裝載器、虛擬機(jī)等動態(tài)運(yùn)行環(huán)境。

3 AOP的實(shí)現(xiàn)方法

AOP研究社團(tuán)把AOP的實(shí)現(xiàn)定義為三步:

1)方面分解。分解用戶的需求,提出橫切關(guān)注點(diǎn)和一般關(guān)注點(diǎn)。在這一步中,可以把核心模塊級關(guān)注點(diǎn)和系統(tǒng)級橫切關(guān)注點(diǎn)分離開來。

2)關(guān)注點(diǎn)實(shí)現(xiàn)。將這些關(guān)注點(diǎn)各自獨(dú)立地實(shí)現(xiàn),然后將它們實(shí)現(xiàn)為方面。

3)方面的重新組合。方面集成器通過創(chuàng)建一個模塊單元——方面來指定重組的規(guī)則,通過這些規(guī)則實(shí)現(xiàn)各個模塊化關(guān)注點(diǎn)的重新組合,以構(gòu)建最終系統(tǒng)。

通過以上分析,我們知道AOP的基本流程為:通過需求分析將問題域分解為多個關(guān)注點(diǎn),在設(shè)計(jì)層定義關(guān)注點(diǎn)的解決模型,在實(shí)現(xiàn)層實(shí)現(xiàn)關(guān)注點(diǎn)的模塊化,一般關(guān)注點(diǎn)部件通過對象、方法、過程等實(shí)現(xiàn),橫切關(guān)注點(diǎn)要模塊化為方面,最后通過AOP環(huán)境提供的織入器根據(jù)織入規(guī)則將這些模塊化的關(guān)注點(diǎn)組合起來形成一個完整的系統(tǒng)?;贏OP的軟件開發(fā)過程如圖1所示。

圖1 基于AOP的軟件開發(fā)過程

4 AOP在Java技術(shù)中的實(shí)現(xiàn)

1) AOP的容器實(shí)現(xiàn):AOP技術(shù)已經(jīng)在基于組件開發(fā)體系的Java企業(yè)級平臺(J2EE)中的容器中得到了廣泛的實(shí)現(xiàn)和運(yùn)用。一個容器就是一個組件運(yùn)行環(huán)境,它提供了組件運(yùn)行時(shí)所需要的外部資源環(huán)境,并且控制著整個組件的生命周期,也就是說組件完成對核心業(yè)務(wù)的封裝,而容器則完成對那些橫切多個功能組件的系統(tǒng)代碼的封裝。JBoss容器、Spring框架和PicContainer就是現(xiàn)在主流的以AOP技術(shù)實(shí)現(xiàn)的工業(yè)級組件容器和框架。下面就JBoss容器對于AOP的實(shí)現(xiàn)進(jìn)行簡單的分析。

JBoss 4.0定義了一個AOP框架,這個框架和JBoss應(yīng)用服務(wù)器緊密地結(jié)合。我們通過對于JBoss給出的官方文檔樣例來分析其AOP框架的實(shí)現(xiàn)。

定義一個攔截器

//在JBoss AOP中,所有的攔截器必須實(shí)現(xiàn)org.jboss.aop.Interceptor接口

public interface Interceptor

{

public String getName();

public InvocationResponse invoke(Invocation invocation) throws Throwable;

}

2) Aspect J的實(shí)現(xiàn):Aspect J是由Xerox Palo Alto研究中心(Xerox PARC)開發(fā)的一個基于Java語言的AOP實(shí)現(xiàn),它通過向Java語言中加入了連接點(diǎn)(Join Point)、切點(diǎn)(Pointcut)、通知(Advice)、類間聲明(Inter-Type Declaration)和方面(Aspect)等新概念來加強(qiáng)對方面的抽象,并依靠特殊的預(yù)處理器把Java源文件和方面源文件進(jìn)行整合,然后產(chǎn)生純Java程序??傮w上說,Aspect J采用語言擴(kuò)展技術(shù)實(shí)現(xiàn)方面的抽象,采用靜態(tài)的轉(zhuǎn)換技術(shù)實(shí)現(xiàn)織入。

5 AOP的優(yōu)勢和待解決的問題

AOP能夠幫助開發(fā)者分離關(guān)注點(diǎn),克服了由于橫切關(guān)注點(diǎn)的存在帶來的間題,因此AOP的優(yōu)勢就在于它能夠?qū)M切關(guān)注點(diǎn)建模,克服了代碼冗余、代碼混雜所帶來的生產(chǎn)效率低、代碼可重用性差、系統(tǒng)的進(jìn)化能力弱等問題。但目前已經(jīng)開展的面向方面軟件開發(fā)研究還不太完善,在未來的工作中需要解決的問題還很多:1)方面編織器的開發(fā)和方面編織器與開發(fā)環(huán)境的整合問題;2)如何有效地分離橫切關(guān)注點(diǎn)的問題;3)對方面開發(fā)建模的問題,主要集中在如何對UM L進(jìn)行擴(kuò)展上;4)對方面使用約束的問題,這樣可以以可控的方式使用方面;5)如何在需求分析和體系結(jié)構(gòu)設(shè)計(jì)階段管理方面的問題。

參考文獻(xiàn):

[1] 邵維忠,楊芙清.面向?qū)ο蟮南到y(tǒng)分析[M].北京:清華大學(xué)出版社,1998.

[2] Ramnivas Laddad.利用AOP分離軟件關(guān)注點(diǎn)[M].劉克科,譯.程序員2002合訂本(下).北京:電子工業(yè)出版社,2003:167-170.

[3] Ken Wing,Kuen Lee.An Introduction to Aspect-Oriented Programming[Z].Reading Assignment.

[4] Jan Hannemann,Gregor Kiczales.Design Pattren Implentation with Java and Aspect J[EB/OL].(2003-09)http://wws.cs.ubc.ca/~jan/AODPS/.

主站蜘蛛池模板: 亚洲男人的天堂久久香蕉网| 一级香蕉视频在线观看| 中文纯内无码H| 国产精品天干天干在线观看| av大片在线无码免费| 国产免费精彩视频| 国产精品30p| 欧美日本中文| 国产视频你懂得| 国产成年女人特黄特色毛片免| 国产成人亚洲精品无码电影| 华人在线亚洲欧美精品| 国产在线第二页| 91黄色在线观看| 国产欧美精品一区二区| 蜜桃视频一区| 色综合手机在线| 91久久精品国产| 亚洲一区二区视频在线观看| 色综合中文字幕| 亚洲AⅤ综合在线欧美一区| 91精品国产一区| 米奇精品一区二区三区| 亚洲天堂网在线播放| 色婷婷狠狠干| 亚洲va欧美ⅴa国产va影院| 亚洲第一视频网站| 久久久噜噜噜| 亚洲精品麻豆| 国产精品午夜福利麻豆| 91免费国产在线观看尤物| 2020亚洲精品无码| 国产成人毛片| 国产特级毛片| 精品剧情v国产在线观看| 日韩精品一区二区三区swag| 欧美色伊人| 播五月综合| 98超碰在线观看| 波多野结衣无码中文字幕在线观看一区二区| 啊嗯不日本网站| 中文字幕有乳无码| 国产激情第一页| 成人在线亚洲| 午夜国产理论| 久久国产免费观看| 国产小视频网站| 亚洲无码四虎黄色网站| 伊人激情综合| 亚洲国产精品美女| 在线观看无码a∨| 波多野结衣一区二区三区四区视频| 国产好痛疼轻点好爽的视频| 国产丝袜啪啪| 热99精品视频| 亚洲国产综合精品中文第一| 尤物视频一区| 国产第四页| 日韩欧美中文字幕在线韩免费| 九九线精品视频在线观看| 国产97视频在线| 国产在线一二三区| 国产高清不卡| 超清无码一区二区三区| 人妖无码第一页| 夜夜操狠狠操| 91久久国产成人免费观看| 999精品视频在线| 刘亦菲一区二区在线观看| 国产91小视频在线观看| 色综合综合网| 91在线视频福利| 中文字幕资源站| 亚洲a级在线观看| 久久精品无码专区免费| 国产精品久久久免费视频| 国内精品九九久久久精品| 999国内精品久久免费视频| 国产精品福利导航| 久久男人资源站| 日韩高清欧美| 国产欧美性爱网|