1. 程式人生 > >UML建模之狀態圖(Statechart Diagram)

UML建模之狀態圖(Statechart Diagram)

狀態圖目錄:

一、狀態圖簡介(Brief introduction)

二、狀態圖元素(State Diagram Elements)

1、狀態(States)

2、轉移(Transitions)

3、動作(State Actions)

4、自身轉移(Self-Transitions)

5、組合狀態(Compound States)

6、進入節點(Entry Point)

7、退出節點(Exit Point)

8、歷史狀態(History States)

9、併發區域(Concurrent Regions)

三、狀態圖案例分析(State Diagram Example Analysis)

      四、總結(Summary)

一、狀態圖簡介(Brief introduction)

狀態圖(Statechart Diagram)主要用於描述一個物件在其生存期間的動態行為,表現為一個物件所經歷的狀態序列,引起狀態轉移的事件(Event),以及因狀態轉移而伴隨的動作(Action)。一般可以用狀態機對一個物件的生命週期建模,狀態圖用於顯示狀態機(State Machine Diagram),重點在與描述狀態圖的控制流。如下圖例子,狀態機描述了門物件的生存期間的狀態序列,引起轉移的事件,以及因狀態轉移而伴隨的動作(Action).

狀態有OpenedClosedLocked

事件有 OpenCloseLock

Unlock

注意:

1、             並不是所有的事件都會引起狀態的轉移,比如當門是處於【Opened】狀態,不能進行【Lock】事件。

2、             轉移(Transition)有警備條件(guard condition),比如只有doorWay->isEmpty 條件滿足時,才會響應事件。

二、狀態圖元素(State Diagram Elements)

1、狀態(States)

    指在物件的生命週期中的某個條件或者狀況,在此期間物件將滿足某些條件、執行某些活動活活等待某些事件。所有物件都有狀態,狀態是物件執行了一系列活動的結果,當某個事件發生後,物件的狀態將發生變化。

狀態用圓角矩形表示

初態和終態(Initial and 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 )和退出動作(Exit Action),如下圖

4、自身轉移(Self-Transitions)

    狀態可以有返回自身狀態的轉移,稱之為自身轉移(Self-Transitions

2S後,Poll input事件執行,轉移到自己狀態【Waiting

5、組合狀態(Compound States)

    巢狀在另外一個狀態中的狀態稱之為子狀態(sub-state,一個含有子狀態的狀態被稱作組合狀態(Compound States如下圖,【Check PIN】是組合狀態,【Enter PIN】是子狀態。

也可用以下方式進行描述

如上圖,狀態機【Check PIN】的細節被分割到另外一個圖中了。

6、進入節點(Entry Point)

    如下圖所示,由於一些原因並不會執行初始化(initialization),而是直接通過一個節點進入狀態【Ready】,則此節點稱之為進入節點(Entry Point

7、退出節點(Exit Point)

8、歷史狀態(History States)

    歷史狀態是一個偽狀態(Pseudostate,其目的是記住從組合狀態中退出時所處的子狀態,當再次進入組合狀態,可直接進入這個子狀態,而不是再次從組合狀態的初態開始。

在上圖的狀態圖中,正常的狀態順序是:Washing- >Rinsing->Spinning】。

如果是從狀態【Rinsing】突然停電(Power Cut)退出,,洗衣機停止工作進入狀態【Power Off】,當電力恢復時直接進入狀態【Running】。

9、併發區域(Concurrent Regions)

    狀態圖可以分為區域,而區域又包括退出或者當前執行的子狀態。說明組合狀態在某一時刻可以同時達到多個子狀態。如下圖剎車系統,同時進入前剎車【Applying Front Brakes】狀態和後剎車【Applying Rear Brakes】狀態。

三、狀態圖案例分析(State Diagram Example Analysis)

按照blink518的建議(“出貨中”是屬於條件分支應該使用Decision),改成如下圖也是很好的做法:

訂單成立狀態主要有:

訂單成立

訂單取消(Guard:會員訂單-繳款期限已過期)

備貨中(Guard:已付款、訂單成立、庫存量足夠)

出貨中(Effect:扣除商品可接單量及移除購物車中的購買資料)

出貨確認(Guard:實際配達日及發票程式碼、號碼均不為空值)

出貨完畢(Guard:實際配達日不為空)

出貨失敗

訂單成立(Guard:出貨完畢,已付款、鑑賞期結束日期小於等於 [系統日期]

分析:

1、購物車生成訂單進入狀態【訂單成立】

2、系統檢測訂單已經付款並且庫存量足夠,則進入狀態【備貨中】

3、物流發貨,進入狀態【發貨中】,狀態轉移為【發貨中】後,需要做的操作有“扣除商品可接單量及移除購物車中的購買資料”

4、發貨完畢後,狀態分為【出貨確認】和狀態【出貨失敗】,如果狀態是【出貨失敗】,則【結束】,如果狀態為【出貨確認】,則進入下一步。

5、配貨人員填寫實際配達日期,進入狀態【出貨完畢】。

6、如果已付款、鑑賞期結束日期小於等於 [系統日期]”,則【訂單成立】。

四、總結(Summary)

       狀態圖重點在於描述物件的狀態及其狀態之間的轉移,狀態圖的基本元素主要有:狀態、轉移、動作、自身轉移、組合狀態、進入節點、退出節點、歷史狀態、併發區域等,狀態中的事件分為呼叫事件(Call)、變化事件(Change)、時間事件(Time)和訊號事件(Singal)。最後以例項對狀態對進行了分析。