狀態機圖是一種行為,它指定對像在其生命週期內為響應事件而訪問的狀態序列,以及對這些事件的響應。
狀態
狀態是對像生命週期中的一個條件,在此期間它滿足某些條件、執行某些活動或等待某些外部事件
例子:
國家特徵
- 狀態表示對像在特定時間點的狀態。
- 對象(或系統)可以被視為從一個狀態移動到另一個狀態
- 模型元素生命週期中滿足某些條件的點,其中執行某些特定操作或等待某些事件
下圖顯示了狀態的詳細描述。狀態通過內部操作(做、幫助)進行擴展。與其他動作相比,這些動作可以被打斷。如果發生“取消”,則執行或幫助操作將被中斷。內部操作在“entry”部分之後執行,並在狀態離開時中止。
初始狀態和最終狀態
- 狀態機圖的 初始狀態 ,稱為初始偽狀態,用實心圓表示。從此狀態的轉換將顯示第一個真實狀態
- 狀態機圖的 最終狀態 顯示為同心圓。開環狀態機表示可能在系統終止之前終止的對象,而閉環狀態機圖沒有最終狀態;如果是這種情況,則該對象將一直存在,直到整個系統終止。
例子:
事件
事件是對重大事件的說明。對於狀態機,事件是可以觸發狀態轉換的刺激的發生。
過渡
轉換是兩種狀態之間的關係,表示處於第一種狀態的對象將在滿足指定的一組事件和條件時執行某些動作並進入第二種狀態。
轉換具有: 轉換組件,包括 (1) 源狀態 (2) 事件觸發器 (3) 動作 (4) 目標狀態
自我轉換
自轉移是源狀態和目標狀態相同的轉移
行動
動作是可執行的、原子的(參考狀態機)計算。動作可能包括操作、創建或銷毀其他對象,或向其他對象發送信號(事件)
庫示例
下圖顯示了一個簡單的狀態機圖。這種圖的主要組成部分是:
- 狀態:示例有兩種狀態:“在藉”和“在架”。
- 初始狀態:這是系統啟動的狀態。
- 轉換:轉換描述可能的狀態變化。該圖有兩個過渡:從“外借”到“貨架上”,反之亦然。
- 事件:事件標記在轉換上。它們代表在轉換中執行的事件。當從狀態“出借”移動到狀態“上架”時,會執行事件“returned()”。
動作是對狀態變量的修改。在下面的示例中,對轉換指定了操作。當進行從“在架上”到“借出”的過渡時,狀態變量賬簿減少。
可以在轉換中指定動作,也可以在狀態中指定動作。在這種情況下,可以指定在進入或離開狀態時是否必須執行該操作。下圖中顯示了這些選項。
- 第一個選項顯示進行轉換時的操作規範。該操作是在狀態更改時執行的。
- 第二個選項顯示狀態中動作的規範。“entry”關鍵字表示進入狀態時必須執行的動作。
- 最後,第三個選項顯示瞭如何指定在離開狀態時採取的操作。注意“exit”關鍵字。
簡單狀態機圖符號
狀態機圖——高級概念
約束
可以向轉換添加約束。考慮下圖。約束“[not last copy]”和“[last copy]”用於區分帶有事件“copyBorrowed()”的兩個轉換。語義是當約束為真時啟用轉換。
子狀態
簡單狀態是沒有子結構的狀態。具有子狀態(嵌套狀態)的狀態稱為複合狀態。子狀態可以嵌套到任何級別。嵌套狀態機最多可以有一個初始狀態和一個最終狀態。子狀態用於通過顯示某些狀態僅在特定上下文(封閉狀態)內才可能來簡化複雜的平面狀態機。
子狀態示例 – 加熱器
狀態機圖通常用於派生測試用例,這裡列出了可能的測試思路:
- 空閒狀態接收太熱事件
- 空閒狀態接收 Too Cool 事件
- Cooling/Startup 狀態接收 Compressor Running 事件
- Cooling/Ready 狀態接收 Fan Running 事件
- Cooling/Running 狀態接收 OK 事件
- 冷卻/運行狀態接收故障事件
- 失敗狀態接收失敗清除事件
- 加熱狀態接收 OK 事件
- 加熱狀態接收失敗事件
歷史狀態
除非另有說明,否則當轉換進入複合狀態時, 嵌套狀態機的操作會從初始狀態重新開始 (除非轉換直接針對子狀態)。歷史狀態允許狀態機 重新進入在離開 復合狀態之前處於活動狀態的最後一個子狀態。下圖展示了一個歷史狀態使用的例子。
並發狀態
如上所述,狀態機圖中的狀態可以嵌套。相關的狀態可以組合成一個單一的複合狀態。當一個活動涉及並發子活動時,在其他活動中嵌套狀態是必要的。以下狀態機圖對具有兩個並發子狀態的拍賣進行建模:處理投標和授權支付限額。
並發狀態機圖示例——拍賣過程
在此示例中,首先進入拍賣的狀態機需要在開始時分叉成兩個單獨的開始線程。每個子狀態都有一個退出狀態來標記線程的結束。除非有異常退出(Canceled 或 Rejected),否則當兩個子狀態都退出時才會退出複合狀態。
相關鏈接
使用 Visual Paradigm Online 自己動手做狀態圖示例
- 在線狀態機圖軟件中可編輯的免費狀態機圖示例和模板: Visual Paradigm Online。
- 使用模板作為起點來創建您自己的狀態機圖。
免費的 UML 軟件工具
您已經了解了狀態機圖是什麼以及如何繪製狀態機圖。是時候繪製自己的狀態機圖了。獲取免費的 UML 軟件 Visual Paradigm Community Edition,並使用免費的狀態機圖工具創建您自己的狀態機圖。它易於使用且直觀。