標籤:font 公用服務 ted python 簡單 檔案夾 原因 嵌套 曆史
簡介
包圖是對各個包及包之間關係的描述,展現系統中模組與模組之間的依賴關係。一個包圖可以由任何一種UML圖組成,可容納的元素有類、介面、組件、用例和其他包等。包是UML中非常常用的元素,主要作用是分類、容納其他元素。包與包之間的關係有泛化、細化和依賴,主要取決於包內部成員之間的關係。
包圖建模步驟
- 分析系統的模型元素,運用分層設計把概念、語義和邏輯上相近的元素包含在同一個包中
- 對於每個包,分析包內每個元素的可訪問屬性,並標識出該元素的可見度
- 確定包與包中元素之間的泛化、細化、依賴關係,相應處理重載、多重性及匯入等關係
- 分析包結構,對包進行refine, merge等操作
包圖中的元素
包圖中可以容納很多元素,如類、介面、組件、注釋等,這些元素在相應的UML圖中都有涉及,這裡主要介紹包元素。
- 包名的位置:UML中使用檔案夾的表徵圖來表示包,包名可以放在第一欄,也可以放在第二欄
放在第一欄
放在第二欄
- 包名的格式:每個包都有一個字串格式的包名唯一標識該包,其中包名的格式有兩種:
- 簡單包名
- 帶路徑包名
‘+‘: public:對所有包可見
‘-‘: private:對本包之外不可見
‘#‘: protected:對本包的子包可見
- 關係傳遞:如果包A和包B之間存在關係,包B和包C之間存在關係,那麼包A和包C之間也存在關係
- 可見度傳遞:根據包與包之間依賴關係的不同傳遞可見度
- <<import>>因為添加為公有元素的原因所以可見度可以傳遞
- <<access>>的可見度由於添加為私人元素的原因可見度不可傳遞
- 構造特性:和類的構造性相似,就是在包名關鍵字旁加入<<xxx>>作為補充說明,UML提供了5種構造型來描述包的特性
- <<system>>: 表示該包代表一個系統
- <<subsystem>>: 表示該包代表一個子系統
- <<facade>>: 表示該包是由其他包構成的一個視圖
- <<stub>>: 表示該包是一個代理包,該代理包為其他包提供公用服務
- <<framework>>:表示該包代表一個架構
包圖類的關係
- 泛化:繼承關係,跟類之間的泛化關係相似,表明是一個包家族
- 細化:一個包中有另一個包中的所有元素,則第二個包是第一個包的細化
- 依賴:一個包中引用到了另一個包,箭頭從輸入方包指向輸出方包
<<use>>:一種預設的包依賴關係,表示客戶包中的元素以某種方式使用著提供者包中的公用元素
<<import>>:最普遍的包依賴關係,表示提供者包中的公用元素被添加為客戶包中的公用元素
<<access>>:表示提供者包中的公用元素被添加為客戶包中的私人元素
<<merge>>:表示提供者包中的元素被擴充為客戶包中的元素
<<trace>>:表示一個包的曆史版本發展為另一個包的進化版本
包圖的進階特性
- 分層:根據職責分層,目的是為瞭解耦。雙向箭頭表示相互依賴。
- 嵌套:包裡面是可以有包的。但應盡量避免使用多層嵌套包,2-3層就好
包圖樣本
以書店線上訂購系統為例
包圖的注意事項
- 若包被撤銷,則其中的元素也會被撤銷掉
- 合理最小化包之間的依賴
- 合理最小化每個包中public, protected元素的個數及最大化private元素個數
- 避免包之間的循環相依性
- 根據類之間的依賴關係對包進行分層、分組、合并、細化
- 包之間關係遵循高內聚、低耦合的特性
Python設計模式 - UML - 包圖(Package Diagram)