引言
在軟體工程與系統設計的世界中,理解 如何 組件之間如何互動,與知道 什麼 那些組件是同等重要的。雖然類圖提供了系統結構的靜態視圖, UML 序列圖 提供一種 動態視角。它們是互動圖,詳細說明操作是如何執行的,並捕捉物件之間隨時間的協作。
對於產品經理、架構師和開發人員而言,序列圖是不可或缺的工具,可用於視覺化邏輯流程、識別瓶頸,並確保複雜的使用案例能正確實現。本指南探討了建立 有效序列圖的關鍵概念、符號與最佳實務,並搭配PlantUML範例,幫助你在寫程式前先進行建模。
什麼是序列圖?
UML序列圖是一種互動圖,用來顯示流程如何彼此運作以及運作的順序。它在協作的背景下捕捉物件之間的互動。序列圖的定義特徵在於其對 時間.

序列圖是更廣泛的UML層級的一部分,特別屬於互動圖。它們用於:
-
模擬系統中活躍物件之間的高階互動。
-
詳細描述在實現使用案例的協作中,物件實例之間的互動。
-
視覺化子系統或外部系統之間的訊息交換。

主要特徵
-
以時間為導向: 垂直軸代表時間向下推進。
-
物件導向: 水平軸列出參與互動的物件或參與者。
-
動態:與靜態類圖不同,序列圖描述了對象在運行時如何協作。
序列圖概覽
理解序列圖的兩個主要維度對於有效閱讀和創建序列圖至關重要。
1. 物件維度(水平軸)
水平軸顯示互動中涉及的元素。這些元素通常根據它們首次參與訊息序列的時間,從左到右列出,但此順序可能有所不同。每個元素由一個 生命線.
2. 時間維度(垂直軸)
垂直軸代表時間的推進。當您向下移動圖表時,時間向前推進。
注意: 序列圖中的時間是關於 順序,而非持續時間。訊息之間的垂直空間不一定與實際的秒或毫秒相關;它僅表示一個事件發生在另一個事件之後。
核心符號與元素
要建立序列圖,您需要理解標準的UML符號。以下是基本的符號。
| 符號 | 描述 | 視覺表示 |
|---|---|---|
| 參與者 | 代表使用者、外部硬體或另一個系統所扮演的角色。參與者位於被建模系統之外。 | ![]() |
| 生命線 | 以虛線表示互動中的單個參與者(物件或參與者)。 | ![]() |
| 激活(控制焦點) | 生命線上的一個細長矩形,表示元件執行操作的期間。頂部與開始對齊,底部與完成對齊。 | ![]() |
| 呼叫訊息 | 帶有實心箭頭頭的實線箭頭,表示對目標生命線上的操作的調用。 | ![]() |
| 返回訊息 | 帶有開口箭頭頭的虛線箭頭,表示傳回給呼叫者的資訊。 | ![]() |
| 自我訊息 | 發送者和接收者為同一生命線的訊息,通常表示內部處理。 | ![]() |
| 建立訊息 | 一條虛線箭頭指向新生命線的標頭,表示物件的實例化。 | ![]() |
| 銷毀訊息 | 一條箭頭以目標生命線上的大「X」結束,表示該物件正在被銷毀。 | ![]() |
| 註解 | 附加於元素上的註解框,用於提供額外的上下文資訊,但不具語義意義。 | ![]() |
訊息與控制焦點
一個 事件 是互動中任何事件發生的點。 控制焦點 (或執行發生)以激活條來視覺化表示。它精確地標示出物件正在執行任務的時刻。

使用 PlantUML 的實務範例
以下為完整範例,展示如何使用 PlantUML 語法來建模各種情境。
範例 1:基本飯店預訂系統
此範例模擬經典的飯店預訂情境,展示使用者介面、預訂系統與資料庫之間的互動。

@startuml
title 飯店預訂系統 - 基本流程
actor "客人" as Guest
participant "預訂介面" as UI
participant "預訂系統" as System
database "飯店資料庫" as DB
Guest -> UI : 輸入預訂細節
activate UI
UI -> System : 檢查可用性(日期, 房型)
activate System
System -> DB : 查詢房間可用性
activate DB
DB --> System : 回傳可用房間
deactivate DB
System --> UI : 顯示可用選項
deactivate System
UI --> Guest : 顯示房間選擇
Guest -> UI : 選擇房間並確認
activate UI
UI -> System : 建立預訂(房間ID, 旅客資訊)
activate System
System -> DB : 儲存預訂記錄
activate DB
DB --> System : 確認編號
deactivate DB
System --> UI : 預訂已確認
deactivate System
UI --> Guest : 顯示確認訊息
deactivate UI
@enduml
範例 2:使用合併片段的進階邏輯
現實世界的系統包含條件、迴圈與選擇性步驟。UML 2.0 引入了 合併片段 以處理這些複雜性。
常見片段運算子:
-
alt:替代路徑(if/else)。
-
opt:選擇性路徑(if)。
-
loop: 重複執行。
-
ref: 對另一個圖表的參考。

