簡介

在複雜的軟體工程世界中,了解系統各部分如何互動,對於建構穩健且可維護的應用程式至關重要。UML 組件圖是建模物件導向系統實體面向的強大工具。它們提供組件如何組織、如何透過介面互動以及彼此如何依賴的高階視圖。
無論您正在架構新的微服務應用程式、記錄現有的舊系統,或規劃資料庫遷移,組件圖都能提供清晰度與結構。本指南將引導您了解 UML 組件圖的基本概念、記號、關係與實際應用,並利用現代工具如Visual Paradigm 的 AI 聊天機器人 與 VPasCode來簡化您的建模流程。
什麼是組件圖?
UML 組件圖用於建模物件導向系統的實體面向。它們對於以下用途至關重要:
- 視覺化 系統的靜態實現視圖。
- 指定 基於組件的系統。
- 文件化 為利害關係人與開發團隊記錄架構。
- 建構 透過正向與逆向工程建構可執行系統。
組件圖本質上是專注於系統組件而非個別類別的類別圖。它們有助於將複雜系統分解為可管理、模組化的部分。

更快、更好、更輕鬆地學習 UML
您正在尋找免費的 UML 工具,以更快、更輕鬆、更快速地學習 UML 嗎?Visual Paradigm 社群版是一款支援所有 UML 圖類型的 UML 軟體。它是一款獲國際獎項肯定的 UML 建模工具,同時易於使用、直觀且完全免費。
免費下載
組件圖一覽
元件圖將正在開發的實際系統分解為多個不同層級的功能。每個元件負責整個系統中的一個明確目標,且僅在必要時與其他必要元素進行互動。

上述範例顯示了較大元件的內部元件:
- 所需介面:資料(帳號與檢查 ID)透過右側的連接埠流入元件,並轉換為內部元件可使用的格式。右側的介面稱為所需介面,代表該元件執行其職責所需的服務。
- 提供介面:接著,資料透過各種連接傳遞並經過其他多個元件,最後從左側的連接埠輸出。左側的介面稱為提供介面,代表展示元件所提供的服務。
- 封裝:值得注意的是,內部元件被一個大型「方框」所包圍;該方框可以是整體系統本身(在這種情況下,右上角將不會有元件符號),也可以是整體系統的子系統或元件(在這種情況下,該「方框」本身即為一個元件)。
元件圖的基本概念
一個元件代表系統中的一個模組化部分,其內容經過封裝,且其表現形式可在其環境中被替換。在 UML 2 中,元件繪製為一個矩形,並可包含垂直堆疊的選填區段。UML 2 中元件的高階抽象視圖可建模為:
- 一個包含元件名稱的矩形。
- 一個包含元件圖示的矩形。
- 一個包含標記文字和/或圖示的矩形。

運用 AI 架構您的模組化系統
元件圖可視覺化您系統的模組化部分與實體表現。使用Visual Paradigm 的 AI 聊天機器人,您可以立即透過簡單的對話介面進行系統架構的腦力激盪、識別提供/所需介面,並生成初步的元件圖。
現已推出:AI 聊天機器人——您的設計夥伴
只需向聊天機器人描述您的模組、微服務或資料庫結構。它將協助您定義:
- 模組邊界:識別系統中哪些部分應被封裝為元件。
- 相依性映射:視覺化不同可執行檔與函式庫在您發行版本中的互動方式。
立即與 AI 對話
了解更多關於我們 AI 驅動的建模生態系統:
AI 元件指南 所有 AI 工具
介面
介面定義了元件之間的契約。在下方的範例中,展示了兩種類型的元件介面:
- 提供之介面:末端帶有完整圓圈的符號(通常稱為「棒棒糖」)代表元件所提供的介面。這是介面分類器實現關係的簡寫。
- 需求介面:末端僅有半圓形的符號(又稱插座)代表元件所需的介面。在兩種情況下,介面的名稱都放置在介面符號附近。

