當前位置:編程學習大全網 - 編程語言 - 求壹篇關於 軟件體系結構分析 的論文

求壹篇關於 軟件體系結構分析 的論文

軟件體系結構論文:壹種面向方面軟件體系結構模型

摘 要: 為了分離軟件系統中的核心關註點和橫切關註點,通過引入面向方面軟件開發的思想設計了壹種面向方面軟件體系結構模型,並詳細分析了該模型的三個基本構成單元,即構件、連接件和方面構件。最後通過壹個網上支付實例驗證了該模型具有壹定的理論意義和實用價值。

關鍵詞: 面向方面軟件體系結構;橫切關註點;構件;連接件;方面構件

20世紀60年代的軟件危機使得人們開始重視軟件工程的研究。起初,人們把軟件設計的重點放在數據結構和算法的選擇上,然而隨著軟件系統規模越來越大,對總體的系統結構設計和規格說明變得異常重要。隨著軟件危機程度的加劇,軟件體系結構(software architecture)這壹概念應運而生。軟件體系結構著眼於軟件系統的全局組織形式,在較高層次上把握系統各部分之間的內在聯系,將軟件開發的焦點從成百上千的代碼上轉移到粒度較大的體系結構元素及其交互的設計上。與傳統軟件技術相比,軟件體系結構理論的提出不僅有利於解決軟件系統日益增加的規模和復雜度的問題,有利於構件的重用,也有利於軟件生產率的提高。面向方面軟件開發(AOSD)認為系統是由核心關註點(corn concern)和橫切關註點(cross-cutting concern)有機地交織在壹起而形成的。核心關註點是軟件要實現的主要功能和目標,橫切關註點是那些與核心關註點之間有橫切作用的關註點,如系統日誌、事務處理和權限驗證等。AOSD通過分離系統的橫切關註點和核心關註點,使得系統的設計和維護變得容易很多。

Extremadura大學的Navasa等人[1]在2002年提出了將面向方面軟件開發技術引入到軟件體系結構的設計中,稱之為面向方面軟件體系結構(aspect oriented software architecture,AO-SA),這樣能夠結合兩者的優點,但是並沒有給出構建面向方面軟件體系結構的詳細方法。

盡管目前對於面向方面軟件體系結構這個概念尚未形成統壹的認識,但是壹般認為面向方面軟件體系結構在傳統軟件體系結構基礎上增加了方面構件(aspect component)這壹新的構成單元,通過方面構件來封裝系統的橫切關註點。目前國內外對於面向方面軟件體系模型的研究還相對較少,對它的構成單元模型的研究更少,通常只關註方面構件這壹構成單元。方面構件最早是由Lieberherr等人[2]提出的,它是在自適應可插拔構件(adaptive plug and play component,APPC)基礎之上通過引入面向方面編程(AOP)思想擴展壹個可更改的接口而形成的,但它關於請求接口和服務接口的定義很模糊,未能給出壹個清晰的方面構件模型。Pawlak等人[3]提出了壹個面向方面的框架,該框架主要包含了壹個方面構件模型———Java方面構件(Java aspect component,JAC),但該方面構件模型僅包含了切點(pointcut),並把AOP中裝備(advice)集成到了切點的表達式中,它主要從實現的角度進行了闡述,並沒有給出詳細的方面構件模型。本文沒有只關註面向方面軟件體系結構中方面構件這壹構成單元模型,還詳細分析了它的另外兩個構成單元,即構件和連接件,因為面向方面軟件體系結構各部分之間是相互關聯的。

1面向方面軟件體系結構相關概念

面向方面軟件體系結構涉及諸多概念,以下將分別介紹。軟件體系結構在軟件工程領域有著廣泛的影響,但當前仍未形成壹個統壹的、標準的定義。目前國內外普遍認可的看法是軟件體系結構包含構件、連接件和約束[4]。其中約束描述了體系結構配置和拓撲的要求,確定了體系結構的構件與連接件的連接關系。這樣就可以把軟件體系結構寫成

軟件體系結構(software architecture)=構件(components)+

