侯 彬,張立臣
(廣東工業(yè)大學 廣東 廣州 510006)
隨著計算機技術(shù)的不斷發(fā)展和應(yīng)用,軟件系統(tǒng)規(guī)模和復(fù)雜度日益增加。軟件設(shè)計人員在設(shè)計過程中不僅要考慮軟件系統(tǒng)的功能,而且要解決更難處理的可修改性、性能、可靠性、非功能性等問題。于是軟件開發(fā)人員開始研究軟件體系結(jié)構(gòu)來構(gòu)造復(fù)雜的大型軟件系統(tǒng)。
一般的軟件體系結(jié)構(gòu)的定義[1]為:軟件體系結(jié)構(gòu)為軟件系統(tǒng)提供了一個結(jié)構(gòu)、行為和屬性的高級抽象,并由構(gòu)成系統(tǒng)的元素描述、元素相互作用、指導(dǎo)元素集成模式以及模式約束組成。軟件體系結(jié)構(gòu)不僅指定了系統(tǒng)的組織結(jié)構(gòu)和拓撲結(jié)構(gòu),并且顯示了系統(tǒng)需求和構(gòu)成系統(tǒng)的元素之間的對應(yīng)關(guān)系,提供了一些設(shè)計決策的基本原理。
軟件體系結(jié)構(gòu)的特點:1)軟件系統(tǒng)結(jié)構(gòu)是一個高層次上的抽象,它并不涉及具體的系統(tǒng)結(jié)構(gòu),也不關(guān)心具體的實現(xiàn)。2)軟件體系結(jié)構(gòu)必須支持系統(tǒng)所要求的功能,在設(shè)計軟件體系結(jié)構(gòu)時,必須考慮系統(tǒng)的動態(tài)行為。3)在設(shè)計軟件體系結(jié)構(gòu)時,必須考慮現(xiàn)有系統(tǒng)的兼容性、安全性和可靠性,同時還要考慮系統(tǒng)以后的擴展性和伸縮性。所以應(yīng)在多個不同方向的目標中進行決策。
軟件系統(tǒng)建模技術(shù)的提出,其主要目的是為了解決因日益復(fù)雜的結(jié)構(gòu)模型而導(dǎo)致的系統(tǒng)設(shè)計方面的問題。從早期提出的以數(shù)據(jù)為中心的體系結(jié)構(gòu)模型,然后是以功能執(zhí)行為中心的體系結(jié)構(gòu)模型,逐步發(fā)展到以系統(tǒng)內(nèi)核為中心的面向?qū)ο蟮捏w系結(jié)構(gòu)模型。這些體系結(jié)構(gòu)模型的演變進化是為了不斷適應(yīng)計算機應(yīng)用領(lǐng)域的擴大而引出的新的問題需求。雖然有很多軟件系統(tǒng)建模技術(shù),但這些技術(shù)的共同目標就是提高實際應(yīng)用系統(tǒng)的開放性、集成性、適應(yīng)需求變化的擴展性以及開發(fā)與執(zhí)行的高效性。通過分析以上模型,并且又參考了很多現(xiàn)有的具有代表性的建模方式,最終提出一種新的基于中間層的建模方式。
[2-7]可以分析現(xiàn)有的幾種軟件體系結(jié)構(gòu)模型的技術(shù)特性,如:數(shù)據(jù)流、管道/過濾器、功能執(zhí)行中心、面向?qū)ο蟮饶P汀Mㄟ^分析可以得出,這些常用的模型都有自己的優(yōu)缺點,并不適合所有系統(tǒng),如一個大型的可以分成多個模塊的項目。每個模塊的功能不同,每個部分的體系結(jié)構(gòu)適合不同的模型。如:學校一卡通系統(tǒng)(即:只要手持一張卡,就可以在學校里如:餐廳,圖書館等刷卡的場所進行相關(guān)活動,整個系統(tǒng)通過終端的刷卡機記錄其全部刷卡情況)有若干模塊組成(餐廳管理系統(tǒng)、圖書館管理系統(tǒng)、教職工管理系統(tǒng)等),而且每個模塊適應(yīng)不同的體系結(jié)構(gòu)模型,而采用上面提到的任何一種模型都不太合適。因此,針對那些可以分成若干個相互依賴而不是很緊密的子模塊,每個子模塊又適合用不同的體系結(jié)構(gòu)建模的系統(tǒng)。因此,基于中間層的體系結(jié)構(gòu)模型構(gòu)建不同體系結(jié)構(gòu)系統(tǒng)。
計算機技術(shù)迅速發(fā)展。從硬件技術(shù)看,CPU速度越來越高,處理能力越來越強;從軟件技術(shù)看,應(yīng)用程序的規(guī)模不斷擴大,特別是Internet及WWW的出現(xiàn),使計算機的應(yīng)用范圍更廣,許多應(yīng)用程序需在網(wǎng)絡(luò)環(huán)境的異構(gòu)平臺上運行。這一切都對新一代的軟件開發(fā)提出了新的需求。在這種分布異構(gòu)環(huán)境中,通常存在多種硬件系統(tǒng)平臺(如PC,工作站,小型機等),在這些硬件平臺上又存在各種各樣的系統(tǒng)軟件(如不同的操作系統(tǒng)、數(shù)據(jù)庫、語言編譯器等),以及多種風格各異的用戶界面,這些硬件系統(tǒng)平臺還可能采用不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。如何把這些系統(tǒng)集成起來并開發(fā)新的應(yīng)用是一個非?,F(xiàn)實而困難的問題。
為解決分布異構(gòu)問題,提出了中間件(middle ware)的概念。中間件是位于平臺(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),如圖1所示,這些服務(wù)具有標準的程序接口和協(xié)議。針對不同的操作系統(tǒng)和硬件平臺,它們可以有符合接口和協(xié)議規(guī)范的多種實現(xiàn)。
圖1 中間件示意圖Fig.1 Schematic of middle ware
中間件具有如下特點:1)滿足大量應(yīng)用的需要;2)運行于多種硬件和OS平臺;3)支持分布計算,提供跨網(wǎng)絡(luò)、硬件和OS平臺的透明性的應(yīng)用或服務(wù)的交互;4)支持標準的協(xié)議;5)支持標準的接口。
由于標準接口對于可移植性和標準協(xié)議對于互操作性的重要性,中間件已成為許多標準化工作的主要部分。對于應(yīng)用軟件開發(fā),中間件遠比操作系統(tǒng)和網(wǎng)絡(luò)服務(wù)更為重要,中間件提供的程序接口定義了一個相對穩(wěn)定的高層應(yīng)用環(huán)境,不管底層的計算機硬件和系統(tǒng)軟件怎樣更新?lián)Q代,只要將中間件升級更新,并保持中間件對外的接口定義不變,應(yīng)用軟件幾乎不需任何修改,從而保護了企業(yè)在應(yīng)用軟件開發(fā)和維護中的重大投資。
基于類中間層的體系結(jié)構(gòu)模型如圖2所示。其思想是:1)把一個大的系統(tǒng)分成若干個子模塊,每個模塊根據(jù)其自身的特點選擇其合適的建模方式;2)在整個系統(tǒng)模型和應(yīng)用程序之間提供一個類似中間件的層次。底層的模塊形成的系統(tǒng)像上一層提供一些功能服務(wù),中間層向應(yīng)用界面提供接口,并為其提供服務(wù);3)各個子系統(tǒng)模塊之間的信息傳遞也是依靠中間層來完成的。
圖2 基于中間層的體系結(jié)構(gòu)模型Fig.2 Architecture model based on middle layer
以學校一卡通系統(tǒng)為實例,闡述基于中間層的體系結(jié)構(gòu)模型。系統(tǒng)的終端是一張卡片,里面儲存相關(guān)用戶信息。在開發(fā)中,系統(tǒng)中可以分成若干模塊,如:餐廳子系統(tǒng)模塊、圖書館子系統(tǒng)模塊、教職工管理子系統(tǒng)模塊等等。
餐廳子系統(tǒng)主要是往卡沖值、劃卡消費。此模塊用以數(shù)據(jù)為中心的體系結(jié)構(gòu)的模型即可。如圖3所示在以數(shù)據(jù)為中心的模型中,數(shù)據(jù)集合被置于整個軟件系統(tǒng)的核心位置,并以統(tǒng)一的數(shù)據(jù)描述形式提供各個功能部件共享。各個功能部件的開發(fā)過程完全獨立,部件之間存在一致的數(shù)據(jù)交換接口。
圖3 餐廳子系統(tǒng)的體系結(jié)構(gòu)模型Fig.3 Architecture model of restaurants subsystem
以數(shù)據(jù)為中心體系結(jié)構(gòu)模型的特點是[2]:1)系統(tǒng)的每個部件都有輸入端和輸出端。2)系統(tǒng)的各個部件是相互獨立的實體,它們之間不共享任何狀態(tài)信息,而且每個部件不必知道其上一步或下一步的部件是什么。除非是系統(tǒng)最前端的部件,否則部件不必知道系統(tǒng)輸入端的數(shù)據(jù)流是什么。3)一個部件只需要關(guān)注其本身輸入和輸出的數(shù)據(jù)流。4)系統(tǒng)結(jié)構(gòu)中功能上的聯(lián)系比較松散,無法實現(xiàn)功能復(fù)用,容易造成代碼冗余。另外數(shù)據(jù)接口標準難于符合所有的應(yīng)用需求,這使此模型建造的系統(tǒng)模型帶有局限性。
圖書館子系統(tǒng)主要是圖書的借入與借出,以功能執(zhí)行為中心的體系結(jié)構(gòu)的模型比較適合此模塊。該模型使用一個統(tǒng)一的執(zhí)行中心的形式來實現(xiàn)各類應(yīng)用或系統(tǒng)部件的數(shù)據(jù)和界面的共享,如圖4所示。
圖4 圖書館子系統(tǒng)的體系結(jié)構(gòu)模型Fig.4 Architecture model of library subsystem
以功能執(zhí)行為中心的體系結(jié)構(gòu)的模型最大的特點是實現(xiàn)了2個分離[4]:1)共有的計算和執(zhí)行功能與應(yīng)用程序的分離;2)用戶與系統(tǒng)的界面交互功能和應(yīng)用程序的分離。這2個分離優(yōu)化了代碼執(zhí)行效率避免了代碼冗余,便于實現(xiàn)風格一致的用戶界面。程序與數(shù)據(jù)庫的交換功能集中到執(zhí)行中心統(tǒng)一實現(xiàn),有利于數(shù)據(jù)的管理與維護,保證了數(shù)據(jù)的一致性。另外,這類模型既可實現(xiàn)數(shù)據(jù)的開放性,又具備了功能的開放性,系統(tǒng)的擴充性也較好。
教職工管理子系統(tǒng)由于教職工與其職位有關(guān),且一個教職工就是一個實體,雖然信息大部分都是個人自己獨特擁有,但其特征和行為大都相同,可以抽象出來組成一個教職工類型。所以,用面向?qū)ο蟮慕7绞奖容^適合。面向?qū)ο蟮捏w系結(jié)構(gòu)模型是把系統(tǒng)中的所有資源如數(shù)據(jù)、模塊等都看作是一個個對象。數(shù)據(jù)的表示方法和其相應(yīng)操作封裝在一個對象中,各對象之間通過信息傳遞發(fā)生聯(lián)系,它是實現(xiàn)對象之間相互聯(lián)系和作用的唯一手段,如圖5所示。
圖5 教職工管理子系統(tǒng)的體系結(jié)構(gòu)模型Fig.5 Architecture model of staff management subsystem
面向?qū)ο篌w系結(jié)構(gòu)模型的特點[5]:1)封裝功能:為信息隱藏提供具體的實現(xiàn)手段,用戶不必知道對象的內(nèi)部狀態(tài),只需了解其功能描述就可使用 (封裝是一種信息隱藏技術(shù),目的使對象的生產(chǎn)者和使用者分離,使對象的定義和實現(xiàn)分開),可減輕開發(fā)一個軟件系統(tǒng)的難度和周期。2)繼承性:提供了代碼共享的手段。避免編程人員重復(fù)編寫代碼,編程人員可以方便地共享已有的軟件資源和程序代碼,從而大幅度提高軟件的開發(fā)效率和減少今后的軟件維護工作量。3)錯誤的局部性:某對象出現(xiàn)錯誤,就可限制在本對象之內(nèi),不向外傳播。就對本對象進行修改,容易找到錯誤處理。4)調(diào)用的方式:對象和另一個對象主要通過過程調(diào)用進行交互,因此一個對象調(diào)用另一對象就必須知道該對象的標識。5)降低系統(tǒng)的效率:如果一旦改變了某一對象的標識符,就必須修改所有其他對象,并清除由此帶來的一些副作用。
圖6為一卡通系統(tǒng)的基于中間層的軟件體系機構(gòu)模型。
該實例系統(tǒng)用中間層用協(xié)調(diào)各個子模塊,對應(yīng)用層和子系統(tǒng)提供通用的接口,并且各個子系統(tǒng)模塊之間的信息傳遞依靠中間層完成。通過中間層,應(yīng)用層的設(shè)計就可以不必考慮子系統(tǒng)的模型差異,更便于開發(fā)。
圖6 一卡通系統(tǒng)的體系結(jié)構(gòu)模型Fig.6 Architecture model of card system
通過分析幾種常見的軟件體系結(jié)構(gòu)模型,提出了一種基于中間層的體系結(jié)構(gòu)建模方法。在實際應(yīng)用中,應(yīng)該具體問題具體分析,選擇合適的體系結(jié)構(gòu)。分析總結(jié)每種結(jié)構(gòu)模型的特征和優(yōu)缺點,并用它來指導(dǎo)工程實踐活動,有利于工程人員和軟件可發(fā)人員基于不同的應(yīng)用目的選取合適的體系結(jié)構(gòu),有利于提高軟件工程活動的質(zhì)量和效率。
參考文獻:
[1] 張友生.軟件體系結(jié)構(gòu)[M].北京:清華大學出版社,2002.
[2] 毛斐巧,齊德昱.軟件體系結(jié)構(gòu)風格研究現(xiàn)狀及存在的問題[J].計算機應(yīng)用研究,2008,25(18):2270-2273.MAO Fei-qiao,QI De-yu.Current research state and existing problems of software architectuml style[J].Application Research of Computers, 2008,25(8):2270-2273.
[3] 楊志明.幾種常見軟件體系結(jié)構(gòu)模型的分析[J].計算機工程與設(shè)計,2004,25(8):1325-1328.YANG Zhi-ming.Analysis of common software architectural styles[J].Computer Engineering and Design,2004,25(8):1325-1328.
[4] 周楓.軟件體系結(jié)構(gòu)模型的分析及研究[J].昆明理工大學學報:理工版,2002,25(8):88-92.ZHOU Feng.Analytical research on the software architecture model[J].Journal of Kunming University of Science and Technology:Science and Technology,2002,27(6):88-92.
[5] 乎西旦.居馬洪,蔣新革,古麗米拉.常用軟件體系結(jié)構(gòu)模型的分析[J].計算機工程與設(shè)計,2006,27(14):2624-2625.Huxidan Jumahong, JIANG Xin-ge, Gulimire.Analysis of software system structural model in common use[J].Computer Engineering and Design,2006,27(14):2624-2625.
[6] 張友生.層次式軟件體系結(jié)構(gòu)模型[J].計算機工程與應(yīng)用,2004,40(30):20-22.ZHANG You-sheng.Models of layered software architecture[J].Computer Engineering and Applications,2004,40(30):20-22.
[7] 張友生,李雄.網(wǎng)狀軟件體系結(jié)構(gòu)模型[J].計算機工程與應(yīng)用,2005,41(29):58-60.ZHANG You-sheng,LI Xiong.Models of graph software architecture [J].Computer Engineering and Application,2005,41(29):58-60.