元件圖範例 – 使用介面(訂單系統)

PlantUML 等效程式碼:
@startuml
skinparam componentStyle uml2
skinparam BackgroundColor white
skinparam DefaultFontName Arial
' 樣式設定以配合藍色配色
skinparam component {
BackgroundColor #66b3ff
BorderColor #004d99
FontColor black
}
skinparam interface {
BackgroundColor #66b3ff
BorderColor #004d99
}
' 元件
component "訂單系統" as OrderSystem
component "客戶儲存庫" as CustomerRepo
component "庫存系統" as InventorySystem
' 介面與連線
interface "客戶查詢" as CustomerLookup
interface "產品存取器" as ProductAccessor
OrderSystem -( CustomerLookup
CustomerLookup - CustomerRepo
OrderSystem --( ProductAccessor
ProductAccessor -- InventorySystem
@enduml 
子系統
「子系統分類器是元件分類器的特化版本。因此,子系統表示法元素繼承了與元件表示法元素完全相同的規則。唯一的差異在於,子系統表示法元素使用關鍵字「<<subsystem>>」,而非「<<component>>.

連接埠
連接埠以系統或元件邊緣旁的方塊表示。連接埠常用於揭露元件所需與提供的介面,作為特定的互動點。

關聯關係
從圖形角度來看,元件圖是頂點與弧線的集合,通常包含元件、介面以及各種關聯關係,例如相依性、聚合、約束、泛化、關聯與實現。它也可能包含註解與約束。
| 關聯關係 | 表示法 | 說明 |
|---|---|---|
| 關聯 | ![]() |
關聯指定了可在具型別實例之間發生的語意關係。它至少具有兩個由屬性表示的端,每個端都連接到該端的型別。 |
| 組合 | ![]() |
複合聚合是一種強形式的聚合,要求一個部分實例在同一時間最多只能屬於一個複合體。若複合體被刪除,其所有部分通常也會隨之被刪除。 |
| 聚合 | ![]() |
一種關聯,其其中一端標記為共享聚合,表示該關聯具有共享聚合。 |
| 約束 | ![]() |
以自然語言文字或機器可讀語言表達的條件或限制,用於宣告某元素的某些語意。 |
| 相依性 | ![]() |
相依性表示單一或多個模型元素需要其他模型元素來進行其規格說明或實作。依賴元素在語意或結構上依賴於供應者元素。 |
| 泛化 | ![]() |
較一般分類器與較特定分類器之間的分類關係。特定分類器的每個實例同時也是該一般分類器的間接實例,並繼承其特徵。 |
實際應用
1. 建模原始碼
- 透過正向或逆向工程,識別感興趣的原始碼檔案集合,並將它們建模為標記為「
<<檔案>>. - 對於較大的系統,請使用套件來顯示原始碼檔案群組。
- 考慮揭露一個標記值,用以指示資訊,例如原始碼檔案的版本號碼、作者以及最後修改日期。請使用工具來管理此標記的值。
- 使用相依性來建模這些檔案之間的編譯相依關係。同樣地,請使用工具來協助產生與管理這些相依性。
元件範例 – Java 原始碼

元件圖範例 – 具版本控制的 C++ 程式碼

原始碼建模的 PlantUML 等效語法:
@startuml
skinparam componentStyle uml2
skinparam BackgroundColor white
skinparam DefaultFontName Arial
' 樣式設定以配合藍色配色
skinparam component {
BackgroundColor #66b3ff
BorderColor #004d99
FontColor black
}
' 元件列 1(版本)
component "signal.h (v3.5)" as signal35
component "signal.h (v4.0)" as signal40
component "signal.h (v4.1)" as signal41
' 元件列 2
component "interp.cpp" as interp
component "signal.h (v5.0)" as signal50
' 元件列 3
component "irq.h" as irq
component "device.cpp" as device
' 連接與佈局覆寫
' 頂列指向左方的父元素
signal40 .left.> signal35 : <>
signal41 .left.> signal40 : <>
' 垂直相依性
interp .up.> signal41
signal50 .up.> signal41
interp .down.> irq
device .up.> interp
@enduml
2. 建模可執行版本發布
- 識別您希望建模的元件集合。通常,這將涉及位於單一節點上的一些或全部元件,或是這些元件集合在系統中所有節點上的分佈情況。
- 考慮此集合中每個元件的標記(stereotype)。對於大多數系統,您會發現有少數幾種類型的元件(例如可執行檔、函式庫、資料表、檔案和文件)。您可以利用 UML 的延伸機制為這些標記提供視覺提示。
- 針對此集合中的每個元件,考慮其與相鄰元件的關係。這通常涉及由某些元件輸出(實現)然後由其他元件輸入(使用)的介面。如果您希望揭露系統中的接縫,請明確地建模這些介面。如果您希望模型處於較高的抽象層級,則可以僅顯示元件之間的相依關係,而省略這些具體的關聯。

可執行版本發布的 PlantUML 對應範例:
@startuml
skinparam componentStyle uml2
skinparam BackgroundColor white
skinparam DefaultFontName Arial
' 現代藍色風格以配合您的圖表樣式
skinparam component {
BackgroundColor #5cadff
BorderColor #2b7fff
FontColor black
RoundCorner 10
}
skinparam interface {
BackgroundColor #5cadff
BorderColor #2b7fff
}
' 元件
component "path.dll" as path
component "collision.dll" as collision
component "driver.dlln(version = "B.2.1.3")" as driver
' 介面
interface IDrive
interface ISelfTest
' 配置與清晰連接
path .right.> collision
' 使用隱藏配置以強制介面的垂直堆疊
IDrive -[hidden]down- ISelfTest
' 將驅動程式與其介面在左側清晰連接
driver -left- IDrive
driver -left- ISelfTest
' 清晰、筆直的垂直相依線
path .down.> IDrive
@enduml
3. 實體資料庫建模
- 識別模型中代表您邏輯資料庫結構的類別。
- 選擇將這些類別映射至資料表的策略。您也需考慮資料庫的實體分佈情況。您的映射策略將受到您希望資料在已部署系統中存放位置的影響。
- 為了視覺化、指定、建構並記錄您的映射,請建立一個包含標記為「
<<資料表>>. - 在可能的情况下,請使用工具協助您將邏輯設計轉換為實體設計。

實體資料庫的 PlantUML 對應範例:
@startuml
skinparam componentStyle uml2
skinparam BackgroundColor white
skinparam DefaultFontName Arial
skinparam linetype ortho
' 樣式配置以配合藍色色系
skinparam component {
BackgroundColor #66b3ff
BorderColor #004d99
FontColor black
}
' 父元件
component "school.db" as school_db
' 子元件
component "course" as course
component "department" as dept
component "instructor" as instructor
component "school" as school
component "student" as student
' 隱藏連結以強制水平對齊列
course -[hidden]right- dept
dept -[hidden]right- instructor
instructor -[hidden]right- school
school -[hidden]right- student
' 組合關係(黑色菱形)
school_db *-- course
school_db *-- dept
school_db *-- instructor
school_db *-- school
school_db *-- student
@endif

結論
UML 元件圖對於需要傳達系統結構完整性的架構師與開發人員而言不可或缺。透過聚焦於元件、介面及其關係,這些圖表提供了清晰的藍圖,說明軟體模組如何互動、相依並整合。
隨著 AI 驅動工具的出現,例如「Visual Paradigm 的 AI 聊天機器人 以及基於程式碼的建模與 VPasCode 以及 PlantUML,建立與維護這些圖表已變得更加高效且易於使用。無論您是在建模原始程式碼相依性、規劃可執行版本,或是設計實體資料庫結構,元件圖都能提供建構可擴展且易於維護系統所需的清晰度。
今天就開始運用這些工具,以提升您的架構文件品質並簡化開發工作流程。

