連接件(connectors)+約束(constraints)

構件是軟件體系結構的基本元素之壹。壹般認為,構件是指具有壹定功能、可明確辨識的軟件單位,並且具備語義完整、語法正確、有可重用價值的特點,然而目前對於構件的具體結構及構成並沒有壹個統壹的標準[5],而且壹些主要的構件技術也沒有使用相同的構件類型。另外,當前被廣泛接受的構件定義並不包含具體的軟件構件模型(software component model)。例如,Szyperski等人[6]給出了軟件構件壹個很有名的定義:軟件構件是壹個僅帶特定契約接口和顯式語境依賴的結構單位,它可以獨立部署,易於第三方整合。但是關於軟件構件模型有壹個被普遍接受的觀點是:軟件構件是壹個具有服務提供和服務請求功能的軟件單元[7]。

連接件是軟件體系結構另壹個基本的構成元素,是用來建立構件間交互以及支配這些交互規則的構造模塊。連接件最先是由Shaw[8]提出來的,她建議把連接件作為軟件體系結構中第壹類實體,用來表示普通構件之間的交互關系。目前對於連接件尚未形成統壹的認識,盡管在軟件體系結構中強調了連接件存在的必要性,但是關於連接件模型的研究還很少,連接件的實際應用還不成熟。

面向方面軟件體系結構在傳統軟件體系結構的基礎上增加了方面構件單元。通常認為,方面構件是封裝了系統橫切關註點的壹類特殊的構件。目前關於方面構件模型的研究還處於起步階段。

2面向方面軟件體系結構模型

由於傳統軟件體系結構模型包含構件、連接件和約束,而面向方面軟件體系結構是在傳統軟件體系結構的基礎之上擴展了方面構件,所以面向方面軟件體系模型結構包含構件、連接件、方面構件和約束。其中約束描述了面向方面體系結構配置和拓撲的要求,確定了體系結構的構件、連接件和方面構件之間的連接關系,而構件、連接件、方面構件是它的三個基本的構成單元。以下對這三個構成單元的模型進行詳細的設計。

2.1構件模型

構件模型由以下幾個要素構成(圖1):

(a)端口。

構件的服務請求和服務提供功能是通過端口來實現的。端口是構件與外部環境進行交互的惟壹通道。壹般的構件模型通常采用兩種端口,即雙向端口和單向端口。在使用雙向端口的構件模型中,服務請求和服務提供功能可以在同壹個端口中實現。本文中的構件模型使用單向端口,此種端口分為請求端口和服務端口兩種類型。

(a)服務端口。構件通過服務端口向其他構件提供服務。構件通過服務端口向其他構件的請求消息進行應答,返回響應消息。每個服務端口對應壹個接口。

(b)請求端口。構件通過請求端口向其他構件請求服務。構件為了實現自己的業務功能,需要通過請求端口向其他構件發送請求消息。每個服務端口也對應壹個接口。

(b)接口。

它定義了壹個到多個業務功能。這些業務功能由服務端口進行提供,並由請求端口進行使用。壹個接口限定了壹個特定端口可以進行的交互功能,接口是構件間交互的契約。通常的接口類型有:Java Interface、WSDL 1.1 portTypes和WSDL 2.0 Interfaces等,也可以自定義接口類型。

(c)屬性。

與類或對象相似,構件也具有屬性,屬性可以在構件使用前進行配置,它能夠反映構件在交互過程中狀態的變化。

2.2連接件模型

連接件是用來建立構件間交互以及支配這些交互規則的體系結構構造模塊。連接件為構件間信息交互提供傳輸和路由服務。在最簡單的情況下,構件之間可以直接完成交互,這時體系結構中的連接件就退化為直接連接。在更為復雜的情況下,構件間交互的處理和維持都需要連接件來實現。對於構件而言,連接件是構件的粘合劑,是構件交互的實現,也可以看做是壹種特殊的構件[8]。與構件相似,連接件也具有端口。連接件的端口可分為兩種類型,即源端口(source port)和目標端口(target port)。源端口用於接收構件請求端口中的消息,目標端口用於向構件服務端口中輸入消息。連接件通常需要使用壹種合適的綁定(binding)機制,構件的請求端口使用這種綁定機制來描述服務請求的方法,構件的服務端口也使用這種機制來描述構件進行請求的方式。常用的綁定機制有:WebService Binding和JMS Binding等,也可以自定義綁定機制。與構件壹樣,連接件也具有屬性,來表示構件間交互的狀態變化,如圖2所示。

