?

基于AOP的實時系統關注點分離方法

2011-07-25 06:49汪千松安徽工程大學現代教育技術中心安徽蕪湖241000
計算機工程與設計 2011年9期
關鍵詞:連接點關注點連接件

鮑 陳, 汪千松(安徽工程大學現代教育技術中心,安徽蕪湖241000)

0 引 言

實時系統[1-2]是計算機應用領域中的一個重要分支,它廣泛應用于國防、航空、自動化控制等領域。實時系統要求在確定的時間內執行計算或處理事務并對外部事件做出響應的計算機系統,它的正確性不僅依賴于計算結果的邏輯正確性而且與結果的完成時間有關。關注點分離[3-4]是軟件工程中一個重要的原則。傳統實時系統軟件中,始終存在一些關注點的實現代碼難以模塊化,和其它關注點的實現代碼彼此橫切,最終的程序呈現“代碼分散”和“代碼糾纏”,使得系統變得復雜、難以擴展和難以重用。針對上述問題,本文首先分析并識別了實時系統中的關注點,將非功能性關注從系統核心功能關注中分離出來,在此基礎上,提出基于方面連接件的組裝模型,該模型方法將AOP引入到連接件中,從而保證了功能關注與非功能關注綁定或組合過程的透明性,功能關注中不包含對非功能關注的代碼引用,達到關注點模塊化獨立重用目的。點,使其模塊化。一個關注點就是一個特定的目的,實現某種特定功能的模塊。任何一個軟件系統都可以被分為核心業務模塊和系統級模塊,也即核心關注點和系統級關注點。核心業務關注點是指系統的核心業務邏輯(功能邏輯);系統級關注點就是一些與每個業務子系統都關聯的公共模塊,這些關注點也稱為橫切關注點。這種橫切關注點橫跨了多個核心功能業務模塊。AOP通過需求分析將需求分解為一系列核心模塊級需求和系統級需求,在設計層采用一般關注點和橫切關注點(CrosscuttingConcerns)分別為核心模塊級需求和系統級需求設計解決模型(SolutionModel),然后在實現層實現這些關注點的模塊化,一般關注點實現為組件(Component,可能為對象,方法,過程或API),橫切關注點實現為方面(Aspect),最后通過AOP環境提供的織入器(Weaver)將這些組件和方面組合起來以實現一個完整的系統。

AOP的主要構造元素包括:①連接點(Join Pointer):程序執行中的明確定義的點,用以表明可以插入橫切行為的位置。②切入點(Pointcut):用以捕獲程序執行中特定連接點,并搜索該連接點上下文的程序結構。③通知(Advice):當程序到達某些連接點需要執行的操作,通知通常有3種類型:before

1 面向方面編程技術AOP[5-8]

AOP是一種新的編程范型,其基本思想使分離橫切關注通知、after通知和around通知,分別表示在連接點之前、之后和代替連接點執行的操作。④方面(Aspect):是將切入點和通知結合在一起的模塊單元,類似于OOP中類的概念。⑤編織(Weaving):是把特定連接點的實現代碼(Advice)插入到相應的連接點代碼上。通過編織工具,通知會被“插入”到通知對應的連接點的前面、后面或連接點所在的代碼中。

2 基于AOP的實時系統關注點分離方法

實時系統軟件通常是對任務的調度、對時間的調度及管理上述兩類控制的應用邏輯。實時系統軟件是一個并發狀態機(concurrentstatetransition machine,CSTM)集合。在實時系統中,傳統面向對象技術無法完美地模塊化,系統里有很多非功能關注,這些非功能關注散布整個系統的功能關注里,帶來了“代碼分散”和“代碼糾纏”的問題。本文提出了一種基于方面連接件的組裝模型,該模型將AOP引入到軟件連接件中,達到分離關注點簡化系統中的代碼復雜度的目的,并實現了功能關注與非功能關注綁定或組合過程的透明性,保證了功能關注中不包含對非功能關注的代碼引用,達到關注點模塊化獨立重用目的。

2.1 實時系統關注點分離

