亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        動態(tài)增量式AOP框架的研究與實現(xiàn)

        2013-07-22 03:03:36曦,李
        計算機工程與應(yīng)用 2013年23期
        關(guān)鍵詞:連接點編織組件

        楊 曦,李 彤

        1.福州大學(xué) 陽光學(xué)院,福州 350015 2.云南大學(xué) 軟件學(xué)院,昆明 650091

        動態(tài)增量式AOP框架的研究與實現(xiàn)

        楊 曦1,李 彤2

        1.福州大學(xué) 陽光學(xué)院,福州 350015 2.云南大學(xué) 軟件學(xué)院,昆明 650091

        1 引言

        軟件是對現(xiàn)實世界問題空間與解空間的具體描述,是客觀事物的一種反映,是人類思維的外化產(chǎn)物[1]。由于人類思維的多樣性和易變性,導(dǎo)致軟件也在不停地“運動”、“變化”。尤其互聯(lián)網(wǎng)成為主流計算環(huán)境之后,軟件變化性、復(fù)雜性更是進一步增強,導(dǎo)致軟件工業(yè)的危機頻頻發(fā)生。鑒于此,人們紛紛從不同視角對軟件理論、技術(shù)和方法進行研究(例如從軟件形態(tài)方面提出了網(wǎng)構(gòu)軟件[2]的概念;從網(wǎng)絡(luò)資源整合角度,提出了網(wǎng)格計算、普適計算、云計算等;從計算模式方面,提出了自治計算[3]、自適應(yīng)軟件、SOA等)。縱觀所有這些新的概念、思想和理論,都牽涉到一個共同的問題:開放計算環(huán)境下軟件系統(tǒng)的動態(tài)演化理論和應(yīng)用研究。而開放計算環(huán)境下軟件系統(tǒng)的動態(tài)演化[4]理論和應(yīng)用的研究尚處于起步階段,相關(guān)研究成果在理論基礎(chǔ)(例如對條件超圖文法[6]等的研究缺少堅實的理論基礎(chǔ))、覆蓋面(例如Gilgul只能解決有限的軟件動態(tài)演化問題,Walter Czaaola提出的反射元模型[7]僅支持預(yù)設(shè)的演化)、實現(xiàn)難易度(例如反射技術(shù)、動態(tài)指派技術(shù)、K-Commponent[8]等都有較大的實現(xiàn)難度)等方面都存在著不足。另一方面,關(guān)注點分離的思想在解決軟件危機方面起到了至關(guān)重要的作用。而AOP(Aspect-Oriented Programming,面向方面的編程)對橫貫多個功能模塊的非功能性維度(橫切關(guān)注點)能進行有效封裝,實現(xiàn)了多維度的關(guān)注點分離,是OOP方法的合理補充。但如何提高編織效率也是AOP面臨的重要挑戰(zhàn)。本文在基于C++的面向方面的編程框架中引入Bigraph圖論[9]的動態(tài)演化思想,解決了系統(tǒng)演化行為一致性和相容性的問題,同時使用增量式編織機制實現(xiàn)了方面的高效編織,某種程度上對AOP技術(shù)和動態(tài)演化的發(fā)展有著重要的促進作用。

        2 AODF編程框架的提出

        多年來,許多研究人員都致力于研究新的更符合人類認(rèn)知行為的、趨于多維度思想的模塊化機制,以解決因為關(guān)注點分離不足而導(dǎo)致的諸多問題。而新的關(guān)注點分離思想的關(guān)鍵點在于如何克服單維度思想的功能性主體在OOP設(shè)計及實現(xiàn)中的專制性,從而對橫切關(guān)注點實現(xiàn)高內(nèi)聚、低耦合的有效封裝。AOP思想由此應(yīng)運而生,早在1997年歐洲召開的面向?qū)ο缶幊檀髸?,Gregor等就首次提出了AOP的概念[10]。AOP保留了面向?qū)ο蟮某橄笤鰪?、模塊化和代碼重用等目標(biāo),依據(jù)信息隱蔽性的原則,允許開發(fā)者動態(tài)修改面向?qū)ο竽P?,實現(xiàn)更高程度的關(guān)注點分離。作為一種思維形態(tài),AOP本身并未規(guī)定具體的實現(xiàn)形式。為順應(yīng)定義上的標(biāo)準(zhǔn),本文參考了AspectJ的相關(guān)概念和原理,其中包括Aspect(方面)、Joint Point(連接點)、Pointcut(切入點)、Advice(通知)、Inter-type declaration(類型間聲明)、Weave(編織)等。

        另一方面,C++作為傳統(tǒng)類型上的OOP語言,在很多領(lǐng)域尤其是嵌入式系統(tǒng),有著不可替代的地位。國內(nèi)外關(guān)于C++的AOP研究雖有所發(fā)展,如C++模版技術(shù)[11-12]是根據(jù)參數(shù)類型生成通用類和通用函數(shù),某種程度上實現(xiàn)了軟件復(fù)用;Aspect C++用C++語言實現(xiàn)了AspectJ,還有宏編程[13]等,但這些都無法支持AOP架構(gòu)的動態(tài)演化,并且在編織效率上也有所欠缺,從而只是片面實現(xiàn)了AOP概念[14]。本文提出一種動態(tài)AOP編程框架——AODF[15](Aspect-Oriented Dynamic Framework),是支持C++語言擴展(Language Extension)的方面編程環(huán)境。圖1為AODF的總體結(jié)構(gòu)??梢钥闯?,AODF事實上是方面代碼到標(biāo)準(zhǔn)C++源碼的前端轉(zhuǎn)換系統(tǒng),從語言層提供對方面的支持,無需改動語言本身任何結(jié)構(gòu)及特性,就可以實現(xiàn)遺留系統(tǒng)面向方面的擴展。而且支持自編制和可配置兩種類型的方面,并可配置為標(biāo)準(zhǔn)組件入庫,實現(xiàn)方面的重用。AODF的動態(tài)演化性主要由方面配置管理器的“動態(tài)演化設(shè)置”模塊實現(xiàn)(第3章),而基于日志技術(shù)的增量式編織機制由方面配置管理器的“增量式編織”模塊實現(xiàn)(第4章)。AODF的原理及具體實現(xiàn)將在第5章詳述。

        3 AODF的動態(tài)演化性

        動態(tài)演化是網(wǎng)格計算、普適計算、云計算等開放計算環(huán)境的基礎(chǔ),近年來逐漸成為學(xué)術(shù)界研究的熱點。動態(tài)演化的研究主要集中于語言、模型和運行環(huán)境三個方面,而軟件體系結(jié)構(gòu)(Software Architecture,SA)對動態(tài)演化的支持,也體現(xiàn)為以體系結(jié)構(gòu)為核心的應(yīng)用模式和軟件框架的研究。例如:J.Dowling等人設(shè)計的 K-Commponent[8]框架元模型通過提供體系結(jié)構(gòu)元模型和適配契約(Adaptation Contracts)來支持系統(tǒng)動態(tài)配置。Walter Czaaola提出由拓?fù)湓獙ο蠛筒呗栽獙ο笮纬审w系結(jié)構(gòu)反射元模型,但也僅支持預(yù)設(shè)的演化[7]。國內(nèi)徐洪珍等提出用約束超圖表示SA,用條件超圖文法建模SA的動態(tài)演化過程[6],但未能解決SA動態(tài)演化行為一致性的問題。本文基于Bigraph的圖形化理論將動態(tài)演化的思想結(jié)合到AOP的軟件體系結(jié)構(gòu)中,試圖解決軟件系統(tǒng)演化的行為一致性和相容性問題。

        AODF的動態(tài)演化特性主要由動態(tài)演化設(shè)置模塊實現(xiàn),該模塊的設(shè)計基于Bigraph理論。Bigraph具有完備的公理系統(tǒng),其直觀的圖形化表述不僅方便SA建模,而且還有相關(guān)的項語言(term language)[15]對系統(tǒng)性質(zhì)進行推理和演繹。另一方面,Bigraph理論為軟件演化的一致性和相容性等問題也提供了理論基礎(chǔ)。

        3.1 Bigraph反應(yīng)系統(tǒng)

        圖1 AODF系統(tǒng)框架

        為建模方面SA的動態(tài)演化,對Bigraph靜態(tài)結(jié)構(gòu)的定義進行了擴展,使其能夠描述AODF編程框架。然后運用BRS(Bigraph反應(yīng)系統(tǒng))的反應(yīng)規(guī)則表示AODF的動態(tài)演化操作,將動態(tài)演化操作轉(zhuǎn)換為BRS上的操作。以銀行的ATM系統(tǒng)為例,核心關(guān)注點有取款和登錄模塊等,橫切關(guān)注點主要有用戶驗證,所以把用戶驗證模塊提取為方面(AsV)。當(dāng)執(zhí)行取款操作時,ATM系統(tǒng)需再行驗證用戶的取款權(quán)限,所以取款模塊執(zhí)行之前要切入“取款權(quán)限驗證”方面(AsAu),這就需要對系統(tǒng)進行演化操作。圖2為ATM系統(tǒng)動態(tài)演化前后的Bigraph圖形及項語言。上半部分為ATM演化前的Bigraph圖及項語言,在Bigraph反應(yīng)系統(tǒng)中使用反應(yīng)規(guī)則,將取款(W)節(jié)點動態(tài)插入(演化操作)新的方面節(jié)點AsAu,使其轉(zhuǎn)換為Bigraph ATM'(圖的下半部分),實現(xiàn)了取款之前進行權(quán)限驗證的動態(tài)演化操作。

        圖2 ATM動態(tài)演化前后的Bigraph圖及項語言

        Bigraph從軟件體系結(jié)構(gòu)層面支持動態(tài)演化,從而可以把AODF看成一個Bigraph,這樣對體系結(jié)構(gòu)的演化操作可通過對Bigraph進行轉(zhuǎn)換來實現(xiàn)。BRS中的反應(yīng)規(guī)則可以表示動態(tài)重配置,則AODF的動態(tài)演化過程就可以映射為BRS中一個Bigraph通過反應(yīng)規(guī)則轉(zhuǎn)換為另外一個Bigraph的過程。用Bigraph的圖形表述軟件體系結(jié)構(gòu)的演化更加直觀,項語言的形式化理論有利于下一步對軟件演化特性的驗證。

        3.2 Bigraph演化的完整性

        Bigraph靜態(tài)和動態(tài)特性所基于的范疇論,其中最為重要的IPO(Idem Pushout)和RPO(Relative Pushout)的數(shù)學(xué)性質(zhì),可以證明在BRS中,當(dāng)存在RPO和最小轉(zhuǎn)換時,Bigraph之間的互模擬事實上是相合(Congruence)的。針對現(xiàn)有動態(tài)演化研究無法解決行為一致性和相容性問題,本文基于Bigraph為動態(tài)演化的形式化規(guī)約和性質(zhì)驗證提供一種有效解決途徑。

        Bigraph反應(yīng)系統(tǒng)S=<R,r,R′>:R→R′,R和 R′都為Bigraph,分別為反應(yīng)物和生成物,r為反應(yīng)規(guī)則。

        定理1(Bigraph演化相容性)當(dāng)R和r滿足系統(tǒng)約束的條件下,則通過該反應(yīng)規(guī)則生成的R′也應(yīng)滿足系統(tǒng)的約束條件。

        證明 設(shè)R為反應(yīng)物Bigraph,R′為生成物Bigraph,r為反應(yīng)規(guī)則。假設(shè)R和r均滿足系統(tǒng)約束條件關(guān)系C。根據(jù)Bigraph項語言操作語義可知,從R中可分離出Bigraph G,因為R滿足C,則G也應(yīng)滿足C,于是R=G°r。從反應(yīng)系統(tǒng)的遷移規(guī)則推導(dǎo),可得出R′=G°r,又因為合成操作滿足滿射的數(shù)學(xué)特征,所以在G與r滿足系統(tǒng)約束條件C的情況下,G′也滿足系統(tǒng)的約束條件,命題得證。

        同理可以得到推論1:

        推論1反應(yīng)物Bigraph集和反應(yīng)規(guī)則集合ri(i=1,2,…,n)滿足系統(tǒng)約束,則通過ri集合轉(zhuǎn)換的生成物Bigraph集也同樣滿足系統(tǒng)的約束條件。

        故可以得出結(jié)論,基于Bigraph完備性理論構(gòu)建的演化系統(tǒng)具有完整性。

        3.3 Bigraph演化的一致性和相容性

        基于Bigraph完整性的基礎(chǔ),可以考慮演化的一致性和相容性。所謂一致性,可以是行為的一致,即生成物能完成反應(yīng)物的任何行為;而相容性主要指系統(tǒng)演化前后行為的正確性,生成物不會導(dǎo)致死鎖等問題。

        定理2假設(shè)給定系統(tǒng)環(huán)境E及其構(gòu)件c1、c2,對于反應(yīng)規(guī)則集合 ri(i=1,2,…,n),存在相應(yīng)標(biāo)簽序列 Li,使得,則稱c1與c2相容。

        證明 根據(jù)Bigraph理論的標(biāo)簽轉(zhuǎn)換系統(tǒng)LTS[16]以及異步π演算原理[17]可知指構(gòu)件c1、c2在上下文環(huán)境E中,針對r存在對應(yīng)標(biāo)簽使構(gòu)件間同步交互,并能正常終止的過程。根據(jù)相容性的定義,定理2得證。

        引理 安全BRS中,若最小轉(zhuǎn)換的等價互模擬相合,即x~y,則對任意活動上下文z,有 z°x~z°y[12]。

        定理3 BRS中存在RPO和最小轉(zhuǎn)換時,則互模擬是同構(gòu)的,即若x~y,則對任意活動上下文z,有z°x~z°y,同時x可以保持一致性演化至y。

        證明 由引理可知,若最小轉(zhuǎn)換的等價互模擬相合,即x~y,則構(gòu)件x在任何上下文環(huán)境中,均能演化至y,根據(jù)行為等價性和互模擬性的定義可知,x可以保持一致性演化至y。

        AODF的動態(tài)演化性是基于Bigraph理論的,故AODF的行為演化滿足了一致性和相容性。

        3.4 示例驗證

        如圖3所示,某軟件系統(tǒng)由客戶端C、服務(wù)器端S及C與S之間通信連接件CN,系統(tǒng)未實施演化前,基于Bigraph圖論解析出來的系統(tǒng)軟件體系結(jié)構(gòu)的Bigraph圖為圖3(a)。

        圖3 C/S軟件架構(gòu)的動態(tài)演化示例圖

        該系統(tǒng)主要演化行為是:AddService(當(dāng)軟件應(yīng)用滿足不了客戶端功能和性能時,需在服務(wù)器端增加服務(wù))和SendData(在客戶端、服務(wù)器端之間傳遞數(shù)據(jù)的行為),根據(jù)這兩種演化行為的反應(yīng)規(guī)則,可以得到如下反應(yīng)前后的項語言:

        可以看到,圖3(a)中客戶端(C)的數(shù)據(jù)可以通過通信連接件(CN)傳送至服務(wù)器端(S),經(jīng)服務(wù)器端處理完后發(fā)送出去。顯然圖3(b)也能實現(xiàn)這一行為,即基于Bigraph理論演化后的系統(tǒng)可以模擬演化前的所有操作,并且反應(yīng)規(guī)則均維持通信連接件的單一性。由定理2可知,該動態(tài)演化保證了C/S體系結(jié)構(gòu)的完整性,因此可以驗證該系統(tǒng)的演化是一致和完整的。

        4 增量式編織機制

        由于編織效率對軟件性能影響較大,若對所有組件都采用簡單的完全編織策略,勢必導(dǎo)致編織效率低下。AODF采用增量式編織機制,結(jié)合方面的動態(tài)演化設(shè)置,可以實現(xiàn)更高效的編織。增量式編織機制主要由方面配置管理器的“增量式編織”模塊實現(xiàn)。實施增量式編織最核心的問題是演算編織狀態(tài)的改變量。計算出方面狀態(tài)的改變量,則只需對修改部分進行編織,而無需針對整個aspect進行完全編織,從而能夠較好提升編織效率。增量式編織的原理如圖4所示。

        為了方便編織,AODF方面組件庫中的組件都被賦于如圖4所示的四種屬性值,若最近編織時間為0,則需要完全編織,根據(jù)“連接點設(shè)置”模塊生成的編織匹配集進行源代碼的織入,具體織入規(guī)則參看5.3節(jié)。若“最近編織時間-最近修改時間”大于等于0說明方面無變更,則無需編織;若小于0,則需要進行增量式編織。實現(xiàn)增量式編織的重點是計算編織狀態(tài)的改變量,即圖4中的?weave,先對方面進行量化的結(jié)構(gòu)描述及匿名切入點命名轉(zhuǎn)化后,將其存儲模型定義為三個集合:切入點集、連接點集、通知集。以切入點為中心組成線性鏈表,鏈表中每個節(jié)點包含3個指針域和一個鍵值域,指針分別指向連接點集、通知集及下一節(jié)點,每個連接點及通知均設(shè)置了標(biāo)志位,可標(biāo)示新增狀態(tài)、刪除狀態(tài)和初始態(tài)。通過對連接點、通知狀態(tài)的判定,很容易計算出編織狀態(tài)改變量,從而實現(xiàn)增量式編織。

        AODF基于日志系統(tǒng)來構(gòu)建增量編織機制,創(chuàng)建了三種日志,IndexLog用于索引編織日志(WeaveLog),目的是加快檢索編織狀態(tài),每個日志項是一個三元組〈Slant(記錄方面編織狀態(tài)信息在WeaveLog中的相對偏移量),Count(記錄方面編織次數(shù)),AspectID(方面標(biāo)識號,關(guān)鍵字)>;WeaveLog記錄了方面的編織歷史及更新歷史,其日志項為四元組〈AspectID,CurrentWeaveStatus(當(dāng)前編織狀態(tài)),LastWeave(最后一次編織時間),LastUpdate(最后一次更新時間)>;SysLog存放一些系統(tǒng)全局信息,日志項是一個兩元組〈AspectID,Count>。IndexLog用哈希表存儲,每個關(guān)鍵字AspectID對應(yīng)一個存放著aspect信息的哈希桶,當(dāng)aspect被編織或重編織時,將編織計數(shù)值Count及偏移量Slant存入桶中,則最新的方面狀態(tài)索引項總處于哈希桶的頂部。采用哈希表的存儲結(jié)構(gòu)的目的是讓索引時間復(fù)雜度降為O(1),避免了對整個索引日志的遍歷,從而提高AOP的效率。

        5 AODF的實現(xiàn)及實驗情況

        AODF主要由源碼轉(zhuǎn)換器、方面組件生成器和方面配置管理器組成,下面將分別闡述。

        5.1 源碼轉(zhuǎn)換器

        源碼轉(zhuǎn)換器主要包括源碼掃描、語法分析、語義分析三個模塊。

        圖4 增量式編織原理

        源碼掃描模塊的主要任務(wù)是對源程序從前到后逐個字符掃描,經(jīng)解析后,依次讀取、判斷源代碼文件中的每一個符號,包括標(biāo)識符、關(guān)鍵字、運算符、常量、分隔符和注釋等,得到源代碼文件的標(biāo)識符集合,保存在指定的Token鏈表中。

        語法分析模塊的任務(wù)是在源碼掃描基礎(chǔ)上,根據(jù)C++的語法規(guī)則判斷輸入串語法正確與否,若無錯誤就能正確生成語法樹,以語法樹的形式將符號token序列分解成各類語法單位。這里選擇Lemon來輔助完成語法分析工作,根據(jù)C++標(biāo)準(zhǔn)語法規(guī)則生成的C++語法分析器,輔助語法分析模塊生成語法樹。該模塊的輸入為標(biāo)識符流,輸出為語法樹根節(jié)點,用于連接點查找及進一步的語義分析。

        AODF中的語義分析模塊對語法分析模塊生成的語法樹進行簡單掃描,用指針鏈表的形式存儲語法樹中的類及函數(shù)的相關(guān)信息(包括類和函數(shù)名、屬性列表、方法列表、函數(shù)所屬類、參數(shù)列表、返回值類型等),生成符號倉庫用于連接點設(shè)置,所以無需進行完整的C++語義解析。

        5.2 方面組件生成器

        方面組件生成器負(fù)責(zé)掃描程序員按方面語法規(guī)則編寫的aspect代碼,按規(guī)定格式將方面的名字、屬性和方法,切入點的屬性和類型,通知的類型和代碼等提取出來,輸出到方面配置管理器的織入模塊。方面組件有兩種情況:一種是自編制的方面組件,即可以重新定義切入點、連接點、通知等,生成新的、獨立的方面組件,經(jīng)方面組件生成器解析后,提取放入到方面組件庫待用;另一種是可配置方面組件,通過配置文件,可以像使用庫函數(shù)一樣來使用方面,直接讀取到方面配置管理器中進行動態(tài)演化設(shè)置、連接點匹配及最終的代碼織入。

        5.3 方面配置管理器

        方面配置管理器一方面對方面組件進行有效配置與管理,另一方面基于正確的連接點匹配,代碼織入模塊負(fù)責(zé)將方面組件編織進標(biāo)識符流的相應(yīng)位置,完成最終代碼編織工作,方面配置管理器的工作流程如圖5所示,主要有以下幾個步驟:

        (1)連接點查找

        連接點查找模塊主要對源碼轉(zhuǎn)換器生成的語法樹和符號倉庫依據(jù)連接點類型定義進行搜索,把源碼中所有可能連接點找出,以鏈表形式保存在相應(yīng)參數(shù)中。

        (2)動態(tài)演化設(shè)置

        C++構(gòu)件、連接件經(jīng)基于Bigraph公理系統(tǒng)的“SA析構(gòu)模塊”解析生成系統(tǒng)軟件體系結(jié)構(gòu)(SA)的Bigraph圖,作為動態(tài)演化設(shè)置模塊的輸入,經(jīng)動態(tài)演化設(shè)置模塊解析為相應(yīng)的項語言,根據(jù)反應(yīng)規(guī)則,方面組件的織入行為轉(zhuǎn)化為對Bigraph圖及項語言的演化,經(jīng)BRS反應(yīng)系統(tǒng)演化后的生成物Bigraph和項語言交由連接點匹配模塊進行進一步的連接點設(shè)置。

        (3)連接點匹配

        該模塊根據(jù)動態(tài)演化設(shè)置模塊傳輸過來的生成物Bigraph和項語言分析其織入行為,對每一個方面組件的CppAdvice對象分析切入點表達(dá)式,若與連接點查找模塊生成的鏈表中的連接點標(biāo)識符相匹配,則讀取CppJointPoint類與符號倉庫ClassDB進行匹配運算,若都滿足條件,則需進一步判斷連接點的類型并對其設(shè)置WeaveAction類屬性。最后將設(shè)置好編織動作的連接點置入到匹配集鏈表jpweaveset中,供代碼織入模塊調(diào)用。

        (4)增量式編織

        增量式編織模塊根據(jù)連接點編織匹配集,進行源代碼的動態(tài)編織動作,而無需為了使用aspect而改動任何C++源代碼。增量式編織關(guān)鍵要解決,編織狀態(tài)的改變量(第4章)及不同類型的連接點織入到語法樹位置的問題。AODF設(shè)定了如下編織規(guī)則:

        ①對于CALL類型的連接點:如果代碼為_wrapper_code或_call_code型,則織入到語法樹節(jié)點jpweaveset->caller_func的左兄弟節(jié)點所指的token之后;對于_replace_code型代碼,織入到語法樹節(jié)點jpweaveset->callnode的左兄弟節(jié)點所指的token之后,并刪除callnode對應(yīng)的整個子樹的token序列。

        ②對于EXCUTION類型的連接點:將Before代碼插入到語法樹節(jié)點jpweaveset->func_info左兄弟節(jié)點所指的token之后;將After代碼插入到語法樹節(jié)點jpweaveset-> func_info右兄弟節(jié)點所指的token之后;最后將jpweaveset-> func_info所指的token重命名。

        ③對CLASS類型的連接點:直接將ClassCode代碼插入到語法樹節(jié)點jpweaveset->classrefNode所指的token之后。

        圖5 方面配置管理器工作流程

        5.4 實驗情況概述

        為驗證AODF編程框架能否實現(xiàn)設(shè)計的初衷——正確、高效、動態(tài)地織入方面代碼,AOP的性能是否帶來負(fù)面效應(yīng),都需要通過實驗來驗證。實驗環(huán)境如表1所示。

        表1 實驗環(huán)境參數(shù)表

        把編寫好的aspect文件won.as和C++源代碼文件main.cc存放在before目錄下,after為編織后的代碼保存路徑,對編織前的代碼before/main.cc和編織后的代碼after/ main.cc進行測試對比,結(jié)果表明,aspect代碼能準(zhǔn)確織入到C++程序的相應(yīng)位置,并正確地轉(zhuǎn)化為標(biāo)準(zhǔn)C++語法,交由GC++、Visual C++等C++編譯器可進一步編譯執(zhí)行。編織后的代碼量相應(yīng)增大,但編譯時間僅略微增加。

        為了分析AOP語言的執(zhí)行性能,對AOP及OOP的編織、編譯進行了多次實驗,實驗數(shù)據(jù)統(tǒng)計如圖6所示。從實驗結(jié)果可以看出,AOP編織時間比OOP的編譯時間略大一些,因為AOP是構(gòu)筑于OOP之上的,性能與效率肯定會受影響。但從實驗結(jié)果可以看到,AOP的編織時間與OOP的編譯時間相差僅毫秒級,這點差異與當(dāng)前的計算機處理速度相比,幾乎可以忽略。由此可以得出,AODF是一種有效的面向方面編程框架,能較好地對C++代碼進行面向方面的擴展,實現(xiàn)多維度分離關(guān)注點的目的。對自行編制的aspect源碼可設(shè)置為AODF的標(biāo)準(zhǔn)方面組件,既達(dá)到了對原有系統(tǒng)動態(tài)增加橫切關(guān)注點這一非功能性主體的目的,又實現(xiàn)了方面的重用。使得源代碼的可讀性、易擴展性、可維護性更強。

        圖6AOP與OOP性能對比實驗

        6 結(jié)束語

        在互聯(lián)網(wǎng)技術(shù)成為主流計算環(huán)境的形式下,軟件已逐步走向開放、動態(tài)和難以預(yù)測。人類思維的多變與不可控注定了軟件的動態(tài)與復(fù)雜,而為軟件開發(fā)提出有效的結(jié)構(gòu)性框架已成為軟件科學(xué)與技術(shù)面臨的挑戰(zhàn)性問題。本文提出一種基于C++的面向方面動態(tài)編程框架AODF,其作為一種語言擴展,使得C++遺留系統(tǒng)不必為使用aspect做任何變更;另一方面,增量式動態(tài)編織機制不僅使得編織效率得到提高,還使得AODF具有動態(tài)演化能力,而基于Bigraph理論的演化解決了行為一致性和相容性問題。但AODF還有許多需要改進的地方,比如,僅支持“織入”行為,未能實現(xiàn)“織入”行為的逆工程(比如動態(tài)刪除方面、更新方面等)。下一步工作主要是提高連接點查找效率,改善編織算法,進一步研究對演化行為的后期度量及評審、對AODF耦合度的評估、對編程過程的形式化驗證等。

        [1]楊芙清.軟件工程技術(shù)發(fā)展思索[J].軟件學(xué)報,2005,16(1):1-7.

        [2]梅宏,黃罡,趙海燕,等.一種以軟件體系結(jié)構(gòu)為中心的網(wǎng)構(gòu)軟件開發(fā)方法[J].中國科學(xué):E卷,2006,36(10):1100-1126.

        [3]陶麗,張自力.基于面向自治計算的Agent系統(tǒng)動態(tài)重構(gòu)模型[J].計算機科學(xué),2007,34(5):147-151.

        [4]Lehman M M,Rail J F.Software evolution-background,theory,practice[J].Inf Process Lett,2003,88(1/2):33-44.

        [5]Casanova M,Van-Der Straeten R,Jonckers V.Supporting evolution in component-based developmentusing component libraries[C]//Proceedingsof7th European Conference on Software Maintenance and Reengineering,2003:123-132.

        [6]Xu Hongzhen,Zeng Guosun,Chen Bo.Conditional hypergraph grammars and its analysis of dynamic evolution of software architectures[J].Journal of Software,2011,22(6):1210-1223.

        [7]Cazzola W,Pini S,Ghoneim A,et al.Co-evolving application code and design models by exploiting meta-data[C]// Proceedings of the 12th Annual ACM Symposium on Applied Computing(SAC’07),Seoul,South Korea,2007:1275-1279.

        [8]Dowling J,Cahill V.The K-component architecture meta-model for self-adaptive software[C]//Proceedings of the 2001 Symposium on Software Reusability:Putting Software Reuse in Context,Toronto,Ontario,Canada,2001:41-50.

        [9]Jensen O H,Milner R.Bigraphs and mobile processes(revised),UCAM-CL-TR-580[R].Cambridge:Computer Laboratory,University of Cambridge,2004.

        [10]Kiczales G.Aspect-oriented programming[C]//Proceedings of ECOOP,F(xiàn)inland,1997:220-242.

        [11]Czarnecki K,Dominick L,Eisenecker U W.Aspect-oriented programming in C++[Z].2001.

        [12]Czarnecki K,Eisenecker U W.Generative programming:methods,tools,and applications[M].New York:ACM Press,2000.

        [13]Dounence R,F(xiàn)radet P,Südholt M.Composition,reuse and interaction analysis of stateful aspects[C]//Aspect-Oriented Software Development(AOSD),2004:141-150.

        [14]Elrad T,F(xiàn)ilman R E,Bader A.Aspect-oriented programming[C]// CACM,2001:29-32.

        [15]楊曦,李彤.一種支持動態(tài)演化的AOP框架[J].計算機工程,2012,38(19):52-55.

        [16]Jensen O H,Milner R.Bigraph and transition[C]//POPL’03 Proceedings of the 30th ACM SIGPLAN-SIGACT,2003,38(1):38-49.

        [17]Amadio R M,Castellani I,Sangiorgi D.On bisimulations for the asynchronous π-calculus[J].TheoreticalComputer Science,1998,195:291-324.

        YANG Xi1,LI Tong2

        1.College of Sunshine,Fuzhou University,Fuzhou 350015,China 2.School of Software,Yunnan University,Kunming 650091,China

        On the basis of AOP principles research,it proposes an aspect-oriented programming framework AODF,which introduces incremental weaving mechanisms based on log technology,not only improves the weaving efficiency,but also supports dynamic evolution based on the Bigraph theory and achieves behavior consistency and compatibility.On the other side,it provides the aspects with support from language layer,without changing any structure and characteristics of the language itself.Furthermore,the self_organizational aspect configurated by AODF can be added in the framework as the standard components so that the further system can reuse them.So the legacy system obtains aspect extended by AODF but no need to make any changes. Key words:Aspect-Oriented Programming(AOP);Aspect-Oriented Dynamic Framework(AODF);aspect-oriented;dynamic evolution;Bigraph theory

        在研究AOP原理的基礎(chǔ)上,提出一種面向aspect的編程框架AODF,采用基于日志技術(shù)的增量式編織機制,不僅提高了編織效率,而且基于Bigraph理論的AODF支持方面的動態(tài)演化,實現(xiàn)了行為的一致性與相容性。另外,AODF從語言層提供對方面的支持,無需改動語言本身任何結(jié)構(gòu)及特性,而且可以把自行編制的aspect配置為標(biāo)準(zhǔn)組件入庫,實現(xiàn)方面的重用。從而使得遺留系統(tǒng)無需變更就可以獲得面向方面的擴展。

        面向方面的編程(AOP);面向方面的動態(tài)框架(AODF);面向方面;動態(tài)演化;Bigraph理論

        A

        TP311

        10.3778/j.issn.1002-8331.1305-0466

        YANG Xi,LI Tong.Research and implementation of AOP framework based on incremental dynamic evolution.Computer Engineering and Applications,2013,49(23):39-44.

        國家自然科學(xué)基金(No.60963007);福建省教育廳科技項目(No.JB11251)。

        楊曦(1977—),女,講師,CCF會員,研究領(lǐng)域為軟件動態(tài)演化、構(gòu)件選擇優(yōu)化;李彤(1963—),男,博士,教授,博士生導(dǎo)師,研究領(lǐng)域為軟件演化、形式化方法。E-mail:Yangxi@fzu.edu.cn

        2013-06-03

        2013-08-26

        1002-8331(2013)23-0039-06

        猜你喜歡
        連接點編織組件
        體驗編織的樂趣
        無人機智能巡檢在光伏電站組件診斷中的應(yīng)用
        能源工程(2022年2期)2022-05-23 13:51:50
        基于A3航攝儀的小基高比影像連接點精提取技術(shù)研究
        新型碎邊剪刀盤組件
        重型機械(2020年2期)2020-07-24 08:16:16
        U盾外殼組件注塑模具設(shè)計
        竹自清高,編織美好
        度假吧!帶上你的編織鞋包
        Coco薇(2017年7期)2017-07-21 07:16:04
        基于彈性厚粘膠層的結(jié)構(gòu)性連接點響應(yīng)建模和預(yù)測
        汽車文摘(2016年6期)2016-12-07 00:23:38
        風(fēng)起新一代光伏組件膜層:SSG納米自清潔膜層
        太陽能(2015年11期)2015-04-10 12:53:04
        基于相關(guān)性篩選原理的公共連接點諧波畸變量的分層量化
        電測與儀表(2015年3期)2015-04-09 11:37:22
        国产精品亚洲午夜不卡| 久久久久人妻精品一区三寸| 五月丁香综合激情六月久久| 真实国产老熟女粗口对白| 久久久久久久妓女精品免费影院| 一区二区三区中文字幕有码| 国产精品一区二区夜色不卡| 久久婷婷五月综合色高清| 又大又粗又爽的少妇免费视频| 97超级碰碰人妻中文字幕| 亚洲精品天堂在线观看| 青草草视频在线观看华人免费| 友田真希中文字幕亚洲| 亚洲精品www久久久| 午夜亚洲www湿好大| 秋霞国产av一区二区三区| 日韩av在线不卡一区二区| 久久中文骚妇内射| 明星性猛交ⅹxxx乱大交| 亚洲一区二区三区在线观看播放| 亚洲一区二区女优视频| 午夜福利影院成人影院| 国产综合在线观看| 男女超爽视频免费播放| 国产丝袜高跟美腿一区在线| 午夜精品久久99蜜桃| 天天躁夜夜躁狠狠躁2021a2| 少妇白浆高潮无码免费区| 久久人妻av无码中文专区| 亚洲24小时免费视频| 国产日产亚洲系列最新| 热re99久久精品国产99热 | 亚洲中文字幕乱码在线视频| 亚洲悠悠色综合中文字幕| 97久久超碰国产精品旧版| 日日摸日日碰人妻无码老牲 | 美女大量吞精在线观看456| 日本av一区二区播放| 国产91成人精品高潮综合久久| 色综合中文字幕综合网| 精品国产av一区二区三区四区|