2.3復合構件模型

構件可分為兩種,即原子構件和復合構件。前者是不可再分的構件。後者是可再分構件,它封裝了若幹個子構件。子構件間通過連接件相互連接,且子構件的端口也可以暴露成為復合構件的端口,子構件也可能是復合構件。如圖3所示:復合構件A包含兩個子構件B和D,子構件B和D通過連接件C進行相連,構件B的服務端口E暴露成為復合構件A的服務端口F,其請求端口G暴露成為A的請求端口H。

2.4方面構件模型

方面構件是面向方面軟件體系結構的壹個核心的構成單元,它封裝了橫切關註點,這是與傳統軟件體系結構最大的不同之處。圖4給出了方面構件模型,與普通構件壹樣,方面構件也有服務端口和請求端口以及屬性,但是它還有普通構件所沒有的方面端口。當壹個構件具有壹個方面端口時,即可認為此構件就是方面構件。壹個方面端口中包含若幹個方面,這與壹般面向方面編程(AOP)技術中方面概念有所不同。面向方面編程具有以下四個基本概念:方面(aspect)、連接點(joinpoint)、通知(advice)和切點(pointcut)。連接點是應用程序執行過程壹個定義明確的位置,如方法調用是壹種典型的連接點。切點是壹系列連接點的集合,是方面的作用點。通知表述了在切點所選定的連接點處要執行的動作,常見通知類型有before、around和after等,分表代表在連接點之前、連接點附近和連接點之後執行相應的通知代碼。方面是用來描述和實現橫切關註點的基本單位,由切點和通知構成。方面端口中的方面橫切關註的是構件,這與壹般AOP(如AspectJ)橫切關註的對象(object)不同,由於構件能夠表達對象所不能表達的請求服務的能力[9],這使得方面端口中方面所采用的連接點模型和切點語言具有很大的不同。

2.4.1連接點模型

該連接點模型包含兩種不同類型的連接點,即構件服務端口中的服務提供操作和請求端口的服務請求操作。由於構件的內部結構通常被視為黑盒,因此連接點模型應該僅考慮構件的外部可見元素,如構件請求端口和服務端口中的服務操作。如果連接點模型包含構件的屬性,那麽它將會破壞構件的分裝性。

2.4.2切點語言

用來選用連接點的切點語言基於切點表達式,表1給出了切點的五個組成部分,即component、jp_type、port、interface和service,然後分別對其進行了說明。其中,jp_type代表選用的連接點類型,可以是請求端口中的服務、服務端口中的服務或所有端口中的服務,詳細如表1。表2給出了切點語言的壹些例子,其中正則表達式基於java.util.regexp包。

2.5面向方面軟件體系結構模型

面向方面軟件體系結構由構件、連接件、方面構件組成,詳細請參見圖6。

3基於面向方面軟件體系結構模型的網上支付實例

近年來,網上購物發展迅速,網上支付是消費者主要的支付手段之壹,圖7給出了基於面向方面軟件體系結構的網上支付模型,它由四個原子構件,即壹個復合構件、兩個方面構件和三個連接件組成。其中WebClientComponent代表客戶端構件,它可以向網上銀行構件WebBankComponent請求AccountService()服務,該服務有三個參數,即username、password、cost,分別對應於用戶的網上銀行賬戶名、密碼及購買商品的消費金額。

〈component name="WebClientComponent"〉〈required.port name="WebClientRequest"〉

〈java.interface interface="AccountServiceInterface"〉〈service name="AccountService()"〉

〈param name="username"type="string"/〉

〈param name="password"type="string"/〉

〈param name="cost"type="float"/〉

