【正文】
分層的思想也深入地滲透到人們的思維之中,有些工作比較復(fù)雜,我們沒法一下子完成,只能把工作分為幾層,一層一層地去做,高層工作總是建立在低層工作的基礎(chǔ)之上。后者是一種把問題分解成建立在基礎(chǔ)概念和思想上多層次的、從底向上逐步抽象的分析和表達(dá)的結(jié)構(gòu),每一層處理該層次的問題、服務(wù)于該層次的要求。該原理使構(gòu)件行為和表示的改變變得容易,尤其是那些不影響接口的修改,例如對運(yùn)行性能的提高。就像封裝一樣,接口和實現(xiàn)的分離也是一種用來獲得信息隱藏的技術(shù)。該原理的主要目的是防止構(gòu)件的客戶接觸到實現(xiàn)的細(xì)節(jié),而只為客戶提供構(gòu)件的接口規(guī)范和使用方法。接口部分定義了構(gòu)件所提供的功能,并規(guī)范了功能的使用方法。也可以說策略和實現(xiàn)的分離強(qiáng)調(diào)分離出業(yè)務(wù)邏輯,將業(yè)務(wù)邏輯部分和與業(yè)務(wù)邏輯無關(guān)的實現(xiàn)部分分離開來,這樣軟件的結(jié)構(gòu)更清晰。實現(xiàn)構(gòu)件負(fù)責(zé)全面規(guī)范算法的執(zhí)行,執(zhí)行中不需要對上下文相關(guān)信息進(jìn)行決策。 44 2021/11/10 ( 9)策略和實現(xiàn)的分離 軟件系統(tǒng)的構(gòu)件應(yīng)該實現(xiàn)策略或處理問題,但不能同時處理兩者。例如,在設(shè)計中將一個復(fù)雜任務(wù)或構(gòu)件分割成可以獨立設(shè)計的更小的部分。在對一個指定的問題尋找構(gòu)件設(shè)計方案時,使其具有充分性和完備性是一個主要目標(biāo)。完備性指的是一個構(gòu)件應(yīng)該把握住所有與其抽象相關(guān)的特性。 43 2021/11/10 ( 7)充分性、完備性和簡單性 Grady Booch指出軟件系統(tǒng)的每個構(gòu)件都應(yīng)該是充分的、完備的和簡單的。最差的形式是偶然內(nèi)聚,這種形式將毫無聯(lián)系的抽象放置到同一模塊之中。內(nèi)聚用來衡量單一模塊內(nèi)功能和元素間聯(lián)系的緊密程度。緊密的耦合就會使系統(tǒng)變得復(fù)雜,因為如果一個模塊和另外的模塊有很密切關(guān)聯(lián)的話,這個模塊就很難理解、調(diào)試、維護(hù)。耦合強(qiáng)調(diào)模塊之間的特性,而內(nèi)聚強(qiáng)調(diào)模塊內(nèi)部的特性。這樣,對某一角色開發(fā)的只是與角色相關(guān)的信息和服務(wù),避免了過多暴露所造成對應(yīng)用設(shè)計的負(fù)擔(dān)和混亂,并保證了組件運(yùn)行的可靠和安全。如果一個構(gòu)件在不同的環(huán)境下扮演不同的角色,在構(gòu)件中這些角色應(yīng)該獨立且相互分離。 41 2021/11/10 ( 5)注意分離點 不同和無關(guān)聯(lián)的責(zé)任應(yīng)該在軟件系統(tǒng)中分離開來,讓它們出現(xiàn)在不同的構(gòu)件中。模塊化帶來了復(fù)雜系統(tǒng)資源管理、維護(hù)和應(yīng)用的邏輯和條理性,增加了應(yīng)用設(shè)計的靈活性。模塊化的主要做法,就是在一個系統(tǒng)內(nèi)引入具有良好定義的分界,依次來處理系統(tǒng)的復(fù)雜性。封裝原理經(jīng)常被用來作為實現(xiàn)信息隱藏的方法,信息隱藏也可以通過接口與實現(xiàn)分離的原理來實現(xiàn)。信息隱藏對用戶隱藏了構(gòu)件的實現(xiàn)細(xì)節(jié),用來更好地處理系統(tǒng)的復(fù)雜性和減少各構(gòu)件之間的耦合。封裝有利于提高抽象的層次,有利于結(jié)構(gòu)和實現(xiàn)的分離,最終提高了軟件的可維護(hù)性、可重用性和可靠性。所謂對象的概念就是屬性(數(shù)據(jù))及其操作(行為)的封裝體。減少構(gòu)件耦合、接口與實現(xiàn)的分離等,都得益于抽象。行為、過程的抽象使得操作的指派是依據(jù)標(biāo)識而非地址,由此產(chǎn)生了操作的接口和動態(tài)約束描述。抽象有幾種形式,如數(shù)據(jù)抽象、對象抽象、實體抽象、行為抽象、過程抽象等。這些理論并不是一個個分離的個體,而是緊密聯(lián)系在一起的一個整體,共同構(gòu)成軟件體系結(jié)構(gòu)的理論基礎(chǔ)。這些理論對于成功地進(jìn)行軟件開發(fā)是十分重要的,而對于這種重要性的認(rèn)識越是當(dāng)人們感到軟件開發(fā)困難的時候認(rèn)識得越深刻。軟件體系結(jié)構(gòu)的理論基礎(chǔ)其實有很多在多年以前就已經(jīng)為人所知。 IEEE 37 2021/11/10 Software Structure and Architecture 38 2021/11/10 4 軟件體系結(jié)構(gòu)的理論基礎(chǔ) 軟件體系結(jié)構(gòu)是軟件工程的一個重要的研究和實踐領(lǐng)域,也是軟件工程的一個新的發(fā)展階段。 32 2021/11/10 小結(jié):關(guān)于 SA的定義(考點) 33 2021/11/10 小結(jié):關(guān)于 SA的定義(考點) 34 2021/11/10 小結(jié):關(guān)于 SA的定義(考點) 35 2021/11/10 SA之重要 好的軟件體系結(jié)構(gòu), 是好的軟件的必要條件。 Barry Boehm和他的學(xué)生提出,軟件體系結(jié)構(gòu)包括系統(tǒng)構(gòu)件、連接件、約束的集合,反應(yīng)不同人員需求的集合,以及準(zhǔn)則的集合。代碼體系結(jié)構(gòu)描述了開發(fā)環(huán)境中的源程序、二進(jìn)制代碼和函數(shù)庫等是怎樣被組織的。模塊互連體系結(jié)構(gòu)包含兩個正交的結(jié)構(gòu):功能分解和分層。 它們中的每一個形態(tài)都從不同的角度來描述系統(tǒng) 。 30 2021/11/10 SA的定義 定義 7: Soni& Nord& Hofmeister定義 西門子公司研究院的 Soni, Nord和 Hofmeister研究了軟件行業(yè)的開發(fā)項目中的常用和主要結(jié)構(gòu) 。 而在多個體系結(jié)構(gòu)方案中選擇合適的體系結(jié)構(gòu)方案往往基于一組準(zhǔn)則 。 軟件體系結(jié)構(gòu)形式 (form)由專有特性 (properties)和關(guān)系組成 。連接元素用于把體系結(jié)構(gòu)的不同部分組合連接到一起。 27 2021/11/10 SA的定義 ? Perry and Wolf, 1992: A set of architectural (or, if you will, design) elements that have a particular form. Perry and Wolf distinguish between processing elements, data elements, and connecting elements, and this taxonomy by and large persists through most other definitions and ap