定義
狀態圖型主要會應用到軟體系統中,某項任務的生命週期。任務的生命週期中,會有不同的狀態,藉由不同狀態的檢視,可以去檢查任務是否有未考慮的情況或是邏輯的謬誤。
上圖就是表示一個執行緒的生命週期,還有它本身的狀態變化。
另外,狀態的數量必須是有限的。
組成元素
狀態節點(State node)
狀態圖型主要使用兩個特定的符號來表示生命週期的開始與結束。
- 初始狀態(Initial State),使用實心黑色的圓形。
- 結束狀態(Final State),使用實心黑色的圓形,外層再包一圈空心的圓形。
除了開始和結束外,狀態節點就是表示生命週期的某一種狀態,它的節點內容包含兩個部分。
- 名稱區格(Name Compartment)
- 內部轉換區格(Internal Transition Compartment)
通常內部轉換區格會因簡化而省略。
下圖就是含有內部轉換區格的狀態圖型
接下來仔細解釋名稱區格以及內部轉換區格的定義
名稱區格
名稱區格的文字表示生命週期中的一個狀態,UML的規定並非必填,如果沒有填寫就稱為匿名狀態。
內部轉換區格
內部轉換區格主要用來表示狀態節點內部的轉換狀況,這個地方使用四個標籤來說明進入狀態節點後到離開狀態節點時,狀態節點內會做哪些動作。
- entry: 進入狀態節點的動作
- exit: 離開狀態節點時的動作
- do: 停留在此狀態節點時執行的動作
- 自訂標籤: 使用下列格式來自訂標籤與動作
轉換(Transition)
在狀態圖型中,兩個狀態節點間的標示就稱為「轉換」,用來表示狀態節點間如何轉換過去的。
轉換標示的格式如下。
- 事件名稱: 通常會是物件/類別的方法名稱
- 參數: 可選擇性的宣告,就是傳遞給事件的參數
- 條件: 可選擇性地宣告,用來表示狀態轉換的條件
這邊用個修改紀錄的的狀態圖來做例子。
從這個例子可以看到[update record]的狀態可以經過update的事件後,來到達下一個狀態[record updated]
子狀態(Sub-State)
從之前開飲機的例子來說,狀態圖可以如下圖。
上面是熱水不足,下面是冷水不足。但是可以看到,返回狀態[ready]的事件是相同的。
所以就可以用一個狀態來包裝這兩個狀態
這樣子包裝後,就可以稱[low cool water]與[low hot water]是[low water]的子狀態節點,又稱為子狀態(Sub-State)。
留言