引言
UML(統一建模語言)狀態圖是用於模擬系統動態行為的強大工具,能夠捕捉系統在事件觸發下狀態之間的轉移過程。它廣泛應用於軟體工程中,用於設計和分析具有複雜行為的系統,例如嵌入式系統、使用者介面和業務流程。本案例研究聚焦於溫度控制系統的UML狀態圖,該系統可能應用於恆溫器或暖通空調系統,以闡明關鍵的UML概念。同時,本文還提供使用領先的UML建模工具Visual Paradigm建立此類圖表的逐步指導。為增進理解,文中還加入了其他範例,例如自動販賣機和交通信號系統,以展示狀態圖的多功能性。
溫度控制系統描述
溫度控制系統根據環境條件在加熱與冷卻模式之間切換,以維持目標溫度。系統的行為建模如下:
- 狀態:
- 閒置:系統處於非活躍狀態,等待溫度變化。
- 冷卻:當溫度超過目標值時,系統主動冷卻環境。
- 加熱:一個複合狀態,用於管理加熱過程,包含:
- 啟動中:加熱系統正在初始化。
- 運行中:加熱系統正在主動維持溫度。
- 終止狀態:代表系統終止,可能從閒置狀態到達。
- 轉移:
- 從初始狀態到閒置狀態:系統從閒置狀態開始(未指定事件)。
- 從閒置狀態到冷卻狀態:由 tooHot(目標溫度) 觸發,其中目標溫度為設定溫度。
- 從冷卻狀態到閒置狀態:由 atTemp 觸發,表示溫度已達到目標值。
- 從閒置狀態到加熱.啟動中:由 tooCold(目標溫度) 觸發。
- 從加熱.啟動中到加熱.運行中:由 ready / turnOn 觸發,其中 turnOn 為一個動作。
- 從加熱.運行中到閒置狀態:由 atTemp 觸發。
- 從閒置狀態到終止狀態:未明確說明,但暗示為終止條件。
- 事件:
- 溫度過高(目標溫度):溫度超過了設定的水平。
- 溫度過低(目標溫度):溫度低於設定的水平。
- 溫度達到設定水平:溫度達到目標水平。
- 準備就緒:加熱系統已準備好運行。
- 動作:
- 啟動:在從「啟動中」轉換到「運行中」時執行,啟動加熱機制。
此圖表有效捕捉了系統的生命周期,展示了系統如何回應溫度變化並管理加熱與冷卻過程。

