<b>一、狀态圖簡介(Brief introduction)</b>
<b> </b>
狀态圖(Statechart Diagram)主要用于描述一個對象在其生存期間的動态行為,表現為一個對象所經曆的狀态序列,引起狀态轉移的事件(Event),以及因狀态轉移而伴随的動作(Action)。一般可以用狀态機對一個對象的生命周期模組化,狀态圖用于顯示狀态機(State Machine Diagram),重點在與描述狀态圖的控制流。
如下圖例子,狀态機描述了門對象的生存期間的狀态序列,引起轉移的事件,以及因狀态轉移而伴随的動作(Action).
狀态有Opened、Closed、Locked。
事件有 Open、Close、Lock和Unlock。
注意:
1、 并不是所有的事件都會引起狀态的轉移,比如當門是處于【Opened】狀态,不能進行【Lock】事件。
2、 轉移(Transition)有警備條件(guard condition),比如隻有doorWay->isEmpty 條件滿足時,才會響應事件。
<b>二、狀态圖元素(State Diagram Elements)</b>
<b>1、狀态(States)</b>
指在對象的生命周期中的某個條件或者狀況,在此期間對象将滿足某些條件、執行某些活動活活等待某些事件。所有對象都有狀态,狀态是對象執行了一系列活動的結果,當某個事件發生後,對象的狀态将發生變化。
狀态用圓角矩形表示
初态和終态(Initial and Final States)
初态用實心圓點表示,終态用圓形内嵌圓點表示。
<b>2、轉移(Transitions)</b>
轉移(Transitions)是兩個狀态之間的一種關系,表示對象将在源狀态(Source State)中執行一定的動作,并在某個特定事件發生而且某個特定的警界條件滿足時進入目标狀态(Target State)
事件标記(Trigger):是轉移的誘因,可以是一個信号,事件、條件變化(a change in some condition)和時間表達式。
警界條件(Guard Condition):當警界條件滿足時,事件才會引發轉移(Transition)。
結果(Effect):對象狀态轉移後的結果。
<b>3、動作(State Actions)</b>
動作(Actions)是一個可執行的原子操作,也就是說動作是不可中斷的,其執行時間是可忽略不計的。
在上例中,對象狀态轉移後的結果顯示在轉移線上,如果目标狀态有許多轉移,而且每個轉移有相同的結果,這時把轉移後的結果(Effect)展示在目标狀态中(Target State)更好一些,可以定義進入動作(Entry Action )和退出動作(Exit Action),如下圖
<b>4、自身轉移(Self-Transitions)</b>
狀态可以有傳回自身狀态的轉移,稱之為自身轉移(Self-Transitions)
2S後,Poll input事件執行,轉移到自己狀态【Waiting】
<b>5、組合狀态(Compound States)</b>
嵌套在另外一個狀态中的狀态稱之為子狀态(sub-state),一個含有子狀态的狀态被稱作組合狀态(Compound States). 如下圖,【Check PIN】是組合狀态,【Enter PIN】是子狀态。
也可用以下方式進行描述
如上圖,狀态機【Check PIN】的細節被分割到另外一個圖中了。
<b>6、進入節點(Entry Point)</b>
如下圖所示,由于一些原因并不會執行初始化(initialization),而是直接通過一個節點進入狀态【Ready】,則此節點稱之為進入節點(Entry Point)
<b>7、退出節點(Exit Point)</b>
<b>8、曆史狀态(History States)</b>
曆史狀态是一個僞狀态(Pseudostate),其目的是記住從組合狀态中退出時所處的子狀态,當再次進入組合狀态,可直接進入這個子狀态,而不是再次從組合狀态的初态開始。
在上圖的狀态圖中,正常的狀态順序是:【Washing】- >【Rinsing】->【Spinning】。
如果是從狀态【Rinsing】突然停電(Power Cut)退出,,洗衣機停止工作進入狀态【Power Off】,當電力恢複時直接進入狀态【Running】。
<b>9、并發區域(Concurrent Regions)</b>
狀态圖可以分為區域,而區域又包括退出或者目前執行的子狀态。說明組合狀态在某一時刻可以同時達到多個子狀态。如下圖刹車系統,同時進入前刹車【Applying Front Brakes】狀态和後刹車【Applying Rear Brakes】狀态。
<b>三、狀态圖案例分析(State Diagram Example Analysis)</b>
訂單成立狀态主要有:
訂單成立
訂單取消(Guard:會員訂單-繳款期限已過期)
備貨中(Guard:已付款、訂單成立、庫存量足夠)
出貨中(Effect:扣除商品可接單量及移除購物車中的購買資料)
出貨确認(Guard:實際配達日及發票代碼、号碼均不為空值)
出貨完畢(Guard:實際配達日不為空)
出貨失敗
訂單成立(Guard:出貨完畢,已付款、鑒賞期結束日期小于等于 [系統日期])
分析:
1、購物車生成訂單進入狀态【訂單成立】
2、系統檢測訂單已經付款并且庫存量足夠,則進入狀态【備貨中】
3、物流發貨,進入狀态【發貨中】,狀态轉移為【發貨中】後,需要做的操作有“扣除商品可接單量及移除購物車中的購買資料”
4、發貨完畢後,狀态分為【出貨确認】和狀态【出貨失敗】,如果狀态是【出貨失敗】,則【結束】,如果狀态為【出貨确認】,則進入下一步。
5、配貨人員填寫實際配達日期,進入狀态【出貨完畢】。
6、如果”已付款、鑒賞期結束日期小于等于 [系統日期]”,則【訂單成立】。
<b>四、總結(Summary)</b>
狀态圖重點在于描述對象的狀态及其狀态之間的轉移,狀态圖的基本元素主要有:狀态、轉移、動作、自身轉移、組合狀态、進入節點、退出節點、曆史狀态、并發區域等,狀态中的事件分為調用事件(Call)、變化事件(Change)、時間事件(Time)和信号事件(Singal)。最後以執行個體對狀态對進行了分析。
本文轉自 靈動生活 51CTO部落格,原文連結:http://blog.51cto.com/smartlife/285233,如需轉載請自行聯系原作者