1. 程式人生 > >Python設計模式 - UML - 組件圖(Component Diagram)

Python設計模式 - UML - 組件圖(Component Diagram)

其他 鏈接 數據 哪些 運行時 關系 實現 mage 源代碼

簡介

組件圖又稱構建圖,用於顯示系統各組件及各組件關系的物理視圖。

組件圖通常包括組件、接口、關系、端口和連接器,用來顯示程序代碼中相應的模塊、源文件或源文件集合之間的依賴和泛化關系。

組件圖中的組件通常由類圖中的一個或多個類(對象)實現為系統中的模塊、源文件、過程文件或可執行文件,最終構成系統的絕大部分功能單元。

組件圖建模步驟

    - 確定系統有哪些對外接口或端口

    - 確定系統要用到哪些組件,識別出系統中的重要模塊、庫文件、源代碼文件、數據表或文件、可執行文件或文檔等,將其建模為一個個組件

    - 確定系統中各組件的類型、規格、約束和內部接口

    - 確定系統中各組件之間、接口之間、組件與接口之間的關系

組件圖的元素

組件圖中的元素包括組件、接口、關系、端口和連接器,其中組件與組件之間有依賴關系,組件與接口之間有實現關系。

  • 組件: 承擔具體功能單元的實際文件,一般為lib, jar, dll, exe等格式,遵循接口定義並提供具體的接口實現

       - 組件表示法

          - 圖標表示法

             

              圖標表示法              小圖標表示法

技術分享圖片 技術分享圖片

  

          - 構造表示法

          技術分享圖片

    

       - 組件分類:

           - 配置組件:系統中各組件執行時的環境配置文件

           - 產品組件:系統運行前的靜態源文件,包括模塊、源代碼文件、源數據文件、鏈接庫文件、可執行文件等

           - 過程組件:系統運行時生成的組件,包括動態生成類文件,新增數據文件、日誌文件、動態網頁等

  • 接口:一組操作的集合,聲明了組件提供或請求的服務契約,這個契約由實現和使用這個接口的組件共同遵守

      從調用從屬角度可以把接口分為需求接口和提供接口。 

      - 需求接口: 也叫需接口,是指組件像其他組件請求服務時要遵循的接口

技術分享圖片

      - 提供接口:也叫供接口,是指組件給其他組件提供服務時實現的特性和約束

技術分享圖片

      

  • 關系:實現,依賴, 泛化(具體見組件圖的關系部分)

  • 端口:屬於外部接口,是被封裝組件與外界的交互點。實現接口的組件使用端口來收發消息,與外界交互

      - 表示法:在UML2.0中表示為小方框

        技術分享圖片

      - 與接口關系:需求接口通過端口從外部請求服務,提供接口通過端口向外部提供服務

      - 與組件關系:組件之間可以通過端口進行交互,如收發消息

  • 連接器:兩個組件或兩個端口之間的通信關系。UML2.0提供兩種類型的連接器

      - 代理連接器:外部端口(端口)和內部接口之間的連接器

          技術分享圖片

      - 組裝連接器:組件之間的連接器。連接器在一個組件的需求接口和另一個組件的提供接口之間建立連接,使得前一個組件能夠調用後一個組件提供的服務

        技術分享圖片

組件圖的關系

組件圖中的關系有實現、依賴和泛化,主要涉及組件與組件之間、組件與接口之間、接口與接口之間。

  • 實現:組件與接口之間的關系

技術分享圖片

  • 依賴:組件與組件之間的關系

      如果兩個組件中的兩個類存在依賴關系,那麽這兩個組件之間的關系就可以表示為依賴關系

      技術分享圖片

  • 泛化:組件與組件之間、接口與接口之間

      如果兩個組件中的兩個類之間或兩個接口之間存在泛化關系,那麽這兩個組件之間的關系就可以表示為泛化關系

技術分享圖片 技術分享圖片

組件圖示例

以銀行短信客服系統為例

技術分享圖片

組件圖與相近UML圖的區別

  • 組件圖與類圖區別:組件圖與類圖在以下幾個方面上有顯著區別

      - 抽象層次:類圖側重對單個實體和細節邏輯的抽象;組件圖側重對模塊化和部署實現的抽象

      - 抽象粒度:類圖中以類、接口及它們之間關系為粒度;組件圖中以功能單元為粒度,通常是若幹個類或接口組成

      - 外部調用:外部調用類圖中的類時可以根據其可見性直接調用其屬性和操作;外部調用組件圖中的組件則只能通過接口訪問其操作

      - 可部署性:類圖與單個實體和邏輯相對應,組織結構較為分散,不具有可部署性;組件圖中的組件本身就是模塊化、接近最終實現的功能單元,具有可部署性


  • 組件圖與包圖區別:組件圖與包圖在以下幾個方面上有顯著區別

      - 抽象層次:包圖側重對類、接口及包等元素的容器性抽象;組件圖側重對庫文件、源代碼文件、可執行文件等的模塊化抽象

      - 組織結構:包圖側重靜態的、不再改變的文件結構;組件圖側重動態的、隨編譯/鏈接/執行過程改變的文件結構

      - 可部署性:包圖側重源文件間的組織關系和層次,不具有可部署性;組件圖中的組件本身具有動態可執行性,所以可部署

      - 元素關系:包圖元素之間的關系大多是靜態包含或關聯;組件圖元素之間的關系大多是動態調用或實現

組件圖的註意事項

      - 組件粒度適中,既易於分析又不至於數目太龐大

      - 組件圖中的元素關系需要與類圖及包圖中元素關系相對照,避免不一致產生歧義

      - 組件圖中的元素名詞與來源文件一直,與部署圖中的元素一致

      - 組件圖如果太過繁雜又不得不標全組件,可以適當拆分成總組件圖和幾個組件子圖

Python設計模式 - UML - 組件圖(Component Diagram)