什麼是活動圖?
一個活動圖 是一種行為UML 圖 可作為軟體應用程式的高效率、形式化流程圖。作為統一模型語言(UML)規格的重要組成部分,它能清楚地呈現系統元件、業務流程或演算法執行迴圈的逐步操作流程。透過追蹤從初始起點到最終結論的控制流程順序,這種特定的UML 圖類型 協助軟體工程師、產品經理與業務分析師規劃複雜的系統邏輯、辨識邊界案例,並在撰寫任何後端邏輯程式碼之前,以視覺方式區分平行執行路徑。
使用VPasCode,您無需手動排列流程方塊、計算箭頭交叉點或調整版面間距。引擎使用現代化的、類似程式碼的格式標準,可在您撰寫程式時立即產生清晰且高度可讀的版面向量。
核心語法指南:元素與構造
要在 PlantUML 中設計出優雅且符合標準的 UML 活動圖,您必須掌握執行檢查點、活動狀態、條件分支、平行分割與垂直泳道。
1. 執行檢查點與基本活動
與傳統 UML 記法不同,現代活動腳本使用清晰且明確的指令標籤來標示工作流程的邊界。活動節點僅需在冒號與分號之間放置文字即可定義:

2. 條件邏輯分支(if / else / switch)
根據運作參數來分支您的控制邏輯,請使用標準的程式設計語法迴圈。您可以在括號內附加標籤,以表示箭頭線路通過所需的特定評估條件:
- 二元分支(if / elseif / else): 非常適合簡單的真/假驗證檢查:
Plantuml Edit Plantuml in VPasCode
if (Token 是否有效?) then (是) :授予 API 存取權; else (否) :重導向至登入頁面; endif
- 多路徑切換(switch): 非常適合評估數值範圍、角色層級或字串比對模式,而無需無限嵌套 if 指令:
Plantuml Edit Plantuml in VPasCode
switch (使用者角色類型) case ( 管理員 ) :顯示完整控制台; case ( 監督員 ) :顯示控制面板; case ( 來賓 ) :顯示唯讀訊息流; endswitch
3. 並行執行(fork / join)
在建模現代雲端環境或多執行緒程式碼迴圈時,您經常需要表示同時發生的任務。使用 fork 指令將您的執行流程拆分成獨立的並行路徑,並以 join 標籤將它們重新合併為單一執行緒:
fork
:產生電子郵件發票;
fork again
:扣除倉庫庫存;
end fork 
4. 使用泳道明確劃分責任
為了明確界定哪個參與者、服務團隊或微服務基礎架構邊界負責特定動作,請使用稱為泳道的垂直分割區。您可透過在管道字元(|泳道標題|):
|客戶應用程式|
start
:點擊購買按鈕;
|#LightBlue 支付網關|
:授權信用卡; 
清晰活動流程的最佳實務
- 使用主動動詞標籤: 透過以行動導向的動詞開頭,讓您的活動文字區塊簡潔明瞭(例如,
:解析載荷;而非:由工作應用程式解析載荷資料;). - 以顏色標示高風險節點: 直接將自訂的十六進位顏色附加到敏感的背景節點上(例如,
:#Crimson:清除資料庫記錄;) 以使關鍵步驟在大型企業地圖中視覺上更加突出。 - 避免線條交叉: 如果您的多分支圖開始顯得雜亂,請使用分離符號(
detach) 或終端錨點來插入一個乾淨的圓形連接節點,以分割文字區塊。
現實世界中的 PlantUML 活動圖範例
範例 1:使用者入門與身分驗證(分支與切換)
此範本模擬了一個標準的使用者入門工作流程,包含深入的二元條件邏輯以及在乾淨的 UML 圖表佈局內的身份驗證檢查。
@startuml
start
:使用者提交註冊表單;
if (電子郵件已存在?) then (是)
:顯示帳戶衝突警告;
stop
else (否)
:建立待處理的使用者記錄;
endif
:發送驗證 OTP 碼;
repeat
:等待使用者輸入 OTP;
backward:記錄失敗嘗試警告;
repeat while (OTP 是否正確?) is (否) not (是)
switch (帳戶選擇等級)
case ( 高級付費 )
:配置資料庫叢集;
:觸發 Stripe 訂閱循環;
case ( 免費等級 )
:套用基本 API 速率限制;
endswitch
:標記使用者個人資料為已驗證;
stop
@enduml 
語法解析: 此範本展示了標準的 repeat / backward / repeat while 驗證循環,持續捕捉使用者輸入,直到正確的安全金鑰通過為止。多路徑的 switch 包裝器可乾淨地根據等級狀態值分離帳戶設定邏輯。
範例 2:分散式訂單履行引擎(泳道與平行分支)
此複雜的企業架構地圖利用結構性垂直泳道,精確追蹤自動化結帳流程如何在瀏覽器客戶端、API 網關和實體履行中心之間並行處理任務。
@startuml
|#White|客戶端應用程式|
start
:提交購物車;
:選擇運送地址;
|#LightCyan|結帳 API 引擎|
:驗證產品庫存;
if (庫存充足?) then (否)
:返回缺貨錯誤;
stop
else (是)
:鎖定庫存分配;
endif
fork
:透過 Stripe 處理付款;
:產生數位 PDF 收據;
fork again
|#Lavender|倉儲管理系統|
:列印實體包裝單;
:指派倉儲機器人選取員;
end fork
|#LightCyan|結帳 API 引擎|
:發送訂單確認鉤子;
stop
@enduml 
語法解析: 使用彩色泳道(例如 |#Lavender 倉儲管理系統|) 強制自動化佈局引擎建立清晰、分離的欄位。平行的 分叉該語句明確顯示,API引擎上的付款處理與實體倉庫中的包裝單生成同時發生,在終端之前順利合併停止區塊。