在實時系統軟件開發中,經常需要用多個狀態來描述系統的行為。這些狀態的狀態變化和狀態遷移形成了狀態機。我們采用狀態機模型來描述實時系統。對橫切關注點我們從兩個角度進行分類:體系結構和域獨立性的關注點。將關注點從體系結構角度劃分為系統級橫切關注點(GlobalConcerns)和模塊級橫切關注點(LocalConcerns),再將模塊級橫切關注點從獨立性的角度做深入細分。系統級橫切關注點是指跨越系統所有核心模塊組件的全局關注點,如狀態遷移和并發性是系統級橫切關注點屬于這類關注點,而模塊級橫切關注點是指跨越幾個系統核心功能模塊的局部關注點,如實時處理和故障處理則屬于這類關注點。

2.2 組件 (CSTM)結構模型

實時系統軟件是一個并發狀態機(concurrentstatetransition machine,CSTM)集合,它是由實時系統建模語言ROOM[9-10](real-timeobject-orientedmodeling)中的Actor演變而來,代表了系統中已封裝的并行執行的對象,并行狀態遷移機CSTM組成結構模型如圖1所示。CSTM組成結構模型實現了對實時系統關于并發對象的靜態結構和動態行為的封裝,具有以下性質:CSTM始終代表系統中的活動對象,在系統中可以同時有多個對象并行執行。CSTM封裝了內部的一切細節,對所有的外部對象而言,CSTM提供了統一的對象交互接口,所有消息是通過接口接收和發送來實現的,通過統一外部接口封裝特定功能,可以自主決定自身行為可復用軟件模塊。

圖1 CSTM組成結構模型

本文對實時系統軟件系統進行關注點分離,將分離后關注點模塊化為組件。組件類型可分為兩類:①簡單組件(Primitive Component),其服務集中的服務都已經實現,這種組件在進行體系結構描述時,不需要細化描述,在組件層次定義中處于葉子結點位置;②復合組件(Composite Component),它是為描述和實現軟件系統的高層次組織關系而引入,其服務集中的服務一般需要若干抽象度相對較低的組件來細化描述。復合組件用于組件層次定義,它表示了OR聚合關系。在一般的情況下,至少有一個子組件在運行時被選中,且子組件作為請求功能的代表運行。在特殊的情況下,所有子組件可以是活動的。配置組件(ConfigurationCSTM)與策略組件(PolicyCSTM)之間是聚合關系如圖2所示。

圖2 配置CSTM與策略CSTM

復合組件(Composite Component)在樹形結構的層次定義中,它表示了OR聚合關系。至少有一個子組件在運行時被選中,且子組件作為請求功能的代表運行。在特殊的情況下,所有子組件可以是活動的。配置控制策略組件(CCPolicyCSTM)管理配置組件1(ConfigurationCSTM1)和配置組件2(ConfigurationCSTM2)的狀態是激活Active還是休眠Sleep,如圖3所示。

圖3 配置復合組件

在實時系統中,我們定義了一組CSTM來完成系統的功能,它包括通常機能CCPolicyCSTM,實時處理并行狀態遷移機 (Real-Time CSTM,RTCSTM),故障處理并行狀態遷移機(Fault Handle CSTM,FHCSTM),異常處理并行狀態遷移機(Error Handle CSTM,EHCSTM)。

依據CSTM組成結構模型,將分離后的模塊級橫切關注點模塊化為一個模塊級橫切組件中。圖4作為被模塊化為一個復合組件中的實時性關注點的示例,如圖4所示,在實時處理配置復合CSTM中存在4個子組件:配置控制策略、定時器、正常配置以及異常CSTM。所有子組件依次由4個方面組成:并發性(Concurrency)、狀態遷移(State Trans)、業務邏輯(AppLo-gic)和面向方面連接件(IAD)。在圖4中給出了子組件的動態行為。它動態顯示了“超時”情況。首先,除了異常CSTM之外各組件都處于活動狀態。然后,同時啟動定時器和正常配置CSTM。當超時事件發生,在獲得請求處理之前,配置更改為異常。圖4還顯示了正常的處理過程。

圖4 復合組件實時性關注點

2.3 基于方面連接件的組裝模型

