1. 程式人生 > >Python設計模式 - UML - 包圖(Package Diagram)

Python設計模式 - UML - 包圖(Package Diagram)

分享 pub 模塊 建模 分組 cte framework ram 模型

簡介

包圖是對各個包及包之間關系的描述,展現系統中模塊與模塊之間的依賴關系。一個包圖可以由任何一種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)