第1章 軟件體系結構基本概念
1.3軟件結構的基本元素和連接
1.1 軟件體系結構的基本概念
軟件體系結構是軟件工程的重要研究領域,軟件體系結構並沒有統一的定義。
90年代開始,很多專家學者對軟件體系結構引起廣泛關注,綜合軟件體系結構的定義,比較權威性的論述是:
總體組織
全局控制
通訊、同步、協議
設計元素的功能
物理分佈和集成
軟件體系結構要點:
1.2 軟件體系結構風格、模式和框架
風格是表達特定系統元素和組織方式的通用範例(idiomaticparadigm)。軟件體系結構風格,反映衆多系統共有結構的習慣用法和語義,表述系統的靜態結構方式,強調軟件元素的組織形式和通常用法。
設計模式是軟件問題高效和成熟的設計模板(pattern),模板包含了固有的問題的處理邏輯,強調處理邏輯採用方式的直接複用。
框架是待實例化的、可複用的大粒度部件結構。框架面向不同規模的應用問題,是通用的結構。強調針對實際問題和通用結構。
1.3軟件結構的基本元素和連接
軟件結構的表示從低層到高層,高層軟件結構是建立在基礎結構之上的。
軟件構成的基礎結構包括:
①數據類型結構
數據類型是最基本的軟件結構元素,是描述複雜算法和軟件結構的基礎,即數據結構。
數據類型包括:
基本數據類型
抽象數據類型
②控制流連接結構
包括:
•條件連接
•循環連接
•控制轉向連接
進程中的控制連接(內部調用)進程之間的連接
同一機器空間 鏈詢調用方式分 析調用方式
不同機器空間(遠程過程調用)
④軟件的層次結構
層次結構是分析和解決問題普遍適用的方法
下層僅向相鄰的上層提供支持,上層依賴相鄰的下層被建造
使用及支持關係不僅限制在相鄰的層次之間
1.4軟件體系結構設計的基本原則
在大量的軟件開發實踐中,對於軟件結構的設計有被普遍性採用的原則,這些原則和策略多年來一直被廣泛地運用着。它們獨立於具體的軟件開發方法。
基本原則包括:
•抽象
•分而治之
•信息隱蔽
•模塊化
•高內聚和低耦合
•關注點分離
•策略和實現分離
•接口和實現分離
人們認識複雜事物的基本方法。抽象的實質是突出表現事物的主要特徵和屬性,忽略細節部分;並且,運用這些特徵和屬性,提取具有普遍意義的事物行爲。
數據抽象:描述特定數據對象的屬性集合
過程抽象:特定操作過程命名的操作序列
控制抽象:隱含內部細節的控制邏輯
將大的問題分解,分別處理分解的局部問題,會降低問題的複雜性和難度。
軟件設計中運用的分解包括:
按照事務的過程方式分解,將整體問題分解成爲多層,每層完成同一過程的各項處理,並提取規範統一形式的接口,以提供對下層(下一過程)的支持。
在每一層面,將問題分成多項獨立的處理部分,它們原則上不要直接的聯繫,而是通過集中的控制。
處理中的所有信息和操作被限制在局部過程中,儘量減少外部的直接接觸與共享,提高獨立性,減小相互的耦合性。
將處理過程儘量隱蔽,使外界只瞭解其簡單、統一的可訪問形式。以減少外界可能的錯誤干擾和破壞。
模塊:可被獨立命名、具有獨立作用的軟件成分
指軟件成份內部各處理單元的關係程度。能做到每個成分都有必然關係,缺一不可的緊密程度是最好的內聚形式。
指軟件成份之間的關係特性。軟件成份之間應儘量做到沒有直接關係,使其保持相對獨立、鬆散耦合的關係會使未來的修改、複用簡單,出錯帶來的影響小。
常見的耦合形式
內容耦合:一個軟件成份直接修改另一個軟件成份的內容
公共耦合:多個軟件成份需要處理同一個外部的公共數據
控制耦合:軟件成份的動作依賴於接收的控制信號
標記耦合:軟件成份的接口參數具有一個複雜的內部結構
數據耦合:軟件成份之間僅通過簡單類型的形式參數傳遞
常見的內聚形式
偶然內聚:將沒有直接關係,只是分散在多處的成分合起來
邏輯內聚:將僅是邏輯相關的處理成分合起來
時間內聚:將需在同一時間執行並無直接關係的處理成分合起來
過程內聚:將過程順序相關的處理成分合起來
通訊內聚:將需要對同一個外部數據操作的處理成分合起來
順序內聚:將兩個具有輸入輸出順序關係的軟件成份合起來
功能內聚:保證每個成分只完成單一的功能
關注點是軟件系統中特別需要考慮的多變部分。例如,軟件成分的執行會受到運行環境、設備條件,以及通信設施等的制約和限制,爲了適應不同的運行環境和條件,需要進行必要的參數調整和驅動配置。爲此進行的這部分設計和開發,即是所謂的關注點。
軟件系統中涉及關注點的成分應該與非關注點的成分分爲相互獨立的部分,這樣的設計會使未來的系統容易配置,實現機器無關性。
策略是指軟件中用於處理選擇控制的決策成分。通過上下文相關的決策分析、信息語義解釋分析、參數選擇等進行判斷,以決定怎樣地具體數據加工和功能實現。
實現是指軟件系統中有規範步驟及完整執行算法的成分
通常,決策部分是異變的成分,而實現部分相對穩定,並可多次複用。將策略成分和實現成分分別設計成獨立的部分,使系統維護的範圍減小,以提高系統的維護性和複用性。
接口是軟件成分對外規範形式的、可訪問的操作集合,提供軟件成分的功能及使用方式。一個軟件成分可以不只一個接口,每個接口提供不同的一組相關的操作。
實現是軟件成分外部不可見的操作執行部分
爲了達到軟件成分的高複用,爲適應多種形式的訪問,可採用分設多種接口來實現。這就需要採用接口和實現獨立設計的方式,以提高系統的可移植性和複用性。