A UML狀態機圖,也稱為狀態圖或狀態圖,是一種強大的建模工具,用於表示單一物件或系統組件的生命周期與動態行為。它捕捉物件如何在不同狀態之間轉換,以回應事件,從而清晰地呈現事件驅動的邏輯。

✅ 與序列圖不同,後者著重於多個物件在時間上的互動,狀態機圖則強調單一實體的內部狀態演變——使其成為建模複雜、反應式系統的理想選擇。
理解這些基礎元件是建立準確且有意義的狀態圖的關鍵。
| 元件 | 描述 | 視覺化表示 |
|---|---|---|
| 狀態 | 物件生命週期中的一種條件或情境,期間物件滿足特定約束、執行動作,或等待事件。 | 圓角矩形 |
| 初始狀態 | 標記開始狀態機的起點。一個實心的黑圓點。 | ● |
| 終止狀態 | 表示結束流程的結束。一個同心圓(圓內有一個黑點)。 | ○● |
| 轉移 | 一個有方向的箭頭,表示從一個狀態移動到另一個狀態。 | ➔ |
| 事件 | 觸發轉移的事件。可以是: • 訊號事件(例如: 付款已收到)• 呼叫事件(例如: startHeating())• 時間事件(例如: 5秒後)• 變更事件(例如, 溫度 > 80°C) |
事件 [保護條件] / 動作 |
| 保護條件 | 一個布林表達式,必須為真才能發生轉移。 | [餘額 > 0] |
| 動作 / 進入/離開 |
|
進入 / print("進入空閒狀態") |
| 活動 | 在狀態期間持續進行且可中斷的行為。 | 執行 / 執行診斷() |
| 子狀態(複合狀態) | 包含嵌套狀態的狀態——用於管理複雜性。 | 在較大方框內的嵌套狀態 |
| 歷史狀態 | 一個偽狀態,會記住離開複合狀態前的最後一個活躍的子狀態在離開複合狀態之前。允許恢復。 | H(周圍有一個圓圈) |
| 分叉 | 將單一流程分割為平行並行流。 | • (實心圓) |
| 合併 | 將多個並行的流程合併回一個。 | • (實心圓) |
📌 注意: 轉移通常標記為:
事件 [保護條件] / 動作
範例:付款已收到 [餘額 >= 0] / updateBalance()
選擇要建模的實體(例如:收費亭控制器, 加熱系統, 投票選票).
定義物件可能處於的所有有意義的狀態:
空閒
偵測到車輛
處理付款
付款已收到
閘門打開
錯誤 / 系統故障
重置中
從 初始狀態 (●).
結束於 最終狀態 (○●).
問: 什麼導致物件狀態改變?
| 從狀態 | 事件 | 守衛 | 到狀態 | 動作 |
|---|---|---|---|---|
| 空閒 | 偵測到車輛 | — | 偵測到車輛 | 啟動計時器 |
| 偵測到車輛 | 已收到付款 | 餘額 ≥ 0 | 已收到付款 | 打開閘門 |
| 偵測到車輛 | 逾時 | — | 錯誤 | 記錄失敗 |
使用 進入, 離開,以及 執行 動作:
進入 / log("進入付款狀態")
執行 / validateCard()
離開 / closeGate()
將大型狀態拆分為子狀態:
付款狀態 → 驗證中, 處理中, 已確認
使用 歷史狀態 (H) 在中斷後返回最後一個活躍的子狀態。
使用 Fork (•) 分割為平行流程
一個流程:處理付款
另一個:記錄車輛資料
合併至合併 (•) 以恢復單一路徑
| 系統 | 狀態 | 關鍵事件 | 使用案例 |
|---|---|---|---|
| 自動收費閘口 | 空閒 → 檢測到車輛 → 收到付款 → 閘門打開 → 重置 | 檢測到車輛, 收到付款, 逾時 |
處理車輛,防止詐騙 |
| 加熱系統 | 空閒 → 加熱 → 故障 | 溫度 < 門檻, 溫度 > 90°C, 風扇故障 |
安全監控 |
| 數位投票平台 | 草稿 → 提交 → 核實 → 計票 → 結案 | submitVote(), verifyIdentity(), timeLimitExceeded() |
安全且可審計的投票 |
| 拍賣流程 | 開放 → 出價 → 結束 → 付款處理 | 出價已提交, 拍賣結束, 付款已驗證 |
並行處理出價與付款 |
| MGUK(一級方程式動能馬達發電機) | 待機 → 再生 → 充電 → 重置 | 能量等級 > 50%, 已收到重置信號 |
高性能能量回收 |
🔍 這些圖表幫助工程師與設計師預測邊界情況, 驗證邏輯,以及傳達系統行為 清楚地在各團隊間傳達。
此模型包含請求的車牌驗證與收據生成的次狀態,以及罰款與重置流程。
@startuml
[*] --> Idle
Idle --> InRange : 車輛偵測
state InRange {
[*] --> PlateValidation
PlateValidation --> PlateRead : 成功
PlateValidation --> InvalidPlate : 錯誤處理
}
InRange --> PaymentReceived : 支付成功
state PaymentReceived {
[*] --> ReceiptGeneration
}
PaymentReceived --> Idle : 軌道清空
InRange --> NoPayment : 支付失敗
NoPayment --> Penalty : 執行罰款
Penalty --> Idle : 重置系統
@endum
此範例著重於由溫度事件(過熱/過冷)觸發的狀態相關行為,以及故障處理。
@startuml
[*] --> Idle
Idle --> Heating : 過冷
Idle --> Cooling : 過熱
state Cooling {
[*] --> Startup
Startup --> Ready : 風扇/壓縮機運行
Ready --> Running
}
Heating --> Idle : 正常
Cooling --> Idle : 正常
Heating --> Failure : 故障事件
Cooling --> Failure : 故障事件
Failure --> Idle : 故障清除 [5]
@endum
@startuml
[*] --> Idle
Idle --> Heating : 過冷
Idle --> Cooling : 過熱
state Cooling {
[*] --> Startup
Startup --> Ready : 風扇/壓縮機運行
Ready --> Running
}
Heating --> Idle : 正常
Cooling --> Idle : 正常
Heating --> Failure : 故障事件
Cooling --> Failure : 故障事件
Failure --> Idle : 故障清除
@endum
此模型反映了來源中提到的特定轉移邏輯:錯誤狀態會導致重置,然後再返回空閒狀態。
@startuml
[*] --> Ready
Ready --> Error : 故障偵測
Error --> Reset : 啟動重置
Reset --> Idle : 重置完成
Ready --> Idle : 待機指令
Idle --> Ready : 啟用
@endum
此圖示使用分叉與合併節點來顯示並行的子活動:出價處理與付款額度授權。
@startuml
[*] --> EnteringAuction
state EnteringAuction {
state fork_node <<分叉>>
[*] --> fork_node
fork_node --> ProcessingBid
fork_node --> AuthorizingPayment
state join_node <<合併>>
ProcessingBid --> join_node
AuthorizingPayment --> join_node
join_node --> [*]
}
EnteringAuction --> Canceled : 使用者退出
EnteringAuction --> Rejected : 出價/付款無效
EnteringAuction --> Success : 賣場結束
@endum
基於從啟動到最終提交的投票生命週期捕捉意圖。
@startuml
[*] --> Initiation
Initiation --> IdentityVerified : 證件核對
IdentityVerified --> CastingVote : 授權存取
CastingVote --> Reviewing : 選擇完成
Reviewing --> Submitted : 確認投票
Submitted --> [*] : 處理完成
Reviewing --> CastingVote : 編輯選擇
IdentityVerified --> Rejected : 核對失敗
@endum
來源強調,撰寫上述程式碼需要具備特定語法與手動編碼,這需要較高的學習曲線。Visual Paradigm AI 透過允許您直接輸入:「為一個包含車牌驗證與罰款狀態的收費系統建立狀態機」,並讓軟體立即呈現視覺化與底層邏輯給您。
這個Visual Paradigm AI 圖示產生器透過將自然語言轉換為專業級的狀態機圖示,改變傳統建模方式——快速、精確且具智慧。
不再需要手動拖曳和對齊元件。
AI 生成一個完整佈局且結構清晰的圖表僅需幾秒即可從簡單提示生成。
💬 範例提示:
「為一個收費亭系統建立狀態機圖,該系統能偵測車輛、處理付款並處理錯誤。」
用簡單英文——無需學習如 PlantUML 之類的語法。
AI 解讀意圖並建立正確的結構。
✅ 提示:
「模擬一個加熱系統,當溫度降至 18°C 以下時開始加熱,達到 22°C 時停止,若風扇故障則進入故障狀態。」
→ AI 生成:空閒 → 加熱 → 故障,並搭配適當的事件與保護條件。
進行對話以優化模型:
「將『錯誤』改名為『系統故障』」
「在錯誤與空閒之間新增一個重置狀態」
「在『處理付款』狀態中,10 秒後插入逾時保護條件」
🔄 AI 會根據反饋即時更新圖表。
人工智慧確保:
正確的UML符號:觸發條件、保護條件、進入/離開動作均正確格式化。
錯誤偵測:標示無法到達的狀態、衝突的轉移或遺漏的事件。
最佳佈局:自動排列狀態以提升可讀性與視覺清晰度。
確認滿意後:
匯出或直接匯入至 Visual Paradigm Professional Edition.
用途:
系統設計文件
利害關係人簡報
程式碼產生(透過UML模型)
模型驅動開發(MDD)
| 實務 | 為何重要 |
|---|---|
| 保持狀態為原子且具意義 | 避免過於複雜或模糊的狀態,例如「某事發生了」 |
| 明智地使用複合狀態 | 將複雜行為拆解(例如:「付款處理」→「驗證」、「轉帳」) |
| 為關鍵轉移始終定義保護條件 | 防止意外的狀態變更(例如:當餘額 < 0 時避免收費) |
| 最小化無法到達的狀態 | 確保每個狀態都能從初始狀態到達 |
| 對中斷的流程使用歷史狀態 | 提升易用性(例如,逾時後恢復投票) |
| 使用 Fork/Join 限制並發 | 避免因過多平行流程而過度複雜化 |
| 優勢 | 描述 |
|---|---|
| 清晰度 | 以直觀的方式呈現複雜行為 |
| 可預測性 | 顯示事件如何驅動狀態變更 |
| 錯誤預防 | 早期揭示邊界情況和無效轉移 |
| 溝通 | 使開發人員、測試人員和利益相關者能夠就系統行為達成一致 |
| 程式碼的基礎 | 可用於在程式碼中生成狀態機(例如,在 C++、Python、Java 中) |
UML 2.5 規範 – 狀態機的官方標準
Visual Paradigm – 具備 AI 圖表生成功能的完整 UML 建模工具
PlantUML – 基於文字的圖表繪製(適用於進階使用者)
Enterprise Architect, StarUML, Lucidchart – 替代的建模平台
🔄 狀態機圖不僅僅是視覺輔助工具——它是一份設計合約,定義了您的系統在各種條件下應如何運作。
透過 Visual Paradigm 的 AI 圖表生成器,建立、優化和部署這些圖表變得前所未有的容易。無論您正在建模收費系統、投票平台,還是高性能賽車組件,現在您能將想法轉化為精確且專業的圖表——比以往更快、更聰明。
✅ 立即開始建模:
🌐 試用 Visual Paradigm AI 圖表生成器
🧠 用白話描述您的系統——幾秒內獲得完美的 UML 狀態機圖。
📌 專業提示: 將您的 AI 生成圖表儲存為範本以供未來使用——加速類似支付網關、物聯網裝置或工作流程引擎等系統的設計。
📘 掌握狀態機的藝術。打造更智慧的系統。清晰溝通。
—— 您的 UML 狀態機指南,由 AI 驅動