目前實時系統軟件開發中,把重點都放在了系統的軟件結構和功能分解上,而忽略了實時系統環境下非功能性屬性的實現?;陉P注點分離思想,對實時系統進行功能關注和非功能關注的分離,將分離后的關注點模塊化為組件,如果就這樣將功能組件和橫切組件綁定或組合到一起,勢必造成分離后的功能組件和橫切組件又一次糾纏到系統中。為了避免這個問題的出現,本文將AOP引入到軟件連接件中,然后提出了一種基于方面連接件的組裝模型,實現功能組件和橫切組件綁定或組合過程的透明性,使得功能組件中不包含對模塊級橫切組件的代碼引用,達到組件模塊獨立重用目的?;诜矫孢B接件的組裝模型主要組成元素有:核心功能組件、模塊級組件和方面連接件,如圖5所示。圖5描述基于方面連接件的組裝模型,該模型利用面向方面的通知機制,在連接件的接口處加入切入點和通知,同時使用通知類型在連接點調用通知執行模塊級橫切組件提供的功能,在面向方面連接件中進行編織[11-12],從而保證了功能組件中不包含對橫切組件的代碼引用,達到組件模塊獨立重用目的。

2.4 方面代碼的轉換

本文通過方面間描述文件 (inter aspect description,IAD)來描述面向方面連接件,方面間文件是一種類似于AspectJ的方面編程語言ACV,采用基于ANSI C語言AOP擴展的編譯器[13]進行源程序級的程序轉換,變換成C語言編譯器能編譯的C代碼,然后和其它非方面模塊一起編譯得到系統的可執行文件。通過基于ANSI C語言AOP擴展的編譯器對以上已經模塊化的組件模塊進行編織,從而構建一個完整的系統。

圖5 基于方面連接件的組裝模型

3 實例與分析

為了說明上述基于AOP的實時系統關注點分離方法在實時系統軟件開發中的應用,下面以仿真門控系統為例來說明。在仿真門控系統中,進行關注點分離如下:①核心關注點分離,本系統核心主要包括用戶對系統通常機能狀態為待機、開鎖、開門、關門、關鎖的處理狀態進行實時控制;②橫切關注點分離,本系統要正常的實現其功能必須考慮實時性和故障性等側面非功能關注。下面給出了系統的用例圖,如圖6所示。

圖6 系統用例

本文應用基于方面連接件的組裝模型在連接件的接口處加入切入點和通知,使用通知類型在連接點調用通知執行模塊級橫切組件提供的功能,實現了組件綁定或組合過程中透明性,功能組件中不包含對橫切組件的代碼引用,達到組件模塊獨立重用目的。

3.1 State模式的應用

在實時系統軟件開發中,經常需要用多個狀態來描述系統的行為。這些狀態的狀態變化和狀態遷移形成了狀態機。采用基于State模式[14-15]的狀態機模型來描述實時系統。通常機能狀態機,定義一個StateManager類(CLoadSTM類),它定義了用戶程序需要的接口,并維護一個表示當前狀態的具體狀態的實例。外界只與此類的對象打交道,而不關心具體的狀態及其轉換。定義一個State抽象類(CLoadState類),規定了處理各外部事件的共同接口(每個事件對應一個虛函數)。CLoadState類中的方法要對應CLoadSTM類中的CLoadSTM_Trans()函數。

3.2 基于方面連接件的組裝模型的應用

3.2.1 通常機能

如圖6所示,通常機能是系統正常載入模塊,其擁有5個子狀態,每個狀態形成一個子類,每個狀態只關心它的下一個可能狀態,從而形成了狀態遷移的規則。在業務層對狀態遷移時,采用AOP技術,應用基于方面連接件的組裝模型在連接件的接口處加入切入點和通知,使用通知類型在連接點調用通知執行模塊級橫切組件提供的功能,實現組件間的綁定或組合,功能組件中不包含對橫切組件的代碼引用,達到了組件模塊獨立重用的目的。

(1)待機子狀態機核心功能的實現如下所示:

CLoadState*_original_CLockerWaitState_Open_Lock_Trans(CLockerWaitState*this,US mLockerID){}

(2)面向方面連接件(IAD)方面間描述文如下件所示:

/*lockerwait.acv*/

