免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
軟件體系結(jié)構(gòu)

      軟件體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)構(gòu)件是被加工的信息,連接構(gòu)件把體系結(jié)構(gòu)的不同部分組組合連接起來。這一定義注重區(qū)分處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件,這一方法在其他的定義和方法中基本上得到保持。

一、軟件體系結(jié)構(gòu)的定義

  雖然軟件體系結(jié)構(gòu)已經(jīng)在軟件工程領(lǐng)域中有著廣泛的應(yīng)用,但迄今為止還沒有一個(gè)被大家所公認(rèn)的定義。許多專家學(xué)者從不同角度和不同側(cè)面對軟件體系結(jié)構(gòu)進(jìn)行了刻畫,較為典型的定義有:
  (1)Dewayne Perry和A1ex Wo1f曾這樣定義:軟件體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)構(gòu)件是被加工的信息,連接構(gòu)件把體系結(jié)構(gòu)的不同部分組組合連接起來。這一定義注重區(qū)分處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件,這一方法在其他的定義和方法中基本上得到保持。

    (2)Mary Shaw和David Garlan認(rèn)為軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過程中的一個(gè)層次,這一層次超越計(jì)算過程中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。體系結(jié)構(gòu)問題包括總體組織和全局控制、通訊協(xié)議、同步、數(shù)據(jù)存取,給設(shè)計(jì)元素分配特定功能,設(shè)計(jì)元素的組織,規(guī)模和性能,在各設(shè)計(jì)方案間進(jìn)行選擇等。軟件體系結(jié)構(gòu)處理算法與數(shù)據(jù)結(jié)構(gòu)之上關(guān)于整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和描述方面的一些問題,如全局組織和全局控制結(jié)構(gòu)、關(guān)于通訊、同步與數(shù)據(jù)存取的協(xié)議,設(shè)計(jì)構(gòu)件功能定義,物理分布與合成,設(shè)計(jì)方案的選擇、評估與實(shí)現(xiàn)等
  (3)Kruchten指出,軟件體系結(jié)構(gòu)有四個(gè)角度,它們從不同方面對系統(tǒng)進(jìn)行描述:概念角度描述系統(tǒng)的主要構(gòu)件及它們之間的關(guān)系;模塊角度包含功能分解與層次結(jié)構(gòu);運(yùn)行角度描述了一個(gè)系統(tǒng)的動(dòng)態(tài)結(jié)構(gòu);代碼角度描述了各種代碼和庫函數(shù)在開發(fā)環(huán)境中的組織。
 ?。?)Hayes Roth則認(rèn)為軟件體系結(jié)構(gòu)是一個(gè)抽象的系統(tǒng)規(guī)范,主要包括用其行為來描述的功能構(gòu)件和構(gòu)件之間的相互連接、接口和關(guān)系。
 ?。?)David Garlan和Dewne Perry于1995年在IEEE軟件工程學(xué)報(bào)上又采用如下的定義:軟件體系結(jié)構(gòu)是一個(gè)程序/系統(tǒng)各構(gòu)件的結(jié)構(gòu)、它們之間的相互關(guān)系以及進(jìn)行設(shè)計(jì)的原則和隨時(shí)間進(jìn)化的指導(dǎo)方針。
  (6)Barry Boehm和他的學(xué)生提出,一個(gè)軟件體系結(jié)構(gòu)包括一個(gè)軟件和系統(tǒng)構(gòu)件,互聯(lián)及約束的集合;一個(gè)系統(tǒng)需求說明的集合;一個(gè)基本原理用以說明這一構(gòu)件,互聯(lián)和約束能夠滿足系統(tǒng)需求。
 ?。?)1997年,Bass,Ctements和Kazman在《使用軟件體系結(jié)構(gòu)》一書中給出如下的定義:一個(gè)程序或計(jì)算機(jī)系統(tǒng)的軟件體系結(jié)構(gòu)包括一個(gè)或一組軟件構(gòu)件、軟件構(gòu)件的外部的可見特性及其相互關(guān)系。其中,"軟件外部的可見特性"是指軟件構(gòu)件提供的服務(wù)、性能、特性、錯(cuò)誤處理、共享資源使用等。