〈/service〉〈/java.interface〉

〈/required.port〉

〈/component〉

連接件AccountServiceConnector用於連接客戶端構件和網上銀行構件,它采用WebServiceBinding綁定機制。

〈connector name="AccountServiceConnector"binding="WebServi-ceBinding"/〉

〈source name="S"/〉〈target name="T"〉

〈/connector〉

〈connect.source from="WebClientComponent.WebClientRequest"to="S"/〉

〈connect.target from="T"to="WebBankComponent.Bank-Re-sponse"/〉

網上銀行構件是壹個復合構件,由賬戶服務構件Account-ServiceComponent、賬戶數據庫連接件AccountDBConnector和賬戶數據庫構件AccountDBComponent組裝而成。其中該復合構件的服務端口也使用接口AccountServiceInterface,這是為了兼容客戶端構件請求端口使用的接口。

身份驗證構件AuthenticationComponent用於驗證用戶的身份信息,它通過UserInfoConnector連接件訪問用戶信息數據庫構件UserInfoDBComponent。

pointcut="WebBankComponent;BankResponse;AccountServiceInterface;AccountService()"

是該方面構件的方面端口中使用切點的表達式。

為了保證數據庫構件UserInfoDBComponent和AccountDB-Component的安全性,方面構件SecurityComponent使用方面端口Security監視這兩個構件的服務端口,使得在這兩個構件服務調用之前增加日誌和事務功能,而日誌和事務功能在系統中通常表現為橫切關註點,面向方面軟件體系結構能夠對它進行很好的封裝,便於設計和維護。

〈aspect.component name="SecurityComponent"〉〈aspect.port name="Security"〉〈aspect〉〈pointcut="UserInfoDBComponent;UserInfoResponse;*;*|Ac-countDBComponent;AccountDBResponse;*;*"/〉〈advice.role="before"action="Log()"/〉〈advice.role="before"action="Transaction()"/〉〈/aspect〉〈/aspect.port〉〈required.port name="UserInfoRequest"/〉〈/aspect.component〉

4結束語

本文給出了壹種面向方面軟件體系結構模型,詳細設計了它的三個基本構成單元模型,即構件、連接件和方面構件;最後通過壹個網上支付實例驗證了該模型有效性和實用性,為面向方面軟件體系結構的實際應用奠定了壹定的基礎。筆者將繼續完善該模型的相關理論,研究面向方面軟件體系結構的工程化應用方法。

參考文獻:

[1]FABRESSE L,DONY C,HUCHARD M.Foundations of a simpleand unified component-oriented language[J].Journal of ComputerLanguages,Systems&Structures,2008,34(2-3):130-149.

[2]LIEBERHERR K,LORENZ D,MEZINI M.Programming with as-pectual components,T R NU-CSS-99-01[R].[S.l.]:NoutheastamUniversity,1999.

[3]PAWLAK R,SERNTURIER L,DUCHIEN L D,et al.JAC:an as-pect-based distributed dynamic framework[J].Software Practiceand Experiences,2004,34(12):1119-1148.

[4]李千目.軟件體系結構設計[M].北京:清華大學出版社,2008.

[5]馬亮,孫春艷.軟件構件概念的變遷[J].計算機科學,2002,29(4):28-30.

[6]SZYPERSKI C,GRUNTZ D,MURER S.Component software:be-yond object-oriented programming[M].2nd ed.[S.l.]:Addison-Wesley,2002.

[7]LAU K K,WANG Z.Software component models[J].IEEE TransSoft Eng,2007,33(10):709-724.

[8]SHAW M.Procedure calls are the assembly language of software in-terconnection:connectors deserve first-class status[C]//Proc of InICSE Workshop on Studies of Software Design.1993:17-32.

[9]NAVASA A,P?REZ M A,MURILLO J M,et al.Aspect orientedsoftware architecture:a structural perspective[C]//Proc of Workshopon Early Aspects.2002.

  • 上一篇:補全編程,小學生算術測試系統?
  • 下一篇:模具設計專業就業前景
  • copyright 2024編程學習大全網