typeid CLockerWaitState;

typeid US;

typeid CLoadState;

/*連接點(JoinPoint)定義:待機狀態到開鎖狀態遷移方法*/

CLoadState*CLockerWait_Open_Lock_Trans(CLokerWait-State*this,US mLockerID)in LoadLockerWaitState;

/*方面(Aspect)定義 */

aspect asptLoadAction{

/*切入點(Pointcut)定義:待機狀態到開鎖狀態遷移時,故障處理PolicyCSTM通知Open_Lock*/

pointcut pCLockerWaitState_Open_Lock_Trans(

CLockerWaitState*this, US mLockerID):CLockerWait_Open_Lock_Trans(this,mLockerID);

/*通知(Advice)定義:待機狀態到開鎖狀態遷移時,故障處理PolicyCSTM通知Open_Lock*/

before(CLockerWaitState*this,US mLockerID):

pCLockerWaitState_Open_Trans(this,mLockerID){CLoadAction_NotifyFaultPolicy_OpenLock(mLockerID);}

}

(3)經ACV方面代碼編譯器編排后C代碼如下所示:

/*lockerwait.c*/

#include"LoadAction.h"http://需要手工添加

#include"LoadLockerWaitState.h"

/*方面文件轉換的函數宏的定義*/

#define_asptLoadAction_before_1(this,mLockerID){CLoad-Action_NnotifyFaultPolicy_OpenLock(mLockerID);}

/*核心功能組件函數*/

CLoadState*_original_CLockerWaitState_Open_Lock_Trans(CLockerWaitState*this,US mLockerID);

/*編織后的核心功能組件函數中加入業務功能函數和advice函數宏*/

CLoadState*CLockerWaitState_Open_Lock_Trans(Clocker WaitState*this,US mLockerID){

CLoadState*_around_ret_val_;

_asptLoadAction_before_1(this,mLockerID);

_around_ret_val_=_original_CLockerWaitState_Open_Lock_Trans(this,mLockerID);

return_around_ret_val_;

}

3.2.2 實時處理機能

仿真門控系統是一個復雜且具有實時性要求的實時系統,其邏輯正確性不僅依賴于計算結果的正確性,還取決于系統輸出結果的時間。圖7實時處理復合組件,當系統處于從開鎖狀態到開門狀態遷移時,起動定時器的Time_start()方法,當從開門狀態到關門狀態遷移時,起動定時器Time_cancel()方法,如果在一段規定的時間閾值內沒有關門事件發生,則實時處理PolicyCSTM的子狀態類CRealTimePolicyStartState執行Time_Up_Trans()方法,在該方法中通知實時異常配置組件激活,通常機能功能組件模塊休眠。

圖7 實時處理復合組件

通常ConfigurationCSTM從開鎖狀態到開門狀態遷移,通知實時處理PolicyCSTM啟動定時器Timer面向方面連接件方面間描述文件。通過ACV方面代碼編織器編排為C代碼。

3.2.3 故障處理機能

系統處于待機狀態,發現鎖故障,則在通常機能CSTM子狀態類CLockerWaitState核心功能函數_original_CLockerWait-State_Open_Lock_Trans()中連接點織入故障性處理Composite-CSTM,故障處理PolicyCSTM以事件形式通知硬件,此時故障處理CompositeCSTM在子狀態類CFaultPolicyOpenLockState執行方法Open_Door_Trans()中,通過全局變量GlockerOpenLock-Error進行判斷硬件是否發生故障,如果發生了故障則在該方法中激活故障異常處理功能模塊,將通常機能組件模塊休眠;如果未發生硬件故障,則激活通常機能組件模塊,觸發開鎖事件。故障處理復合組件如圖8所示。

圖8 故障處理復合組件

通常ConfigurationCSTM組件,從關門狀態到關鎖狀態遷移時通知故障處理 PolicyCSTM的面向方面連接件方面間描述文件。通過ACV方面代碼編織器編排為C代碼。

3.3 系統實現效果討論

