UML 通訊圖,歷史上稱為協作圖,提供了一種空間視角,展示物件在系統內如何互動。與高度著重時間的序列圖不同,通訊圖優先強調元件之間的結構關係。理解此記號中使用的特定符號,對於需要清晰記錄複雜物件互動的架構師與開發人員至關重要。
本指南將拆解標準通訊圖中的每個元素。我們將探討其視覺語法、箭頭背後的意義,以及如何在不使設計雜亂的情況下表示多重性。掌握這些元件,可確保您的系統文件準確且易讀。

🏗️ 圖表的核心元件
通訊圖本質上是由節點與邊構成的圖形。每個節點代表系統的一部分,每條邊則代表連接或互動。以下章節將詳細說明用於構建這些圖形的特定符號。
1. 物件實例(節點)
最基本的建構單元是物件。在通訊圖中,物件代表參與互動的類別實例。它們以具有下列特徵的矩形表示:
- 形狀:簡單的矩形。
- 標籤:矩形內的文字通常顯示實例名稱,後接冒號與類別名稱(例如:”customer: Customer).
- 格式:實例名稱通常以下劃線標示,以與類別名稱區分。
- 多重性:有時,若物件代表集合,則多重性會顯示在物件標籤附近。
這些節點作為所有訊息的端點。若無物件,則通訊將缺乏上下文。繪製時,請確保名稱在圖表範圍內唯一,以避免混淆。
2. 連結(關聯)
連結用於連接物件實例。它們代表類別圖中定義的關聯。這些線條表示一個物件持有對另一個物件的參考,從而允許傳送訊息。
- 視覺:連接兩個物件矩形的實心直線。
- 方向性:預設情況下,連結為雙向。然而,特定的可導航性可透過線條上的箭頭標示。
- 角色名稱:放置在連結附近的文字描述所連接物件所扮演的角色(例如:”manager, client).
值得注意的是,鏈接在場景執行過程中不會發生變化。它們代表支持訊息所顯示動態行為的靜態結構。
| 符號 | 視覺表示 | 含義 |
|---|---|---|
| 物件 | 帶有文字的矩形 | 參與互動的類別實例 |
| 鏈接 | 實線 | 允許通訊的結構連接 |
| 導航箭頭 | 線上的空心箭頭 | 指示關聯遍歷的方向 |
| 多重性 | 數字如 1..*、0..1 | 定義可連接的實例數量 |
📩 訊息符號與流程
訊息是通訊圖的核心。它們顯示物件之間的控制與資料流程。與序列圖不同,這些訊息並非排列在垂直時間軸上,而是放置在連接物件的鏈接上。
3. 訊息箭頭
訊息以連接兩個物件的箭頭表示。箭頭從發送者指向接收者。箭頭樣式指示通訊類型:
- 實心箭頭:代表同步呼叫。發送者會等待接收者完成操作後才繼續執行。
- 虛線箭頭:代表非同步訊息。發送者發送訊息後立即繼續,無需等待。
- 填充箭頭:有時用於指示回覆訊息,但為求清晰,回覆訊息常被省略。
箭頭上的標籤包含被呼叫的操作或方法名稱。參數可括在括號內。例如,”calculateTotal(price, tax).
4. 序列編號
由於圖表並非按時間垂直排序,序列號至關重要。它們告訴讀者訊息發生的順序。
- 格式: 一個數字後跟一個句號(例如:”1, 1.1, 2).
- 根訊息: 從 1.
- 遞迴訊息: 如果一個訊息觸發另一個嵌套在首次呼叫中的訊息,請使用類似 ” 的十進位數字1.1, 1.2.
- 平行訊息: 同時發生但未嵌套的訊息可能會依序編號(例如:”2, 3).
這些數字讓讀者能夠重構互動的時間軸。它們通常放置在訊息箭頭附近,位於箭頭線的起始端或末端。
5. 回覆訊息
回覆訊息表示結果已傳送回呼叫者。在通訊圖中,這些訊息是可選的。若包含,通常以指向發送者的虛線箭頭表示。除非特定的回覆值具有重要意義,否則通常不標註標籤。省略它們可使圖表更簡潔,因為控制流程已透過序列號隱含。
🔢 多重性與約束
通訊圖表通常處理物件集合。多重性符號表示參與連結的類別實例數量。
- 單一實例: 無符號或 1.
- 多個實例: 星號 * 或 0..* 表示零個或多個。
- 特定範圍: 2..5 表示特定的計數範圍。
- 位置: 多重性放置在連結的末端,緊鄰其所描述的物件實例。
當建立一個經理監督多名員工的情境模型時,經理物件與員工物件之間的連結將具有 1 在經理端,以及 0..* 在員工端。這說明了系統的結構容量。
🔄 複雜結構
雖然標準通訊圖專注於線性流程,但 UML 允許更複雜的建模結構。這些結構用於表示互動中的條件邏輯或迴圈。
6. 互動框架(迴圈與選擇)
雖然在純協作圖中較不常見,但框架可用於將訊息分組。它們繪製為一個大矩形,包圍相關的物件與訊息。
- 迴圈框架: 表示所包圍的訊息會重複。標籤如 loop 或 while (condition) 會放置在框架的頂部。
- 替代框架:代表替代路径(if/else)。它被水平线分隔成若干部分。每个部分都标有方括号中的守卫条件,例如“[有效]或“[无效].
这些框架通过隔离特定场景来帮助管理复杂性。然而,过度使用会使图表难以阅读。仅在交互逻辑存在显著分支时才使用它们。
🧭 导航与职责
理解对象如何相互发现是图表逻辑的关键。这通常通过链接箭头的方向来表示。
- 单向:如果箭头从对象 A 指向对象 B,则对象 A 知道对象 B,但对象 B 不一定知道对象 A。
- 双向:没有箭头的实线表示两个对象可以相互访问。
这种区分对于解耦至关重要。如果图表显示从“订单对象到“数据库对象的直接链接,意味着紧密耦合。更好的设计可能会通过“订单服务对象进行路由。链接的视觉布局应反映这一架构决策。
🆚 比较:通信图与序列图
要完全理解这些符号,了解它们“不是什么很有帮助。通信图常与序列图进行比较。
| 特性 | 通信图 | 序列图 |
|---|---|---|
| 重点 | 对象关系 | 时间与顺序 |
| 佈局 | 結構/幾何 | 垂直時間軸 |
| 時間 | 隱含(透過序列編號) | 明確(垂直位置) |
| 活化條 | 未使用 | 用於顯示活躍執行 |
| 最適合 | 複雜物件導航 | 詳細時序分析 |
通訊圖符號集是序列圖符號集的子集。它缺乏垂直生命線和活化條,而是高度依賴物件的空間配置與連結線。
🛠️ 清晰度的最佳實踐
正確使用符號是一回事;有效使用符號則是另一回事。以下是確保您的圖表專業且易讀的指導原則。
7. 佈局策略
- 集中化:將主要控制器或啟動物件置於中心。
- 分組:將相關物件保持靠近,以最小化交叉線。
- 流程:在可能的情况下,將訊息排列為從左到右或從上到下邏輯流動。
8. 標註慣例
- 命名一致性:在整個圖表中統一使用相同的實例名稱。
- 方法名稱:方法名稱使用駝峰式命名法,以符合程式碼慣例。
- 編號:確保序列編號唯一且合乎邏輯。
9. 避免雜亂
- 簡化連結:不要顯示與互動無關的連結。這可減少視覺雜訊。
- 限制訊息:如果互動過於複雜,請將其拆分為多個圖表。每個圖表應涵蓋一個特定情境。
- 隱藏回覆:除非必要,否則不要繪製回覆訊息箭頭。這可節省空間並減少混淆。
📝 詳細符號參考
以下清單可作為您將遇到的特定視覺元素的快速參考。
- 實例名稱:矩形內的文字。表示特定物件。
- 類別名稱:冒號後的文字。表示物件的類型。
- 連結線:連接實例的實線。
- 關聯箭頭:連結線上的箭頭,表示可導航性。
- 訊息箭頭:表示呼叫的箭頭。
- 訊息標籤:描述操作的文字。
- 序列編號:訊息前的數字前綴。
- 多重性:連結末端的數字。
- 框架:圍繞一組訊息的方框,用於迴圈或條件判斷。
- 保護條件:框架內括號中的文字(例如:”[if open]).
🧩 實際應用
考慮一個用戶登入的情境。該圖表將以一個「用戶」物件發送訊息給一個「登入服務」物件開始。該「登入服務」接著聯繫一個「資料庫」物件以驗證憑證。最後,它將回應傳回給「用戶」.
符號的排列方式如下:
- 物件:三個矩形以三角形排列。
- 連結:實線連接所有三個物件。
- 訊息:
- 箭頭從「用戶」指向「登入服務」,標註為「1: 驗證」.
- 箭頭從「登入服務」指向「資料庫」,標註為「1.1:驗證.
- 箭頭從 資料庫至 登入服務(返回)。
- 箭頭從 登入服務至 使用者(返回)。
此佈局清楚顯示了相依性。如果 登入服務被移除,使用者與 資料庫將無法直接連接,突顯潛在的架構風險。
🔍 常見問題排除
在建立這些圖表時,某些錯誤可能導致誤解。請注意以下陷阱。
- 缺少序列編號:若無編號,平行訊息的順序將不明確。請務必為每個鏈結中的第一則訊息編號。
- 交叉線條:過多的交叉連結會讓圖表看起來像一團亂麻。請重新排列物件位置。
- 多重性不一致:請確保連結上的多重性與類別定義相符。如果類別說明為 1..1,圖表則不應顯示 0..*.
- 訊息過載:請勿在單一箭頭上放置多個操作。請將它們區分為獨立的訊息。
🎓 重點摘要
UML 通訊圖是視覺化空間情境中物件互動的強大工具。符號雖簡潔,卻承載著重要的語義。物件定義了參與者,連結定義了連接關係,而訊息則定義了動作。
遵循標準記號,可確保任何審查者無需額外背景資訊即可理解系統架構。序列號取代了時間的垂直軸,允許更靈活的佈局。多重性符號則為結構關係增添了精確度。
請記住,圖表的重點在於溝通,而不僅僅是文件記錄。若符號排列不當,資訊便會流失。應優先考慮可讀性,而非嚴格遵循網格佈局。請節制使用框架以管理複雜度,並保持訊息標籤簡潔。
掌握每個符號的知識後,您便能設計出清晰、有效且專業的系統架構。專注於元件之間的關係,行為模式自然會變得清晰。











