案例研究:使用UML狀態圖建模銀行自動櫃員機系統

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

以下是使用Visual Paradigm的狀態機圖建模編輯器所建立的狀態機圖:

Visual Paradigm State Machine Diagram Example

狀態圖的關鍵概念

狀態圖透過定義以下內容來捕捉系統的行為:

  • 狀態:系統生命週期中的特定條件或情境(例如「閒置」或「服務客戶」)。

  • 轉換:由事件觸發的狀態間移動(例如插入卡片)。

  • 動作:進入、退出或在狀態間轉換時執行的活動(例如讀取卡片)。

  • 複合狀態:包含子狀態以進行層次化建模的狀態(例如「服務客戶」包含「客戶驗證」等子狀態)。

  • 初始狀態與終止狀態:系統行為的起始點與可能的終止點。

  • 無觸發轉換:無需明確事件的自動轉換(例如從自我測試狀態轉至閒置狀態)。

這些概念對於建模行為取決於當前狀態與外部刺激的系統至關重要,例如ATM。

案例研究:銀行ATM系統

系統概覽

銀行ATM支援客戶進行現金提領、存款及餘額查詢等交易。其行為為事件驅動,具有根據使用者操作(例如插入卡片、輸入PIN)或系統狀態(例如通過自我測試)而變化的明確狀態。狀態圖是建模此行為的有效工具,因其能清楚定義ATM的狀態、轉換與動作,確保設計、實作與維護時具備結構化的呈現。

狀態與描述

Case Study: Bank ATM System - State Diagram

ATM運作於以下狀態:

  1. 關機

    • 描述: 自動櫃員機已關機,無法與使用者互動。這是系統啟動前的初始狀態。

    • 主要特徵: 在自動櫃員機啟動前,無法進行任何操作。

  2. 自我測試

    • 描述: 開機後,自動櫃員機會進入此狀態以執行診斷測試,檢查卡機、鍵盤和現金發放機等組件。

    • 結果:

      • 通過: 自動櫃員機轉換至「待機」狀態。

      • 失敗: 自動櫃員機轉換至「無法服務」狀態。

    • 主要特徵: 此狀態確保自動櫃員機在服務客戶前處於可運作狀態。

  3. 無法服務

    • 描述: 若自我測試失敗或發生嚴重錯誤(例如現金發放機故障),即進入此狀態。自動櫃員機無法運作,需進行維修。

    • 主要特徵: 作為最終狀態,直到修復或重置為止。

  4. 待機

    • 描述: 自動櫃員機已啟動、可運作,並等待客戶插入銀行卡或信用卡以啟動交易。

    • 主要特徵: 客戶互動的主要等待狀態。

  5. 服務客戶

    • 描述: 當客戶插入卡片時進入的複合狀態。涵蓋從驗證到交易完成的所有客戶互動。

    • 進入動作: 讀取卡片(ATM讀取卡片資訊)。

    • 退出動作: 吐卡(ATM釋放卡片)。

    • 子狀態:

      • 客戶驗證

        • ATM提示客戶輸入密碼,並進行驗證。

        • 若密碼錯誤,ATM可能允許重試(例如最多三次機會),然後才吐卡。

      • 選擇交易

        • 客戶選擇交易類型(例如:提款、存款、餘額查詢)。

      • 交易

        • ATM處理所選交易(例如:發放現金、接受存款、顯示餘額)。

        • 完成後,ATM會返回「空閒」狀態。

轉移

ATM根據事件或條件在不同狀態間轉移。主要轉移包括:

轉移

來源狀態

目標狀態

觸發條件

動作

開機

關機

自我測試

ATM已開機

執行啟動(初始化硬體)

自我測試成功

自我測試

空閒

無 (无触发)

無

自檢失敗

自檢

服務中斷

測試失敗

無

插入卡片

空閒

服務客戶

客戶插入卡片

讀取卡片

驗證成功

客戶驗證

選擇交易

輸入有效密碼

無

驗證失敗(重試後)

客戶驗證

空閒

無效密碼(超過重試次數)

退出卡片

已選擇交易

選擇交易

交易

客戶選擇交易

無

交易完成

交易

空閒

交易完成

退卡

取消

服務客戶中的任何子狀態

空閒

客戶取消

退卡

展示的關鍵概念

此狀態圖展示了狀態圖的幾個核心概念:

  • 狀態:ATM 的行為被劃分為不同的狀態(例如:關機、空閒、服務客戶),每種狀態代表一種特定條件。

  • 轉移:卡插入或密碼驗證等事件會觸發狀態變更,明確定義系統的流程。

  • 動作:進入動作(例如:讀卡)和退出動作(例如:退卡)指定狀態變更期間的活動。

  • 複合狀態:「服務客戶」狀態包含子狀態(客戶驗證、選擇交易、交易),支援層次化建模。

  • 初始與終止狀態:「關機」是初始狀態,而「停用」則作為終止狀態,直到維修完成為止。

  • 無觸發轉移:若自檢成功,「自檢」至「空閒」的轉移會自動發生,無需明確事件觸發。

為什麼要為ATM使用狀態圖?

狀態圖非常適合用於建模ATM,原因如下:

  • 有限狀態:ATM 具有一組明確的狀態(例如:空閒、服務客戶),用以定義其行為。

  • 事件驅動行為:轉移由使用者操作(例如插入卡片、輸入PIN)或系統條件(例如自我測試結果)觸發。

  • 層次結構:像「服務客戶」這樣的複合狀態,可讓複雜互動的建模更加詳細。

  • 利益相關者清晰理解:此圖表提供了一個視覺化表示,開發人員、設計師和利益相關者都能輕易理解,有助於系統設計與維護。

使用 Visual Paradigm 建立狀態圖

Visual Paradigm 是一款強大的 UML 建模工具,可簡化狀態圖的建立。其功能包括:

  • 拖放介面:輕鬆新增狀態、轉移和動作。

  • 模擬工具:測試狀態轉移以驗證圖表的邏輯。

  • 範本:使用預先建構的範本(例如 ATM 系統)以加速建模。

  • 程式碼產生:從圖表產生程式碼骨架(例如 Java、C++)。

  • 協作:支援即時團隊編輯與評論,適用於協作專案。

在 Visual Paradigm 中建立 ATM 狀態圖的步驟如下:

  1. 開啟 Visual Paradigm 並選擇圖表 > 新增 > 狀態機圖.

  2. 使用拖放編輯器新增狀態(例如:關機、自我測試、待機)。

  3. 使用適當的觸發條件繪製轉移(例如:「開機」、「插入卡片」)。

  4. 定義動作(例如:readCard, ejectCard)用於進入、離開或轉移。

  5. 使用模擬測試流程並確保準確性。

結論

銀行自動櫃員機狀態圖有效地展示了UML狀態圖如何模擬現實世界系統的行為。透過定義明確的狀態、事件驅動的轉移和動作,該圖表提供了ATM運作的結構化表示。這種方法增強了理解,促進了系統設計,並支援實現與維護。像Visual Paradigm之類的工具讓建立、測試和分享這些圖表變得更容易,確保系統開發過程中的準確性與協作。