UML狀態圖的關鍵概念
UML狀態圖是用於建模系統行為的UML標準的一部分。它們特別適用於事件驅動的系統,其中狀態的變化由特定事件觸發。以下是關鍵概念,並以溫度控制系統的範例加以說明,同時輔以其他範例:
- 狀態:
- 狀態代表系統生命週期中的某種條件或情況,在此期間系統會執行特定活動或等待事件。
- 範例(溫度控制):空閒狀態表示系統處於非活動狀態,而冷卻與加熱則代表主動的溫度調節。
- 範例(自動販賣機):自動販賣機可能具有空閒(等待使用者輸入)、選擇(使用者選擇商品)和出貨(交付商品)等狀態。
- 範例(交通信號燈):狀態包括紅燈(停止)、綠燈(通行)和黃燈(注意)。
- 轉移:
- 轉移是帶方向的箭頭,顯示由事件觸發的狀態變更,通常伴隨相關動作或保護條件。
- 範例(溫度控制):從空閒轉移到冷卻是由溫度過高(目標溫度)觸發,表示溫度過高。
- 範例(自動販賣機):當使用者確認選擇(selectItem)時,從選擇轉移到出貨。
- 範例(交通信號燈):從綠燈轉移到黃燈是由計時器事件(timerExpired)觸發。
- 事件:
- 事件是觸發轉移的刺激,例如使用者操作、系統信號或基於時間的觸發。
- 範例(溫度控制):事件 atTemp 會觸發從冷卻或加熱狀態返回空閒狀態。
- 範例(自動販賣機):事件 insertCoin 會觸發從空閒狀態轉移到選擇狀態。
- 範例(交通信號燈):事件 timerExpired 會引導紅、綠、黃三種狀態之間的循環轉移。
- 動作:
- 動作是在轉移、狀態進入或狀態退出期間執行的活動。
- 範例(溫度控制):當從 Heating.Activating 轉移到 Heating.Active 時,會執行動作 turnOn。
- 範例(自動販賣機):當轉移到發放狀態時,會執行動作 dispenseItem。
- 範例(交通信號燈):動作 updateSignal 可能在轉移期間更新燈光顯示。
- 初始狀態與終止狀態:
- 初始狀態(實心圓)標示系統的起始點,而終止狀態(同心圓)表示終止。
- 範例(溫度控制):初始狀態會導向空閒狀態,終止狀態可從空閒狀態到達,可能在系統關閉時發生。
- 範例(自動販賣機):初始狀態會導向空閒狀態,終止狀態可能代表系統關機。
- 範例(交通信號燈):終止狀態可能代表系統故障或維護模式。
- 複合狀態:
- 複合狀態包含嵌套的子狀態,允許對複雜行為進行層次化建模。
- 範例(溫度控制):加熱狀態是複合狀態,包含啟動中與運行中兩個子狀態。
- 範例(自動販賣機):付款狀態可能為複合狀態,包含卡處理和現金處理等子狀態。
- 範例(交通信號燈):類似緊急模式的複合狀態可能包含閃爍燈光或手動控制的子狀態。
- 保護條件:
- 保護條件是必須為真的布林表達式,才能觸發轉移。
- 範例(溫度控制):類似 [temperature > desiredTemp + threshold] 的保護條件可確保過熱轉移僅在溫度明顯超過目標時才發生。
- 範例(自動販賣機):保護條件 [paymentSufficient] 可確保僅當投入足夠金額時,才會轉移到出貨狀態。
- 範例(交通信號燈):保護條件 [emergencySignalReceived] 可能觸發轉移到緊急狀態。
這些概念根植於UML標準,能精確模擬系統行為,如溫度控制系統及其他範例所示。
使用Visual Paradigm建立UML圖表
Visual Paradigm 是一款強大的UML建模工具,可簡化狀態圖及其他UML物件的建立。它提供直覺的介面、拖放功能,以及語法檢查與團隊協作等功能。以下是建立類似溫度控制系統的狀態圖的逐步指南:
- 安裝與設定:
- 從其官方網站下載Visual Paradigm,或使用Visual Paradigm Online進行雲端圖表繪製。
- 在應用程式中選擇「新增專案」來建立新專案。
- 建立狀態圖:
- 在專案探索器中右鍵點選,選擇「新增圖表」>「狀態機圖表」以開啟空白畫布。
- 新增狀態:
- 使用「狀態」工具將狀態拖曳至畫布上,命名為「閒置」、「冷卻」和「加熱」。
- 對於加熱等複合狀態,建立一個狀態,並使用子圖表功能或繪製巢狀狀態的方式,在其中加入子狀態(啟動中、運作中)。
- 新增轉移:
- 使用「轉移」工具,點選並拖曳從來源狀態到目標狀態以建立連接。
- 使用事件和動作標記轉移,例如 [tooHot(設定溫度)] 或 ready / turnOn。
- 新增初始狀態和終止狀態:
- 使用「初始狀態」工具新增一個實心圓形,並連接到 Idle。
- 使用「終止狀態」工具新增一個具有同心圓的圓形,必要時從 Idle 連接。
- 標記事件和動作:
- 雙擊轉移以指定事件(例如 tooCold(設定溫度))和動作(例如 turnOn)。
- 如適用,請包含保護條件,例如 [temperature > desiredTemp + threshold]。
- 驗證並優化:
- 使用 Visual Paradigm 的語法檢查功能,確保符合 UML 標準。
- 使用對齊工具調整版面,以提升清晰度和可讀性。
- 產生文件並分享:
- 將圖表匯出為 PNG、JPG、SVG 或 PDF 格式以便分享。
- 使用「文件組合器」功能產生詳細文件。
- 透過 Visual Paradigm Online,可與團隊成員即時協作。
Visual Paradigm 功能:
- 資源目錄:在各圖表中重複使用元件以保持一致性。
- 子圖表:用於管理如 Heating 之類的複雜複合狀態。
- 程式碼工程:從圖表產生或反向工程程式碼。
- 團隊協作:支援同時編輯與雲端儲存。
溫度控制系統的範例工作流程:
- 從與空閒狀態相連的初始狀態開始。
- 新增冷卻與加熱狀態,其中加熱狀態包含啟動與運行兩個子狀態。
- 建立轉移:空閒至冷卻(tooHot(目標溫度)),冷卻至空閒(atTemp),空閒至加熱.啟動(tooCold(目標溫度)),啟動至運行(ready / turnOn),以及運行至空閒(atTemp)。
- 從空閒狀態新增終止狀態。
- 驗證語法並匯出圖表。
額外範例
為了加深理解,以下是兩個額外的 UML 狀態圖範例:
- 自動販賣機:
- 狀態:
- 空閒:等待使用者輸入。
- 選擇中:使用者選擇商品。
- 付款:使用者進行付款。
- 出貨中:商品被送出。
- 退還零錢:零錢被退還。
- 轉移:
- 空閒 → 選擇中:由 insertCoin 觸發。
- 選擇中 → 付款:由 selectItem 觸發。
- 付款 → 出貨中:由 paymentConfirmed 觸發,條件為 [paymentSufficient]。
- 出貨中 → 退還零錢:由 itemDispensed 觸發,並執行動作 dispenseChange。
- 退還零錢 → 空閒:由 changeReturned 觸發。
- 使用案例:此圖表模擬自動販賣機的交易流程,確保所有步驟(投入硬幣、選擇商品、付款、出貨)均明確定義。
- 狀態:
- 交通信號系統:
- 狀態:
- 紅色:車輛停止。
- 綠色:車輛通行。
- 黃色:車輛準備停止。
- 轉換:
- 紅色 → 綠色:由計時器到期觸發 [持續時間 = 30秒]。
- 綠色 → 黃色:由計時器到期觸發 [持續時間 = 30秒]。
- 黃色 → 紅色:由計時器到期觸發 [持續時間 = 5秒]。
- 使用案例:此循環圖示模擬交通信號燈的可預測行為,對交通管理系統非常有用。
- 狀態:
- 訂單處理系統:
- 狀態:
- 已下單:訂單由客戶提交。
- 處理中:訂單進行付款與庫存檢查。
- 已發貨:訂單已發出。
- 已送達:訂單已到達客戶。
- 已取消: 訂單已取消。
- 轉移:
- 已下單 → 處理中:由 orderVerified 觸發,條件為 [付款有效 && 庫存充足]。
- 處理中 → 已發貨:由 orderPacked 觸發,動作為通知客戶。
- 已發貨 → 已送達:由 deliveryConfirmed 觸發。
- 已下單 → 已取消:由 customerCancel 觸發。
- 處理中 → 已取消:由 paymentFailed 或 inventoryUnavailable 觸發。
- 使用案例: 此圖示模擬電子商務訂單的生命週期,突出顯示付款驗證等關鍵決策點。
- 狀態:
這些範例展示了 UML 狀態圖在不同領域中的多功能性,從消費電子產品到商業流程和基礎設施系統。
結論
UML 狀態圖對於模擬系統的動態行為至關重要,能清晰地以視覺方式呈現狀態、轉移和事件。溫度控制系統的範例說明了這些圖表如何捕捉複雜行為,例如層次狀態和事件驅動的轉移。其他範例,如自動販賣機、交通信號燈和訂單處理系統,展示了其在各種情境中的適用性。Visual Paradigm 透過直覺的介面、語法檢查和協作功能,提升了設計流程,使其成為初學者和資深設計師的優良工具。透過運用 UML 狀態圖以及 Visual Paradigm 等工具,開發人員可以設計出穩健且可維護的系統,並有效地向利益相關者傳達設計概念。
關鍵引用: