狀態圖目錄: 併發
1、狀態圖簡介(Brief introduction) spa
2、狀態圖元素(State Diagram Elements) orm
1、狀態(States) 對象
2、轉移(Transitions) 生命週期
3、動做(State Actions) 事件
4、自身轉移(Self-Transitions) ci
5、組合狀態(Compound States) get
6、進入節點(Entry Point) input
7、退出節點(Exit Point) it
8、歷史狀態(History States)
9、併發區域(Concurrent Regions)
3、狀態圖案例分析(State Diagram Example Analysis)
4、總結(Summary)
狀態圖(Statechart Diagram)主要用於描述一個對象在其生存期間的動態行爲,表現爲一個對象所經歷的狀態序列,引發狀態轉移的事件(Event),以及因狀態轉移而伴隨的動做(Action)。通常能夠用狀態機對一個對象的生命週期建模,狀態圖用於顯示狀態機(State Machine Diagram),重點在與描述狀態圖的控制流。
以下圖例子,狀態機描述了門對象的生存期間的狀態序列,引發轉移的事件,以及因狀態轉移而伴隨的動做(Action).
狀態有Opened、Closed、Locked。
事件有 Open、Close、Lock和Unlock。
注意:
一、 並非全部的事件都會引發狀態的轉移,好比當門是處於【Opened】狀態,不能進行【Lock】事件。
二、 轉移(Transition)有警備條件(guard condition),好比只有doorWay->isEmpty 條件知足時,纔會響應事件。
指在對象的生命週期中的某個條件或者情況,在此期間對象將知足某些條件、執行某些活動活活等待某些事件。全部對象都有狀態,狀態是對象執行了一系列活動的結果,當某個事件發生後,對象的狀態將發生變化。
狀態用圓角矩形表示
初態和終態(Initial and Final States)
初態用實心圓點表示,終態用圓形內嵌圓點表示。
轉移(Transitions)是兩個狀態之間的一種關係,表示對象將在源狀態(Source State)中執行必定的動做,並在某個特定事件發生並且某個特定的警界條件知足時進入目標狀態(Target State)
事件標記(Trigger):是轉移的誘因,能夠是一個信號,事件、條件變化(a change in some condition)和時間表達式。
警界條件(Guard Condition):當警界條件知足時,事件纔會引起轉移(Transition)。
結果(Effect):對象狀態轉移後的結果。
動做(Actions)是一個可執行的原子操做,也就是說動做是不可中斷的,其執行時間是可忽略不計的。
在上例中,對象狀態轉移後的結果顯示在轉移線上,若是目標狀態有許多轉移,並且每一個轉移有相同的結果,這時把轉移後的結果(Effect)展現在目標狀態中(Target State)更好一些,能夠定義進入動做(Entry Action )和退出動做(Exit Action),以下圖
狀態能夠有返回自身狀態的轉移,稱之爲自身轉移(Self-Transitions)
2S後,Poll input事件執行,轉移到本身狀態【Waiting】
嵌套在另一個狀態中的狀態稱之爲子狀態(sub-state),一個含有子狀態的狀態被稱做組合狀態(Compound States). 以下圖,【Check PIN】是組合狀態,【Enter PIN】是子狀態。
也可用如下方式進行描述
如上圖,狀態機【Check PIN】的細節被分割到另一個圖中了。
以下圖所示,因爲一些緣由並不會執行初始化(initialization),而是直接經過一個節點進入狀態【Ready】,則此節點稱之爲進入節點(Entry Point)
歷史狀態是一個僞狀態(Pseudostate),其目的是記住從組合狀態中退出時所處的子狀態,當再次進入組合狀態,可直接進入這個子狀態,而不是再次從組合狀態的初態開始。
在上圖的狀態圖中,正常的狀態順序是:【Washing】- >【Rinsing】->【Spinning】。
若是是從狀態【Rinsing】忽然停電(Power Cut)退出,,洗衣機中止工做進入狀態【Power Off】,當電力恢復時直接進入狀態【Running】。
狀態圖能夠分爲區域,而區域又包括退出或者當前執行的子狀態。說明組合狀態在某一時刻能夠同時達到多個子狀態。以下圖剎車系統,同時進入前剎車【Applying Front Brakes】狀態和後剎車【Applying Rear Brakes】狀態。
按照blink518的建議(「出貨中」是屬於條件分支應該使用Decision),改爲以下圖也是很好的作法:
訂單成立狀態主要有:
訂單成立
訂單取消(Guard:會員訂單-繳款期限已過時)
備貨中(Guard:已付款、訂單成立、庫存量足夠)
出貨中(Effect:扣除商品可接單量及移除購物車中的購買資料)
出貨確認(Guard:實際配達日及發票代碼、號碼均不爲空值)
出貨完畢(Guard:實際配達日不爲空)
出貨失敗
訂單成立(Guard:出貨完畢,已付款、鑑賞期結束日期 小於等於 [系統日期])
分析:
1、購物車生成訂單進入狀態【訂單成立】
2、系統檢測訂單已經付款而且庫存量足夠,則進入狀態【備貨中】
3、物流發貨,進入狀態【發貨中】,狀態轉移爲【發貨中】後,須要作的操做有「扣除商品可接單量及移除購物車中的購買資料」
4、發貨完畢後,狀態分爲【出貨確認】和狀態【出貨失敗】,若是狀態是【出貨失敗】,則【結束】,若是狀態爲【出貨確認】,則進入下一步。
5、配貨人員填寫實際配達日期,進入狀態【出貨完畢】。
6、若是」已付款、鑑賞期結束日期 小於等於 [系統日期]」,則【訂單成立】。
狀態圖重點在於描述對象的狀態及其狀態之間的轉移,狀態圖的基本元素主要有:狀態、轉移、動做、自身轉移、組合狀態、進入節點、退出節點、歷史狀態、併發區域等,狀態中的事件分爲調用事件(Call)、變化事件(Change)、時間事件(Time)和信號事件(Singal)。最後以實例對狀態對進行了分析。