體系結構 = 組件 + 連接件 + 約束
軟件體系結構的核心概念:
- 構/組件
- 軟件重用
構件:
- 語義完整、語法正確和有可重用價值的單位軟件,是軟件重用過程中可以明確辨識的系統
軟件體系結構建模
軟件體系結構建模種類
- 結構模型
最直觀、普遍的建模方法。以體系結構的構件、連接件和其他概念刻畫結構,通過結構反映系統的重要語義內容:系統配置、約束、隱含的假設條件、風格、性質等。核心是體系結構描述語言
- 框架模型
不側重描述結構細節,側重整體結構。主要以特殊的問題為目標建立針對特定問題的結構。
- 動態模型
結構模型和框架模型的補充。
- 過程模型
研究構造系統的步驟和過程。
- 功能模型
由一組功能構件按照層次組成,下層向上層提供服務,可看作特殊框架的模型
4+1模型
模型采用多視圖模型方法,從五個不同的視角,包括:邏輯、開發、處理、物理和場景,五個視圖,每個視圖只關心系統的一個側面。
邏輯視圖
- 描述系統功能需求,即系統提供給最終用戶的服務
- 邏輯視圖中,系統分解成一系列的功能抽象。這種分解可以進行功能分析、表示在整個系統的各個不同部分的通用機制和設計元素。
- 面向對象中,通過抽象、封裝和繼承,可以用對象模型來代表邏輯視圖,用類圖來描述邏輯視圖。
開發視圖
- 也叫模塊視圖,側重軟件模塊的組織和管理。主要考慮軟件內部的需求:開發的容易性、軟件的重用性和通用性。開發視圖通過描述系統輸入輸出關系的模型圖和子系統圖來描述。風格通常是層次結構。
處理視圖
側重于系統的運行特性(序列圖、狀態圖、流程圖),關注非功能性需求。強調并發性、分布性、系統集成性和容錯能力。
物理視圖
把軟件映射到硬件上,考慮系統性能、規模、可靠性,解決系統拓撲結構、系統安裝、通訊等問題。
場景
看做是重要系統活動的抽象,使四個視圖有機聯系起來。幫助設計者找到體系結構的構件和它們之間的作用關系。也可以分析一個特定的視圖。
4+1總結
- 邏輯視圖和開發視圖——系統靜態結構
- 處理視圖和物理試圖——系統動態結構
軟件體系結構核心模型
軟件體系結構的生命周期模型
需求分析->建立體系結構->設計->實現->測試
軟件體系結構風格
概述
軟件體系結構風格
- 描述某一特定應用領域中系統組織方式的慣用模式
- 反映眾多系統所共有的結構和語義特性,知道將各個模塊和子系統有效地組織成一個完整的系統
經典體系結構
- 數據流風格:管道/過濾器、批處理序列
- 調用/返回風格:主程序/子程序、面向對象、層次結構
- 獨立構件風格:進程通訊、事件系統
- 虛擬機風格:解釋器、基于規則的系統
- 倉庫風格:數據庫系統、超文本系統、黑板系統
管道/過濾器
每個構件都有一組輸入輸出,構件讀入輸入數據數據流,經過內部處理,產生輸出數據流。這個過程通過對輸入流的變換及增量計算來完成,在輸入被完全消費之前,輸出便產生了
這里的構件成為過濾器,這種風格的連接件像數據流傳輸的管道,將一個過濾器傳輸到另一個過濾器的輸入
特征:
- 以數據流向的過程為核心
- 過濾器自身功能能獨立完成,相互無交互
- 過濾器不需要知道其他過濾器的存在與否
- 過濾器進隊輸入的數據流有限制,并保證輸出的正確
- 系統內各部分的執行,與整體系統的最終輸出不相關
過濾器
- 被動過濾器:通過時間或過程調用激發動作,接受前續成分推入的內容
- 主動過濾器:作為獨立的過程或線程人物,豬肚取線序成分的內容
- 數據源:作為系統的輸入過濾器,提供探測數據、采集數據的功能,主動推出數據,激發或等待后繼成分啟動
- 數據池:作為手機結果的過濾器,分為主動取數據和被動接受推入數據兩種方式
連接器
- 管道是兩個過濾器的連接器,先進先出的緩存區
- 如果是兩個主動式過濾器項鏈,管道需要有同步控制能力
- 如果過濾器行為收到相鄰過濾器的控制,管道通過被動過濾器的過程調用實現
管道/過濾器 優點:
- 對整個系統理解簡單化,將系統各個功能抽象為黑盒子
- 較強維護性、易替換
- 一個過濾器可以多次掛接,支持復用
- 支持并發計算,可以將存在并發可能的過濾器,在調度算法的基礎上,組織為多任務并發系統。
- 系統的結構清晰,容易進行性能分析
缺點:
- 交互性弱
- 兩個相互獨立的過濾器,如果存在同步問題,需要花費較大精力去協調
- 需要處理數據在管道中的阻塞狀態
- 直接調用被動過濾器,使過濾器的重新組織產生困難
主程序與子過程
結構特征
- 與程序語言的主程序和過程調用概念相對應
- 所有成分,都屬于主程序和一系列的子過程的集合
- 主程序充當子過程的調用者
- 子程序之間也存在調用關系
- 過程之間通過參數傳入和傳出信息
主程序與子調用結構的成分
- 主程序:基本的程序主體成分
- 子調用:各種層次上的函數,可調用成分
- 函數庫:固定的函數子調用(二進制代碼復用成分)
主程序與子調用結構的連接器
- 僅過程調用一種
優點
- 是程序設計語言中最基本的表現形式,幾乎所有的程序設計語言都對此提供支持
- 程序中需要多次執行的代碼,可以使用函數或子過程形式,提高代碼使用率
缺點
- 難以表達構件間復雜的連接關系。
- 軟件規模增長時,難以維護和理解
- 復用性差
數據抽象和面向對象
數據的表示和操作封裝在一個抽象數據類型(ADT)或對象中
構件是對象,即抽象數據類型的實例
對象是一種被稱作管理者的構件
- 對象負責保持資源完整性
- 對象是通過方法、過程的調用來交互
面向對象結構的特征
- 對象實體是具有自身屬性和行為能力的獨立個體
- 任何事物處理都是與對象相互作用的結果,采用“消息”達到這種作用
- 發送消息給對象是“請求”
- 接受請求的對象是“響應”
- 響應“消息”的動作是接受請求對象自身的行為能力,它可以向其他對象發出請求
面向對象結構的連接器
- 消息:對象的聯系僅通過消息
- 多態機制:以相同的消息發送給對象,由對象自行決定響應何種行為,連接不同的執行成分
優點
- 接近人的認知習慣
- 穩定的結構
- 實現真正意義的信息封裝
- 本身的并發特性,支持分布式
- 更容易復用
缺點
- 對象的標識是發送消息前必須知道的,如果標識被改變,消息就不知去向
- 對象接受多個來自不同請求者的同一個消息,所得到的結果有時不可預測,這種情況系統必須考慮并付出代價。
事件驅動和隱式調用
- 構件不直接調用一個處理過程,而是出發或廣播事件
- 系統構件的處理過程在一個或多個事件中注冊,當一個時間被觸發,系統自動調用在這個事件中注冊的所有過程
- 一個事件的觸發就導致了另一個模塊過程的調用
事件驅動過程
- 外部事件以終端方式被接受并處理
- 各個消息通過過濾器來統一形式,并且統一排隊等待處理
- 在系統的統一調度下,消息被發送到各自對應的應用隊列中
- 各應用隊列有各自的用戶交互線程,通過消息循環機制,建立自己的交互應用操作
事件驅動和隱式調用結構的特征
- 消息發送——兩種方式
- 點發式:經過中間轉發,一點到一點響應
- 廣播式:經過中間轉發,一點到多點響應
- 異步方式:發送成分與接受成分之間采用異步方式,各自獨立不受約束。
特征
- 消息過濾
- 系統過濾:被送到系統消息隊列之前
- 應用過濾:被送到應用消息隊列之前
- 消息過濾功能
- 變換:轉變消息形式成為某種統一的類型和取值范圍
- 抑制:截獲或阻止某種消息
- 轉發:轉發經過某種處理的消息到需要響應的成分
- 增生:增強某個消息原有的作用,使之成為多個相同或不同的消息
優點
- 消息與響應的非直接調用,使成分之間耦合松散,增加系統成分連接、集成的靈活性
- 支持軟件復用
- 系統以維護
- 易于控制異步并發系統
不足
- 請求消息成分和接受消息成分完全自主獨立,不受控制,消息序列不易控制
- 中間層必要的消耗,使消息響應速度明顯下降
虛擬機
- 執行程序以能被解釋的一種偽碼形式表示
- 解釋引擎根據固定的語法結構,按照偽碼的語義逐句結束偽碼,同時根據已經處理解釋的狀態以及輸入的數據來完成輸出
黑板/知識庫
- 以黑板作為協同操作的核心,狀態是核心控制的依據
- 每個知識源作為問題求解的獨立單位
- 知識源需要協同完成一個事物的多個計算求解步驟
- 協同的策略和調度算法,作為特殊的知識源
-
由特殊的知識源改變操作的核心狀態
image.png
組成
- 知識源:獨立的、與應用程序相關的知識,相互之間不直接通信,交互通過黑板完成
- 黑板:按照與應用程序相關的層次來組織解決問題的數據,知識源通過不斷地改變黑板數據來解決問題。它保存系統的輸入問題求解各個階段的中間和反映整個問題求解的狀態
- 控制:完全由黑板的狀態驅動,黑板狀態的改變使用特定知識
優點
- 便于多客戶共享大量數據
- 可重用的知識源
- 容錯性和健壯性
缺點
- 不同的知識源代理對于共享數據結構要達成一致
- 同步鎖機制增大了系統復雜度
- 測試困難
- 開發成本高
過程控制回路
將事物處理看做具有輸入、加工、輸出、反饋、再輸入的一個持續的過程模型
部件連接器 C2風格
通過連接器綁定在一起的按照一組規則運作的并行網絡
- 部件是軟件的組成部分,系統架構中起結構塊作用
- 連接器是建立部件和部件之間連接的成分
部件可以組合,連接器可以相互連接
客戶/服務器風格
三個組成部分 數據庫服務器、客戶應用程序、網絡
數據庫服務器:安全、并發、數據完整性、數據備份與恢復
客戶應用程序
J2EE架構
四個獨立層 客戶層、表示邏輯層、業務邏輯層、企業信息系統層
軟件體系結構設計過程
- 標識構件/組件
- 生成類圖
- 對類進行分組
- 把類打包成構件
- 提出軟件體系結構模型
- 在建立體系結構的初期,選擇一個結構風格
- 把已標識的構件映射到軟件體系結構中
- 分析構件之間的相互作用
- 軟件體系結構正交化
軟件體系結構評估
SA決定系統的屬性
- 性能
- 可靠性
- 可用性
- 安全性
- 可修改性
- 功能性
- 可變性