二、軟件體系結(jié)構(gòu)的發(fā)展歷史

      與最初的大型中央主機(jī)相適應(yīng),最初的軟件結(jié)構(gòu)體系也是Mainframe結(jié)構(gòu),該結(jié)構(gòu)下客戶、數(shù)據(jù)和程序被集中在主機(jī)上,通常只有少量的GUI界面,對遠(yuǎn)程數(shù)據(jù)庫的訪問比較困難。隨著PC的廣泛應(yīng)用,該結(jié)構(gòu)逐漸在應(yīng)用中被淘汰。

      在80年代中期出現(xiàn)了Client/Server分布式計(jì)算結(jié)構(gòu),應(yīng)用程序的處理在客戶(PC機(jī))和服務(wù)器(Mainframe或Server)之間分擔(dān);請求通常被關(guān)系型數(shù)據(jù)庫處理,PC機(jī)在接受到被處理的數(shù)據(jù)后實(shí)現(xiàn)顯示和業(yè)務(wù)邏輯;系統(tǒng)支持模塊化開發(fā),通常有GUI界面。Client/Server結(jié)構(gòu)因?yàn)槠潇`活性得到了極其廣泛的應(yīng)用。但對于大型軟件系統(tǒng)而言,這種結(jié)構(gòu)在系統(tǒng)的部署和擴(kuò)展性方面還是存在著不足。

      Internet的發(fā)展給傳統(tǒng)應(yīng)用軟件的開發(fā)帶來了深刻的影響?;贗nternet和Web的軟件和應(yīng)用系統(tǒng)無疑需要更為開放和靈活的體系結(jié)構(gòu)。隨著越來越多的商業(yè)系統(tǒng)被搬上Internet,一種新的、更具生命力的體系結(jié)構(gòu)被廣泛采用,這就是為我們所知的“三層/多層計(jì)算”。

      。客戶層(client tier) 用戶接口和用戶請求的發(fā)出地,典型應(yīng)用是網(wǎng)絡(luò)瀏覽器和胖客戶(如Java程序)
      。服務(wù)器層(server tier) 典型應(yīng)用是Web服務(wù)器和運(yùn)行業(yè)務(wù)代碼的應(yīng)用程序服務(wù)器
      。數(shù)據(jù)層(data tier) 典型應(yīng)用是關(guān)系型數(shù)據(jù)庫和其他后端(back-end)數(shù)據(jù)資源, 如 OracleSAP、 R/3等

      三層體系結(jié)構(gòu)中,客戶(請求信息)、程序(處理請求)和數(shù)據(jù)(被操作)被物理地隔離。三層結(jié)構(gòu)是個(gè)更靈活的體系結(jié)構(gòu),它把顯示邏輯從業(yè)務(wù)邏輯中分離出來,這就意味著業(yè)務(wù)代碼是獨(dú)立的,可以不關(guān)心怎樣顯示和在哪里顯示。業(yè)務(wù)邏輯層現(xiàn)在處于中間層,不需要關(guān)心由哪種類型的客戶來顯示數(shù)據(jù),也可以與后端系統(tǒng)保持相對獨(dú)立性,有利于系統(tǒng)擴(kuò)展。三層結(jié)構(gòu)具有更好的移植性,可以跨不同型的平臺工作,允許用戶請求在多個(gè)服務(wù)器間進(jìn)行負(fù)載平衡。三層結(jié)構(gòu)中安全性也更易于實(shí)現(xiàn),因?yàn)閼?yīng)用程序已經(jīng)同客戶隔離。應(yīng)用程序服務(wù)器是三層/多層體系結(jié)構(gòu)的組成部分,應(yīng)用程序服務(wù)器位于中間層。


      如圖所示,應(yīng)用程序服務(wù)器運(yùn)行于瀏覽器和數(shù)據(jù)資源之間,一個(gè)簡單的實(shí)例是,顧客從瀏覽器中輸入一個(gè)定單,web服務(wù)器將該請求發(fā)送給應(yīng)用程序服務(wù)器,由應(yīng)用程序服務(wù)器執(zhí)行處理邏輯,并且獲取或更新后端用戶數(shù)據(jù)。
摘自http://www.huihoo.com/middleware/application_server/1/a1.html

三、軟件體系結(jié)構(gòu)的興起

  六十年代的軟件危機(jī)使得人們開始重視軟件工程的研究。起初,人們把軟件設(shè)計(jì)的重點(diǎn)放在數(shù)據(jù)結(jié)構(gòu)和算法的選擇上,隨著軟件系統(tǒng)規(guī)模越來越大、越來越復(fù)雜,整個(gè)系統(tǒng)的結(jié)構(gòu)和規(guī)格說明顯得越來越重要。軟件危機(jī)的程度日益加劇,現(xiàn)有的軟件工程方法對此顯得力不從心。對于大規(guī)模的復(fù)雜軟件系統(tǒng)來說,對總體的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和規(guī)格說明比起對計(jì)算的算法和數(shù)據(jù)結(jié)構(gòu)的選擇已經(jīng)變得明顯重要得多。在此種背景下,人們認(rèn)識到軟件體系結(jié)構(gòu)的重要性,并認(rèn)為對軟件體系結(jié)構(gòu)的系統(tǒng)、深入的研究將會成為提高軟件生產(chǎn)率和解決軟件維護(hù)問題的新的最有希望的途徑。

  自從軟件系統(tǒng)首次被分成許多模塊,模塊之間有相互作用,組合起來有整體的屬性,就具有了體系結(jié)構(gòu)。好的開發(fā)者常常會使用一些體系結(jié)構(gòu)模式作為軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)策略,但他們并沒有規(guī)范地、明確地表達(dá)出來,這樣就無法將他們的知識與別人交流。軟件體系結(jié)構(gòu)是設(shè)計(jì)抽象的進(jìn)一步發(fā)展,滿足了更好地理解軟件系統(tǒng),更方便地開發(fā)更大、更復(fù)雜的軟件系統(tǒng)的需要。

  事實(shí)上,軟件總是有體系結(jié)構(gòu)的,不存在沒有體系結(jié)構(gòu)的軟件。體系結(jié)構(gòu)(Architecture)一詞在英文里就是"建筑"的意思。把軟件比作一座樓房,從整體上講,是因?yàn)樗谢A(chǔ)、主體和裝飾,即操作系統(tǒng)之上的基礎(chǔ)設(shè)施軟件、實(shí)現(xiàn)計(jì)算邏輯的主體應(yīng)用程序、方便使用的用戶界面程序。從細(xì)節(jié)上來看每一個(gè)程序也是有結(jié)構(gòu)的。早期的結(jié)構(gòu)化程序就是以語句組成模塊,模塊的聚集和嵌套形成層層調(diào)用的程序結(jié)構(gòu),也就是體系結(jié)構(gòu)。結(jié)構(gòu)化程序的程序(表達(dá))結(jié)構(gòu)和(計(jì)算的)邏輯結(jié)構(gòu)的一致性及自頂向下開發(fā)方法自然而然地形成了體系結(jié)構(gòu)。由于結(jié)構(gòu)化程序設(shè)計(jì)時(shí)代程序規(guī)模不大,通過強(qiáng)調(diào)結(jié)構(gòu)化程序設(shè)計(jì)方法學(xué),自頂向下、逐步求精,并注意模塊的耦合性就可以得到相對良好的結(jié)構(gòu),所以,并未特別研究軟件體系結(jié)構(gòu)。

  我們可以作個(gè)簡單的比喻,結(jié)構(gòu)化程序設(shè)計(jì)時(shí)代是以磚、瓦、灰、沙、石、預(yù)制梁、柱、屋面板蓋平房和小樓,而面向?qū)ο?/a>時(shí)代以整面墻、整間房、一層樓梯的預(yù)制件蓋高樓大廈。構(gòu)件怎樣搭配才合理?體系結(jié)構(gòu)怎樣構(gòu)造容易?重要構(gòu)件有了更改后,如何保證整棟高樓不倒?每種應(yīng)用領(lǐng)域需要什么構(gòu)件(醫(yī)院、工廠、旅館)?有哪些實(shí)用、美觀、強(qiáng)度、造價(jià)合理的構(gòu)件骨架使建造出來的建筑(即體系結(jié)構(gòu))更能滿足用戶的需求?如同土木工程進(jìn)入到現(xiàn)代建筑學(xué)一樣,軟件也從傳統(tǒng)的軟件工程進(jìn)入到現(xiàn)代面向對象的軟件工程,研究整個(gè)軟件系統(tǒng)的體系結(jié)構(gòu),尋求建構(gòu)最快、成本最低、質(zhì)量最好的構(gòu)造過程。
  軟件體系結(jié)構(gòu)雖脫胎于軟件工程,但其形成同時(shí)借鑒了計(jì)算機(jī)體系結(jié)構(gòu)和網(wǎng)絡(luò)體系結(jié)構(gòu)中很多寶貴的思想和方法,最近幾年軟件體系結(jié)構(gòu)研究已完全獨(dú)立于軟件工程的研究,成為計(jì)算機(jī)科學(xué)的一個(gè)最新的研究方向和獨(dú)立學(xué)科分支。軟件體系結(jié)構(gòu)研究的主要內(nèi)容涉及軟件體系結(jié)構(gòu)描述、軟件體系結(jié)構(gòu)風(fēng)格、軟件體系結(jié)構(gòu)評價(jià)和軟件體系結(jié)構(gòu)的形式化方法等。解決好軟件的重用、質(zhì)量和維護(hù)問題,是研究軟件體系結(jié)構(gòu)的根本目的。

四、軟件體系結(jié)構(gòu)應(yīng)用現(xiàn)狀

1 形成研究熱點(diǎn),仍處于非形式化水平

  自20世紀(jì)90年代后期以來,軟件體系結(jié)構(gòu)的研究成為一個(gè)熱點(diǎn)。廣大軟件工作者已經(jīng)認(rèn)識到軟件體系結(jié)構(gòu)研究的重大意義和它對軟件系統(tǒng)設(shè)計(jì)開發(fā)的重要性,開展了很多研究和實(shí)踐工作。

  從軟件體系結(jié)構(gòu)研究的現(xiàn)狀來看,當(dāng)前的研究和對軟件體系結(jié)構(gòu)的描述,在很大程度上來說還停留在非形式化的基礎(chǔ)上。軟件構(gòu)架師仍然缺乏必要的工具,這種工具應(yīng)該是顯式描述的、有獨(dú)立性的形式化工具。

  在目前通用的軟件開發(fā)方法中,其描述通常是用非形式化的圖和文本,不能描述系統(tǒng)期望的存在于構(gòu)件之間的接口,不能描述不同的組成系統(tǒng)的組合關(guān)系的意義。難以被開發(fā)人員理解,更不能用來分析其一致性和完整性等特性。

  當(dāng)一個(gè)軟件系統(tǒng)中的構(gòu)件之間幾乎以一種非形式化的方法描述時(shí),系統(tǒng)的重用性也會受到影響,在設(shè)計(jì)一個(gè)系統(tǒng)結(jié)構(gòu)過程中的努力很難移植到另一個(gè)系統(tǒng)中去。對系統(tǒng)構(gòu)件和連接關(guān)系的結(jié)構(gòu)化假設(shè)沒有得到顯式的、形式化的描述時(shí),把這樣的系統(tǒng)構(gòu)件移植到另一個(gè)系統(tǒng)中去將是有風(fēng)險(xiǎn)的,甚至是不可能的。

2 軟件體系結(jié)構(gòu)的形式化方法研究

  軟件體系結(jié)構(gòu)研究如果僅僅停留在非形式化的框圖階段,已經(jīng)難以適應(yīng)進(jìn)一步發(fā)展的需要。為支持基于體系結(jié)構(gòu)的開發(fā),需要有形式化建模符號、體系結(jié)構(gòu)說明的分析與開發(fā)工具。從軟件體系結(jié)構(gòu)研究的現(xiàn)狀來看,在這一領(lǐng)域近來已經(jīng)有不少進(jìn)展,其中比較有代表性的是美國卡耐基梅隆大學(xué)(Carnegie Mellon University)的Robert J.A11en于l997年提出的Wright系統(tǒng)。Wright是-種結(jié)構(gòu)描述語言,該語言基于一種形式化的、抽象的系統(tǒng)模型,為描述和分析軟件體系結(jié)構(gòu)和結(jié)構(gòu)化方法提供了一種實(shí)用的工具。Wright主要側(cè)重于描述系統(tǒng)的軟件構(gòu)件和連接的結(jié)構(gòu)、配置和方法。它使用顯式的、獨(dú)立的連接模型來作為交互的方式,這使得該系統(tǒng)可以用邏輯謂詞符號系統(tǒng),而不依賴特定的系統(tǒng)實(shí)例來描述系統(tǒng)的抽象行為。該系統(tǒng)還可以通過一組靜態(tài)檢查來判斷系統(tǒng)結(jié)構(gòu)規(guī)格說明的一致性和完整性。從這些特性的分析來說,Wright系統(tǒng)的確適用于對大型系統(tǒng)的描述和分析。

3 軟件體系結(jié)構(gòu)的建模研究

  研究軟件體系結(jié)構(gòu)的首要問題是如何表示軟件體系結(jié)構(gòu),即如何對軟件體系結(jié)構(gòu)建模。根據(jù)建模的側(cè)重點(diǎn)的不同,可以將軟件體系結(jié)構(gòu)的模型分為5種:結(jié)構(gòu)模型、框架模型、動(dòng)態(tài)模型、過程模型和功能模型。在這5個(gè)模型中,最常用的是結(jié)構(gòu)模型和動(dòng)態(tài)模型。

(1)結(jié)構(gòu)模型
  這是一個(gè)最直觀、最普遍的建模方法。這種方法以體系結(jié)構(gòu)的構(gòu)件、連接件和其他概念來刻畫結(jié)構(gòu),并力圖通過結(jié)構(gòu)來反映系統(tǒng)的重要語義內(nèi)容,包括系統(tǒng)的配置、約束、隱含的假設(shè)條件、風(fēng)格、性質(zhì)。研究結(jié)構(gòu)模型的核心是體系結(jié)構(gòu)描述語言。
(2)框架模型
  框架模型與結(jié)構(gòu)模型類似,但它不太側(cè)重描述結(jié)構(gòu)的細(xì)節(jié)而更側(cè)重于整體的結(jié)構(gòu)??蚣苣P椭饕砸恍┨厥獾膯栴}為目標(biāo)建立只針對和適應(yīng)該問題的結(jié)構(gòu)。
(3)動(dòng)態(tài)模型
  動(dòng)態(tài)模型是對結(jié)構(gòu)或框架模型的補(bǔ)充,研究系統(tǒng)的"大顆粒"的行為性質(zhì)。例如,描述系統(tǒng)的重新配置或演化。動(dòng)態(tài)可能指系統(tǒng)總體結(jié)構(gòu)的配置、建立或拆除通信通道或計(jì)算的過程。這類系統(tǒng)常是激勵(lì)型的。
(4)過程模型
  過程模型研究構(gòu)造系統(tǒng)的步驟和過程。因而結(jié)構(gòu)是遵循某些過程腳本的結(jié)果。
(5)功能模型
  該模型認(rèn)為體系結(jié)構(gòu)是由一組功能構(gòu)件按層次組成,下層向上層提供服務(wù)。它可以看作是一種特殊的框架模型。
這5種模型各有所長,也許將5種模型有機(jī)地統(tǒng)一在一起,形成一個(gè)完整的模型來刻畫軟件體系結(jié)構(gòu)更合適。例如,Kruchten在1995年提出了一個(gè)"4+1"的視角模型。"4+1"模型從5個(gè)不同的視角包括邏輯視角、過程視角、物理視角、開發(fā)視角和場景視角來描述軟件體系結(jié)構(gòu)。每一個(gè)視角只關(guān)心系統(tǒng)的一個(gè)側(cè)面,5個(gè)視角結(jié)合在一起才能夠反映系統(tǒng)的軟件體系結(jié)構(gòu)的全部內(nèi)容。"4+1"模型如圖1所示。


 圖1 "4+1"模型

4 發(fā)展基于體系結(jié)構(gòu)的軟件開發(fā)模型

  軟件開發(fā)模型是跨越整個(gè)軟件生存周期的系統(tǒng)開發(fā)、運(yùn)行、維護(hù)所實(shí)施的全部工作和任務(wù)的結(jié)構(gòu)框架,給出了軟件開發(fā)活動(dòng)各階段之間的關(guān)系。目前,常見的軟件開發(fā)模型大致可分為三種類型:

 ?。?)以軟件需求完全確定為前提的瀑布模型。
 ?。?)在軟件開發(fā)初始階段只能提供基本需求時(shí)采用的漸進(jìn)式開發(fā)模型,如螺旋模型等。
 ?。?)以形式化開發(fā)方法為基礎(chǔ)的變換模型。

  所有開發(fā)方法都是要解決需求與實(shí)現(xiàn)之間的差距。但是,這三種類型的軟件開發(fā)模型都存在這樣或那樣的缺陷,不能很好地支持基于軟件體系結(jié)構(gòu)的開發(fā)過程。因此,研究人員在發(fā)展基于體系結(jié)構(gòu)的軟件開發(fā)模型方面做了一定的工作。例如,為了形象地表示體系結(jié)構(gòu)的生命周期,北京郵電大學(xué)的周瑩新博士建立了一個(gè)軟件體系結(jié)構(gòu)的生命周期模型,該模型如圖2所示。 

圖2 軟件體系結(jié)構(gòu)的生命周期模型

5 軟件產(chǎn)品線體系結(jié)構(gòu)的研究

  軟件體系結(jié)構(gòu)的開發(fā)是大型軟件系統(tǒng)開發(fā)的關(guān)鍵環(huán)節(jié)。體系結(jié)構(gòu)在軟件生產(chǎn)線的開發(fā)中具有至關(guān)重要的作用,在這種開發(fā)生產(chǎn)中,基于同一個(gè)軟件體系結(jié)構(gòu),可以創(chuàng)建具有不同功能的多個(gè)系統(tǒng)。在軟件產(chǎn)品族之間共享體系結(jié)構(gòu)和一組可重用的構(gòu)件,可以增加軟件工程和降低開發(fā)和維護(hù)成本。
一個(gè)產(chǎn)品線代表著一組具有公共的系統(tǒng)需求集的軟件系統(tǒng),它們都是根據(jù)基本的用戶需求對標(biāo)準(zhǔn)的產(chǎn)品線構(gòu)架進(jìn)行定制,將可重用構(gòu)件與系統(tǒng)獨(dú)有的部分集成而得到的。采用軟件生產(chǎn)線式模式進(jìn)行軟件生產(chǎn),將產(chǎn)生巨型編程企業(yè)。但目前生產(chǎn)的軟件產(chǎn)品族大部分是處于同一領(lǐng)域的。

五、軟件體系結(jié)構(gòu)的影響

      軟件體系結(jié)構(gòu)貫穿于軟件研發(fā)的整個(gè)生命周期內(nèi),具有重要的影響。這主要從以下三個(gè)方面來進(jìn)行考察:

      (1) 利益相關(guān)人員之間的交流:軟件體系結(jié)構(gòu)是一種常見的對系統(tǒng)的抽象,代碼級別的系統(tǒng)抽象僅僅可以成為程序員的交流工具,而包括程序員在內(nèi)的絕大多數(shù)系統(tǒng)的利益相關(guān)人員都借助軟件體系結(jié)構(gòu)來進(jìn)行彼此理解、協(xié)商、達(dá)成共識或者相互溝通的基礎(chǔ)。

      (2) 系統(tǒng)設(shè)計(jì)的前期決策:軟件體系結(jié)構(gòu)是我們所開發(fā)的軟件系統(tǒng)最早期設(shè)計(jì)決策的體現(xiàn),而這些早期決策對軟件系統(tǒng)的后續(xù)開發(fā)、部署和維護(hù)具有相當(dāng)重要的影響。這也是能夠?qū)λ_發(fā)系統(tǒng)進(jìn)行分析的最早時(shí)間點(diǎn)。

      (3) 可傳遞的系統(tǒng)級抽象:軟件體系結(jié)構(gòu)是關(guān)于系統(tǒng)構(gòu)造以及系統(tǒng)各個(gè)元素工作機(jī)制的相對較小、卻又能夠突出反映問題的模型。由于軟件系統(tǒng)具有的一些共通特性,這種模型可以在多個(gè)系統(tǒng)之間傳遞,特別是可以應(yīng)用到具有相似質(zhì)量屬性和功能需求的系統(tǒng)中,并能夠促進(jìn)大規(guī)模軟件的系統(tǒng)級復(fù)用。


六、軟件體系結(jié)構(gòu)的風(fēng)格

      對軟件體系結(jié)構(gòu)風(fēng)格的研究和實(shí)踐促進(jìn)了對設(shè)計(jì)的復(fù)用,一些經(jīng)過實(shí)踐證實(shí)的解決方案也可以可靠地用于解決新的問題。體系結(jié)構(gòu)風(fēng)格的不變部分使不同的系統(tǒng)可以共享同一個(gè)實(shí)現(xiàn)代碼。只要系統(tǒng)是使用常用的、規(guī)范的方法來組織,就可使別的設(shè)計(jì)者很容易地理解系統(tǒng)的體系結(jié)構(gòu)。例如,如果某人把系統(tǒng)描述為"客戶/服務(wù)器"模式,則不必給出設(shè)計(jì)細(xì)節(jié),我們立刻就會明白系統(tǒng)是如何組織和工作的。

  下面是Garlan和Shaw對通用體系結(jié)構(gòu)風(fēng)格的分類:
 ?。?)數(shù)據(jù)流風(fēng)格:批處理序列;管道/過濾器
 ?。?)調(diào)用/返回風(fēng)格:主程序/子程序;面向?qū)ο箫L(fēng)格;層次結(jié)構(gòu)
  (3)獨(dú)立構(gòu)件風(fēng)格:進(jìn)程通訊;事件系統(tǒng)
 ?。?)虛擬機(jī)風(fēng)格:解釋器;基于規(guī)則的系統(tǒng)
  (5)倉庫風(fēng)格:數(shù)據(jù)庫系統(tǒng);超文本系統(tǒng);黑板系統(tǒng)
  限于篇幅,在本文中,我們將只介紹幾種主要的和經(jīng)典的體系結(jié)構(gòu)風(fēng)格和它們的優(yōu)缺點(diǎn)。有關(guān)新出現(xiàn)的軟件體系結(jié)構(gòu)風(fēng)格,將在后續(xù)文章中進(jìn)行介紹。

1、C2風(fēng)格

  C2體系結(jié)構(gòu)風(fēng)格可以概括為:通過連接件綁定在一起的按照一組規(guī)則運(yùn)作的并行構(gòu)件網(wǎng)絡(luò)。C2風(fēng)格中的系統(tǒng)組織規(guī)則如下:
  (1)系統(tǒng)中的構(gòu)件和連接件都有一個(gè)頂部和一個(gè)底部;
  (2)構(gòu)件的頂部應(yīng)連接到某連接件的底部,構(gòu)件的底部則應(yīng)連接到某連接件的頂部,而構(gòu)件與構(gòu)件之間的直接連接是不允許的;
  (3)一個(gè)連接件可以和任意數(shù)目的其它構(gòu)件和連接件連接;
 ?。?)當(dāng)兩個(gè)連接件進(jìn)行直接連接時(shí),必須由其中一個(gè)的底部到另一個(gè)的頂部。

  圖3是C2風(fēng)格的示意圖。圖中構(gòu)件與連接件之間的連接體現(xiàn)了C2風(fēng)格中構(gòu)建系統(tǒng)的規(guī)則。


 
圖3 C2風(fēng)格的體系結(jié)構(gòu)

  C2風(fēng)格是最常用的一種軟件體系結(jié)構(gòu)風(fēng)格。從C2風(fēng)格的組織規(guī)則和結(jié)構(gòu)圖中,我們可以得出,C2風(fēng)格具有以下特點(diǎn):
 ?。?)系統(tǒng)中的構(gòu)件可實(shí)現(xiàn)應(yīng)用需求,并能將任意復(fù)雜度的功能封裝在一起;
 ?。?)所有構(gòu)件之間的通訊是通過以連接件為中介的異步消息交換機(jī)制來實(shí)現(xiàn)的;
 ?。?)構(gòu)件相對獨(dú)立,構(gòu)件之間依賴性較少。系統(tǒng)中不存在某些構(gòu)件將在同一地址空間內(nèi)執(zhí)行,或某些構(gòu)件共享特定控制線程之類的相關(guān)性假設(shè)。

2、管道/過濾器風(fēng)格

  在管道/過濾器風(fēng)格的軟件體系結(jié)構(gòu)中,每個(gè)構(gòu)件都有一組輸入和輸出,構(gòu)件讀輸入的數(shù)據(jù)流,經(jīng)過內(nèi)部處理,然后產(chǎn)生輸出數(shù)據(jù)流。這個(gè)過程通常通過對輸入流的變換及增量計(jì)算來完成,所以在輸入被完全消費(fèi)之前,輸出便產(chǎn)生了。因此,這里的構(gòu)件被稱為過濾器,這種風(fēng)格的連接件就象是數(shù)據(jù)流傳輸?shù)墓艿?,將一個(gè)過濾器的輸出傳到另一過濾器的輸入。此風(fēng)格特別重要的過濾器必須是獨(dú)立的實(shí)體,它不能與其它的過濾器共享數(shù)據(jù),而且一個(gè)過濾器不知道它上游和下游的標(biāo)識。一個(gè)管道/過濾器網(wǎng)絡(luò)輸出的正確性并不依賴于過濾器進(jìn)行增量計(jì)算過程的順序。

  圖4是管道/過濾器風(fēng)格的示意圖。一個(gè)典型的管道/過濾器體系結(jié)構(gòu)的例子是以Unix shell編寫的程序。Unix既提供一種符號,以連接各組成部分(Unix的進(jìn)程),又提供某種進(jìn)程運(yùn)行時(shí)機(jī)制以實(shí)現(xiàn)管道。另一個(gè)著名的例子是傳統(tǒng)的編譯器。傳統(tǒng)的編譯器一直被認(rèn)為是一種管道系統(tǒng),在該系統(tǒng)中,一個(gè)階段(包括詞法分析、語法分析、語義分析和代碼生成)的輸出是另一個(gè)階段的輸入。
 


圖4 管道/過濾器風(fēng)格的體系結(jié)構(gòu)

  管道/過濾器風(fēng)格的軟件體系結(jié)構(gòu)具有許多很好的特點(diǎn):
 ?。?)使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn);
  (2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過濾器的行為的簡單合成;
  (3)支持軟件重用。重要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來;
 ?。?)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡單。新的過濾器可以添加到現(xiàn)有系統(tǒng)中來;舊的可以被改進(jìn)的過濾器替換掉;
 ?。?)允許對一些如吞吐量、死鎖等屬性的分析;
 ?。?)支持并行執(zhí)行。每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行。

  但是,這樣的系統(tǒng)也存在著若干不利因素。

 ?。?)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。
  (2)不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問題尤為嚴(yán)重。
 ?。?)因?yàn)樵跀?shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。

3、數(shù)據(jù)抽象和面向?qū)ο箫L(fēng)格

  抽象數(shù)據(jù)類型概念對軟件系統(tǒng)有著重要作用,目前軟件界已普遍轉(zhuǎn)向使用面向?qū)ο笙到y(tǒng)。這種風(fēng)格建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個(gè)抽象數(shù)據(jù)類型或?qū)ο笾?。這種風(fēng)格的構(gòu)件是對象,或者說是抽象數(shù)據(jù)類型的實(shí)例。對象是一種被稱作管理者的構(gòu)件,因?yàn)樗?fù)責(zé)保持資源的完整性。對象是通過函數(shù)和過程的調(diào)用來交互的。

  圖5是數(shù)據(jù)抽象和面向?qū)ο箫L(fēng)格的示意圖。
 


圖5 數(shù)據(jù)抽象和面向?qū)ο箫L(fēng)格的體系結(jié)構(gòu)

  面向?qū)ο蟮南到y(tǒng)有許多的優(yōu)點(diǎn),并早已為人所知:

 ?。?)因?yàn)閷ο髮ζ渌鼘ο箅[藏它的表示,所以可以改變一個(gè)對象的表示,而不影響其它的對象。
 ?。?)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問題分解成一些交互的代理程序的集合。

  但是,面向?qū)ο蟮南到y(tǒng)也存在著某些問題:

 ?。?)為了使一個(gè)對象和另一個(gè)對象通過過程調(diào)用等進(jìn)行交互,必須知道對象的標(biāo)識。只要一個(gè)對象的標(biāo)識改變了,就必須修改所有其他明確調(diào)用它的對象。
 ?。?)必須修改所有顯式調(diào)用它的其它對象,并消除由此帶來的一些副作用。例如,如果A使用了對象B,C也使用了對象B,那么,C對B的使用所造成的對A的影響可能是料想不到的。

4、基于事件的隱式調(diào)用風(fēng)格

  基于事件的隱式調(diào)用風(fēng)格的思想是構(gòu)件不直接調(diào)用一個(gè)過程,而是觸發(fā)或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其它構(gòu)件中的過程在一個(gè)或多個(gè)事件中注冊,當(dāng)一個(gè)事件被觸發(fā),系統(tǒng)自動(dòng)調(diào)用在這個(gè)事件中注冊的所有過程,這樣,一個(gè)事件的觸發(fā)就導(dǎo)致了另一模塊中的過程的調(diào)用。

  從體系結(jié)構(gòu)上說,這種風(fēng)格的構(gòu)件是一些模塊,這些模塊既可以是一些過程,又可以是一些事件的集合。過程可以用通用的方式調(diào)用,也可以在系統(tǒng)事件中注冊一些過程,當(dāng)發(fā)生這些事件時(shí),過程被調(diào)用。

  基于事件的隱式調(diào)用風(fēng)格的主要特點(diǎn)是事件的觸發(fā)者并不知道哪些構(gòu)件會被這些事件影響。這樣不能假定構(gòu)件的處理順序,甚至不知道哪些過程會被調(diào)用,因此,許多隱式調(diào)用的系統(tǒng)也包含顯式調(diào)用作為構(gòu)件交互的補(bǔ)充形式。

  支持基于事件的隱式調(diào)用的應(yīng)用系統(tǒng)很多。例如,在編程環(huán)境中用于集成各種工具,在數(shù)據(jù)庫管理系統(tǒng)中確保數(shù)據(jù)的一致性約束,在用戶界面系統(tǒng)中管理數(shù)據(jù),以及在編輯器中支持語法檢查。例如在某系統(tǒng)中,編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點(diǎn)事件。當(dāng)Debugger在斷點(diǎn)處停下時(shí),它聲明該事件,由系統(tǒng)自動(dòng)調(diào)用處理程序,如編輯程序可以卷屏到斷點(diǎn),變量監(jiān)視器刷新變量數(shù)值。而Debugger本身只聲明事件,并不關(guān)心哪些過程會啟動(dòng),也不關(guān)心這些過程做什么處理。

  隱式調(diào)用系統(tǒng)的主要優(yōu)點(diǎn)有:

 ?。?)為軟件重用提供了強(qiáng)大的支持。當(dāng)需要將一個(gè)構(gòu)件加入現(xiàn)存系統(tǒng)中時(shí),只需將它注冊到系統(tǒng)的事件中。
 ?。?)為改進(jìn)系統(tǒng)帶來了方便。當(dāng)用一個(gè)構(gòu)件代替另一個(gè)構(gòu)件時(shí),不會影響到其它構(gòu)件的接口。
  隱式調(diào)用系統(tǒng)的主要缺點(diǎn)有:
  (1)構(gòu)件放棄了對系統(tǒng)計(jì)算的控制。一個(gè)構(gòu)件觸發(fā)一個(gè)事件時(shí),不能確定其它構(gòu)件是否會響應(yīng)它。而且即使它知道事件注冊了哪些構(gòu)件的構(gòu)成,它也不能保證這些過程被 調(diào)用的順序。
 ?。?)數(shù)據(jù)交換的問題。有時(shí)數(shù)據(jù)可被一個(gè)事件傳遞,但另一些情況下,基于事件的系統(tǒng)必須依靠一個(gè)共享的倉庫進(jìn)行交互。在這些情況下,全局性能和資源管理便成了問題。
 ?。?)既然過程的語義必須依賴于被觸發(fā)事件的上下文約束,關(guān)于正確性的推理存在問題。

5、層次系統(tǒng)風(fēng)格

  層次系統(tǒng)組織成一個(gè)層次結(jié)構(gòu),每一層為上層服務(wù),并作為下層客戶。在一些層次系統(tǒng)中,除了一些精心挑選的輸出函數(shù)外,內(nèi)部的層只對相鄰的層可見。這樣的系統(tǒng)中構(gòu)件在一些層實(shí)現(xiàn)了虛擬機(jī)(在另一些層次系統(tǒng)中層是部分不透明的)。連接件通過決定層間如何交互的協(xié)議來定義,拓?fù)浼s束包括對相鄰層間交互的約束。

  這種風(fēng)格支持基于可增加抽象層的設(shè)計(jì)。這樣,允許將一個(gè)復(fù)雜問題分解成一個(gè)增量步驟序列的實(shí)現(xiàn)。由于每一層最多只影響兩層,同時(shí)只要給相鄰層提供相同的接口,允許每層用不同的方法實(shí)現(xiàn),同樣為軟件重用提供了強(qiáng)大的支持。

  圖6是層次系統(tǒng)風(fēng)格的示意圖。層次系統(tǒng)最廣泛的應(yīng)用是分層通信協(xié)議。在這一應(yīng)用領(lǐng)域中,每一層提供一個(gè)抽象的功能,作為上層通信的基礎(chǔ)。較低的層次定義低層的交互,最低層通常只定義硬件物理連接。

圖6 層次系統(tǒng)風(fēng)格的體系結(jié)構(gòu)

  層次系統(tǒng)有許多可取的屬性:

  (1)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解;
 ?。?)支持功能增強(qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换?,因此功能的改變最多影響相鄰的上下層?br> ?。?)支持重用。只要提供的服務(wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,而允許各種不同的實(shí)現(xiàn)方法。
  但是,層次系統(tǒng)也有其不足之處:
 ?。?)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級或高級的功能綜合起來;
  (2)很難找到一個(gè)合適的、正確的層次抽象方法。

6、倉庫風(fēng)格

  在倉庫風(fēng)格中,有兩種不同的構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)說明當(dāng)前狀態(tài),獨(dú)立構(gòu)件在中央數(shù)據(jù)存貯上執(zhí)行,倉庫與外構(gòu)件間的相互作用在系統(tǒng)中會有大的變化。

  控制原則的選取產(chǎn)生兩個(gè)主要的子類。若輸入流中某類時(shí)間觸發(fā)進(jìn)程執(zhí)行的選擇,則倉庫是一傳統(tǒng)型數(shù)據(jù)庫;另一方面,若中央數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)觸發(fā)進(jìn)程執(zhí)行的選擇,則倉庫是一黑板系統(tǒng)。

  圖7是黑板系統(tǒng)的組成。黑板系統(tǒng)的傳統(tǒng)應(yīng)用是信號處理領(lǐng)域,如語音和模式識別。另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取。

圖7 黑板系統(tǒng)的組成

  我們從圖4中可以看出,黑板系統(tǒng)主要由三部分組成:

 ?。?)知識源。知識源中包含獨(dú)立的、與應(yīng)用程序相關(guān)的知識,知識源之間不直接進(jìn)行通訊,它們之間的交互只通過黑板來完成。
 ?。?)黑板數(shù)據(jù)結(jié)構(gòu)。黑板數(shù)據(jù)是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù),知識源通過不斷地改變黑板數(shù)據(jù)來解決問題。
  (3)控制??刂仆耆珊诎宓臓顟B(tài)驅(qū)動(dòng),黑板狀態(tài)的改變決定使用的特定知識。

七、發(fā)展方向

1 各種ADLs之間的信息互換

  現(xiàn)有的ADLs大多是與領(lǐng)域相關(guān)的,所以不利于對不同領(lǐng)域體系結(jié)構(gòu)的說明。但這些針對不同領(lǐng)域的ADLs在某些方面又大同小異,造成資源的冗余。其實(shí),大多數(shù)ADLs具有一系列的共同概念。如何用一種公共形式把各種語言綜合起來,使得能夠交換各種體系結(jié)構(gòu)描述信息,將是今后軟件體系結(jié)構(gòu)研究和實(shí)踐的重點(diǎn)之一。

2 設(shè)計(jì)工具和環(huán)境

  軟件體系結(jié)構(gòu)設(shè)計(jì)既然作為軟件工程的一部分,它的計(jì)算機(jī)輔助實(shí)現(xiàn)手段是相當(dāng)重要的。我們應(yīng)當(dāng)開發(fā)出一些軟件工具來實(shí)現(xiàn)體系結(jié)構(gòu)的描述和分析,開發(fā)階段轉(zhuǎn)換工具,以實(shí)現(xiàn)階段成果的自動(dòng)轉(zhuǎn)換,例如,把需求規(guī)格說明自動(dòng)轉(zhuǎn)換為構(gòu)件等。目前關(guān)于這方面的研究成果很少,特別是可以應(yīng)用到實(shí)際項(xiàng)目開發(fā)中的工具和環(huán)境就更少。

3 體系結(jié)構(gòu)再工程

  當(dāng)今軟件系統(tǒng)的規(guī)模變得越來越大,結(jié)構(gòu)也越來越復(fù)雜,同時(shí)從頭開始構(gòu)建的大系統(tǒng)數(shù)量在急劇地減少,因而很多遺留系統(tǒng)正在被逐步地利用。從遺留系統(tǒng)軟件代碼和系統(tǒng)中抽取結(jié)構(gòu)信息,經(jīng)過描述、統(tǒng)一、抽象、一般化與實(shí)例化等處理,可總結(jié)出系統(tǒng)的體系結(jié)構(gòu)。

  在這種情況下,軟件再工程變得越來越重要,因?yàn)樗峁┝艘粭l把遺留系統(tǒng)轉(zhuǎn)換為可進(jìn)化系統(tǒng)的現(xiàn)實(shí)可行的途徑,是一種可以改進(jìn)人們對軟件的理解和改進(jìn)軟件本身的活動(dòng)。這類研究的目的是為一些特定的應(yīng)用領(lǐng)域的軟件系統(tǒng)提供一些體系結(jié)構(gòu)框架,如控制系統(tǒng)、移動(dòng)機(jī)器人和用戶接口界面等。通過這些框架可以很方便地構(gòu)造一個(gè)新的軟件系統(tǒng)。


 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
軟件工程師論文:當(dāng)前軟件體系結(jié)構(gòu)風(fēng)格和現(xiàn)在軟件工程各個(gè)發(fā)展戰(zhàn)略方式
軟件體系結(jié)構(gòu)必過
軟件架構(gòu)風(fēng)格介紹和總結(jié)
系統(tǒng)架構(gòu)設(shè)計(jì)總結(jié)—軟件架構(gòu)風(fēng)格
詳解軟件體系結(jié)構(gòu)的現(xiàn)狀及發(fā)展方向
系統(tǒng)架構(gòu)設(shè)計(jì) - 架構(gòu)風(fēng)格
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服