狀態圖,或稱狀態機圖,是統一建模語言(UML)用於建模系統的動態行為。它們展示了物件或系統如何根據事件在不同狀態之間轉換,使其成為類似銀行自動櫃員機(ATM)等反應式系統的理想工具。本案例研究探討狀態圖如何呈現ATM的行為,ATM是一種熟悉且具有明確狀態與事件驅動轉換的現實世界系統。透過檢視ATM的生命周期,我們將強調狀態圖中的關鍵概念,包括狀態、轉換、動作、複合狀態以及無觸發轉換。本案例研究還示範了像Visual Paradigm之類的工具如何簡化此類圖表的建立。
以下是使用Visual Paradigm的狀態機圖建模編輯器所建立的狀態機圖:

狀態圖透過定義以下內容來捕捉系統的行為:
狀態:系統生命週期中的特定條件或情境(例如「閒置」或「服務客戶」)。
轉換:由事件觸發的狀態間移動(例如插入卡片)。
動作:進入、退出或在狀態間轉換時執行的活動(例如讀取卡片)。
複合狀態:包含子狀態以進行層次化建模的狀態(例如「服務客戶」包含「客戶驗證」等子狀態)。
初始狀態與終止狀態:系統行為的起始點與可能的終止點。
無觸發轉換:無需明確事件的自動轉換(例如從自我測試狀態轉至閒置狀態)。
這些概念對於建模行為取決於當前狀態與外部刺激的系統至關重要,例如ATM。
銀行ATM支援客戶進行現金提領、存款及餘額查詢等交易。其行為為事件驅動,具有根據使用者操作(例如插入卡片、輸入PIN)或系統狀態(例如通過自我測試)而變化的明確狀態。狀態圖是建模此行為的有效工具,因其能清楚定義ATM的狀態、轉換與動作,確保設計、實作與維護時具備結構化的呈現。
ATM運作於以下狀態:
關機
描述: 自動櫃員機已關機,無法與使用者互動。這是系統啟動前的初始狀態。
主要特徵: 在自動櫃員機啟動前,無法進行任何操作。
自我測試
描述: 開機後,自動櫃員機會進入此狀態以執行診斷測試,檢查卡機、鍵盤和現金發放機等組件。
結果:
通過: 自動櫃員機轉換至「待機」狀態。
失敗: 自動櫃員機轉換至「無法服務」狀態。
主要特徵: 此狀態確保自動櫃員機在服務客戶前處於可運作狀態。
無法服務
描述: 若自我測試失敗或發生嚴重錯誤(例如現金發放機故障),即進入此狀態。自動櫃員機無法運作,需進行維修。
主要特徵: 作為最終狀態,直到修復或重置為止。
待機
描述: 自動櫃員機已啟動、可運作,並等待客戶插入銀行卡或信用卡以啟動交易。
主要特徵: 客戶互動的主要等待狀態。
服務客戶
描述: 當客戶插入卡片時進入的複合狀態。涵蓋從驗證到交易完成的所有客戶互動。
進入動作: 讀取卡片(ATM讀取卡片資訊)。
退出動作: 吐卡(ATM釋放卡片)。
子狀態:
客戶驗證
ATM提示客戶輸入密碼,並進行驗證。
若密碼錯誤,ATM可能允許重試(例如最多三次機會),然後才吐卡。
選擇交易
客戶選擇交易類型(例如:提款、存款、餘額查詢)。
交易
ATM處理所選交易(例如:發放現金、接受存款、顯示餘額)。
完成後,ATM會返回「空閒」狀態。
ATM根據事件或條件在不同狀態間轉移。主要轉移包括:
|
轉移 |
來源狀態 |
目標狀態 |
觸發條件 |
動作 |
|---|---|---|---|---|
|
開機 |
關機 |
自我測試 |
ATM已開機 |
執行啟動(初始化硬體) |
|
自我測試成功 |
自我測試 |
空閒 |
無 (无触发) |
無 |
|
自檢失敗 |
自檢 |
服務中斷 |
測試失敗 |
無 |
|
插入卡片 |
空閒 |
服務客戶 |
客戶插入卡片 |
讀取卡片 |
|
驗證成功 |
客戶驗證 |
選擇交易 |
輸入有效密碼 |
無 |
|
驗證失敗(重試後) |
客戶驗證 |
空閒 |
無效密碼(超過重試次數) |
退出卡片 |
|
已選擇交易 |
選擇交易 |
交易 |
客戶選擇交易 |
無 |
|
交易完成 |
交易 |
空閒 |
交易完成 |
退卡 |
|
取消 |
服務客戶中的任何子狀態 |
空閒 |
客戶取消 |
退卡 |
此狀態圖展示了狀態圖的幾個核心概念:
狀態:ATM 的行為被劃分為不同的狀態(例如:關機、空閒、服務客戶),每種狀態代表一種特定條件。
轉移:卡插入或密碼驗證等事件會觸發狀態變更,明確定義系統的流程。
動作:進入動作(例如:讀卡)和退出動作(例如:退卡)指定狀態變更期間的活動。
複合狀態:「服務客戶」狀態包含子狀態(客戶驗證、選擇交易、交易),支援層次化建模。
初始與終止狀態:「關機」是初始狀態,而「停用」則作為終止狀態,直到維修完成為止。
無觸發轉移:若自檢成功,「自檢」至「空閒」的轉移會自動發生,無需明確事件觸發。
狀態圖非常適合用於建模ATM,原因如下:
有限狀態:ATM 具有一組明確的狀態(例如:空閒、服務客戶),用以定義其行為。
事件驅動行為:轉移由使用者操作(例如插入卡片、輸入PIN)或系統條件(例如自我測試結果)觸發。
層次結構:像「服務客戶」這樣的複合狀態,可讓複雜互動的建模更加詳細。
利益相關者清晰理解:此圖表提供了一個視覺化表示,開發人員、設計師和利益相關者都能輕易理解,有助於系統設計與維護。
Visual Paradigm 是一款強大的 UML 建模工具,可簡化狀態圖的建立。其功能包括:
拖放介面:輕鬆新增狀態、轉移和動作。
模擬工具:測試狀態轉移以驗證圖表的邏輯。
範本:使用預先建構的範本(例如 ATM 系統)以加速建模。
程式碼產生:從圖表產生程式碼骨架(例如 Java、C++)。
協作:支援即時團隊編輯與評論,適用於協作專案。
在 Visual Paradigm 中建立 ATM 狀態圖的步驟如下:
開啟 Visual Paradigm 並選擇圖表 > 新增 > 狀態機圖.
使用拖放編輯器新增狀態(例如:關機、自我測試、待機)。
使用適當的觸發條件繪製轉移(例如:「開機」、「插入卡片」)。
定義動作(例如:readCard, ejectCard)用於進入、離開或轉移。
使用模擬測試流程並確保準確性。
銀行自動櫃員機狀態圖有效地展示了UML狀態圖如何模擬現實世界系統的行為。透過定義明確的狀態、事件驅動的轉移和動作,該圖表提供了ATM運作的結構化表示。這種方法增強了理解,促進了系統設計,並支援實現與維護。像Visual Paradigm之類的工具讓建立、測試和分享這些圖表變得更容易,確保系統開發過程中的準確性與協作。