狀態圖(Statechart Diagram)主要用於描述一個對象在其生存期間的動態行為,表現為一個對象所經歷的狀態序列,引起狀態轉移的事件(Event),以及因狀態轉移而伴隨的動作(Action)。一般可以用狀態機對一個對象的生命周期建模,狀態圖用於顯示狀態機(State Machine Diagram),重點在與描述狀態圖的控制流。
狀態圖元素:
(1) 狀態(States)
指在對象的生命周期中的某個條件或者狀況,在此期間對象將滿足某些條件、執行某些活動活活等待某些事件。所有對象都有狀態,狀態是對象執行了一系列活動的結果,當某個事件發生后,對象的狀態將發生變化。
- 狀態用圓角矩形表示
- 初態(Initial States)
初態用實心圓點表示
- 終態(Final States)
終態用圓形內嵌圓點表示
(2)轉移(Transitions)
轉移(Transitions)是兩個狀態之間的一種關系,表示對象將在源狀態(Source State)中執行一定的動作,並在某個特定事件發生而且某個特定的警界條件滿足時進入目標狀態(Target State)
事件標記(Trigger):是轉移的誘因,可以是一個信號,事件、條件變化(a change in some condition)和時間表達式。
警界條件(Guard Condition):當警界條件滿足時,事件才會引發轉移(Transition)。
結果(Effect):對象狀態轉移后的結果。
(3)動作(State Actions)
動作(Actions)是一個可執行的原子操作,也就是說動作是不可中斷的,其執行時間是可忽略不計的。
在上例中,對象狀態轉移后的結果顯示在轉移線上,如果目標狀態有許多轉移,而且每個轉移有相同的結果,這時把轉移后的結果(Effect)展示在目標狀態中(Target State)更好一些,可以定義進入動作(Entry Action ),狀態保持不變時執行的動作(Do Action)和退出動作(Exit Action),下面是一個燈的點燃狀態的例子,如下圖
(4)自身轉移(Self-Transitions)
狀態可以有返回自身狀態的轉移,稱之為自身轉移(Self-Transitions), 用指向自己:
2S后,Poll input事件執行,轉移到自己狀態【Waiting】
(5)組合狀態(Compound States)
嵌套在另外一個狀態中的狀態稱之為子狀態(sub-state),一個含有子狀態的狀態被稱作組合狀態(Compound States). 如下圖:
屬性如圖:
點開右側菜單:
打開 State_1下的狀態圖(子狀態圖) 繼續添加子狀態:
在點擊打開State_1的屬性對話框,並選中sub-state選項卡,如圖:
我們發現State_2,State_3就是我們剛剛添加的子狀態。
(6)進入節點(Entry Point)
如下圖所示,由於一些原因並不會執行初始化(initialization),而是直接通過一個節點進入狀態【Ready】,則此節點稱之為進入節點(Entry Point):
(7) 並發區域(Synchronization)
說明組合狀態在某一時刻可以同時達到多個狀態。如下圖剎車系統,同時進入前剎車【Applying Front Brakes】狀態和后剎車【Applying Rear Brakes】狀態。