@startuml
title 使用錯誤處理與迴圈的使用者登入
actor "使用者" as User
participant "登入頁面" as Page
participant "驗證服務" as Auth
database "使用者資料庫" as DB
User -> Page : 輸入憑證
activate Page
Page -> Auth : 驗證(使用者名稱, 密碼)
activate Auth
alt 憑證正確
Auth -> DB : 取得使用者資料
activate DB
DB --> Auth : 使用者資料
deactivate DB
Auth --> Page : 登入成功權杖
Page --> User : 重新導向至儀表板
else 憑證錯誤
Auth --> Page : 錯誤訊息
Page --> User : 顯示「登入失敗」
end
deactivate Auth
deactivate Page
opt 記住我已勾選
User -> Page : 勾選「記住我」
Page -> Auth : 儲存會話 Cookie
Auth --> Page : Cookie 已設定
end
loop 最多 3 次嘗試
User -> Page : 重新登入
break 帳戶已被鎖定
Page -> Auth : 檢查失敗嘗試次數
Auth --> Page : 帳戶鎖定狀態
Page --> User : 顯示「帳戶已被鎖定」
end
end
@enduml
範例 3:物件的建立與銷毀
此範例示範物件的生命周期,從建立到銷毀。

@startuml
title 訂單處理 - 物件生命週期
participant "訂單管理員" as OM
participant "訂單" as OrderObj
participant "付款網關" as PG
note right of OM : 開始處理
OM -> OrderObj : 建立新訂單()
create OrderObj
OrderObj --> OM : 訂單實例
OM -> OrderObj : 新增項目(itemList)
activate OrderObj
OrderObj --> OM : 項目已新增
OM -> PG : 處理付款金額
activate PG
PG --> OM : 付款成功
deactivate PG
OM -> OrderObj : 確認訂單()
OrderObj --> OM : 訂單已確認
OM -> OrderObj : 銷毀()
destroy OrderObj
note right of OrderObj : 物件已回收
deactivate OrderObj
@enduml
序列片段深入解析
序列片段 讓您能在不混雜主流程的情況下模擬複雜邏輯。片段以一個方框(框架)包覆互動的一部分來表示。

| 運算子 | 片段類型 | 描述 |
|---|---|---|
| alt | 替代 | 多個片段中,僅根據條件執行其中一個(類似 if-else)。 |
| opt | 選擇性 | 僅在條件為真時執行(類似簡單的 if 陳述式)。 |
| par | 平行 | 片段同時執行。 |
| loop | 迴圈 | 根據守衛條件多次執行。 |
| 跳出 | 跳出 | 如果條件滿足,則退出周圍的互動(例外處理)。 |
| 參考 | 參考 | 參考另一張圖表中定義的互動,以實現模組化。 |
合併片段範例

建模使用案例情境
序列圖在需求工程中被廣泛使用,以將使用案例細化為具體情境。
-
使用案例: 參與者與系統之間互動的集合。
-
情境: 使用案例中的一條單一路徑(例如「順利路徑」或「錯誤路徑」)。

透過將每個情境對應到序列圖,團隊可以在開發開始前確保所有功能需求都已納入考量。
為什麼要在寫程式前先建模?
你可能會問,「既然我可以直接寫程式,為什麼還要畫圖?」 以下是主要優點:
-
抽象: 序列圖運作於略高於程式碼的層級,專注於邏輯流程而非語法。
-
語言中立性: 無論使用何種程式語言(Java、Python、C# 等),利益相關者都能理解。
-
協作: 非程式設計人員(產品經理、業務分析師)也能參與並驗證邏輯。
-
測試與使用者體驗: 它們可作為測試案例的優秀藍圖,並透過釐清系統回應來協助使用者體驗的線框圖設計。
結論
UML 序列圖 是一種強大的工具,可用於可視化系統的動態行為。透過掌握這些符號——生命線、激活、訊息和合併片段,您便能清楚地向團隊成員傳達複雜的互動。無論您是在建模簡單的登入流程,還是複雜的分散式系統,序列圖都能彌補需求與實作之間的差距。
對於尋求輕鬆創建專業等級圖表的人而言,Visual Paradigm提供強大的 UML 建模工具套件。其社群版是一款獲國際獎項肯定的建模工具,直覺易用且完全免費,是學習與練習 UML 的絕佳選擇,能讓您更快更有效地掌握。




