本仿真系統的開發利用了VisualC++6.0IDE集成開發環境。我們通過此仿真界面來模擬和展示系統運行效果,其界面上的 OpenLock、OpenDoor、CloseDoor、CloseDoorLock 按鈕分別代表不同的功能操作,還模擬了故障發生情況設定。在MFC對話框類ClockerDlg中添加了定時器中斷消息WM_TIMEER,并在其對應的定時器事件OnTimer()中實時器的Timer_Clock(),這樣就可以按照Windows系統的時鐘模擬實現在實時控制系統中,對計時器鏈表中的每個計時器進行相應的加1或減1操作。本系統使用State模式解決了狀態管理的問題,同時使用基于方面連接件的組裝模型解決了模塊級橫切問題也取得了令人滿意的效果。

4 結束語

本文提出了一種基于AOP的實時系統關注點分離方法,該方法包括把實時系統中的狀態遷移、并發性、實時性和故障性等非功能關注從功能關注分離出來,較好地分離應用邏輯(功能性問題的解決)與橫切關注點(非功能性問題的解決)之間的干擾;將AOP引入到軟件連接件中,提出了基于方面連接件的組裝模型,應用該模型在連接件的接口處加入切入點和通知,使用通知類型在連接點調用通知執行模塊級橫切組件提供的功能,實現了組件綁定或組合過程中透明性,且功能組件中不包含對橫切組件的代碼引用,達到了組件模塊獨立重用的目的;使用State模式解決了實時系統軟件開發中的狀態管理問題,闡述了State模式在實例系統中的具體實現。最后通過對一個實時系統實例分析與實現,說明該方法在實際項目開發中的應用價值。

[1]Douglass B.Real-time UML:Developing efficient objects for embedded system[M].New York:Pearson Education,2003.

[2]楊林,李小堅.基于UML實時系統的分析和設計[J].計算機工程與設計,2007,28(20):5035-5038.

[3]何麗莉,金淳兆,馮鐵,等.關注分離問題研究綜述[J].計算機科學,2005,32(2):129-132.

[4]Dijkstra E W.A discipline of programming[M].Englewood Cliffs,NJ:Prentice-Hall,1976.

[5]曹東剛,梅宏.面向Aspect的程序設計——一種新的編程范型[J].計算機科學,2003,30(9):5-10.

[6]鄧阿群,厲小軍,俞歡軍,等.一種新型軟件設計方法AOP的研究[J].系統與電子技術,2004,26(7):970-975.

[7]Ivar Jacobson,Pan-Wei Ng.Aspect-oriented software development with user cases[M].Addison Wesley Professional,2004.

[8]莊巧莉,吳國華,冉宇瑤.面向AOP構建健壯可擴展的系統[J].計算機應用與軟件,2007,24(8):77-78.

[9]湛輝來.基于UML的實時系統并行對象模型[D].重慶:重慶大學,2003.

[10]溫昱.軟件架構設計[M].北京:電子工業出版社,2007.

[11]李慧,張京軍,李福榮.基于AOP的軟件體系結構適應性研究[J].微計算機信息,2008,24(3):273-274.

[12]SHENG Jin-fang,WANG Bin,CHEN Song-qiao.Aspectual component model and its assembly approaches[J].Computer Engineering,2006,32(5):39-40.

[13]GE Feng,ZHANG Yun-hua,ZHAO Guo-ping.Design and implementation of AOP weaver based on C language[J].Computer Applications and Software,2008,25(12):161-163.

[14]張玲.基于狀態機模型設計協作式工作流系統[J].北京機械工業學院學報,2007,22(3):16-18.

[15]XU Xiao-liang,WANG Le-yu,ZHOU Hong.Implemetation framework of finite state machines[J].Journal of Engineering Design,2003,10(5):251-255.

猜你喜歡
連接點關注點連接件
制作吸管塔臺
冬奧關注點
施工缺陷對半灌漿套筒連接件性能的影響*
尋找關注點 提高復習效率——以初中教學中“0”為關注點為例
基于A3航攝儀的小基高比影像連接點精提取技術研究
下半年尿素市場四大關注點
如何分析一組數據的集中和分散——數據分析的兩個關注點
基于文本閱讀的習作教學研究
創造沉浸學習的“連接點”
基于試驗設計的汽車懸架輕量化設計
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合