一、狀態(tài)圖簡(jiǎn)介(Brief introduction)
狀態(tài)圖(Statechart Diagram)主要用于描述一個(gè)對(duì)象在其生存期間的動(dòng)態(tài)行為,表現(xiàn)為一個(gè)對(duì)象所經(jīng)歷的狀態(tài)序列,引起狀態(tài)轉(zhuǎn)移的事件(Event),以及因狀態(tài)轉(zhuǎn)移而伴隨的動(dòng)作(Action)。一般可以用狀態(tài)機(jī)對(duì)一個(gè)對(duì)象的生命周期建模,狀態(tài)圖用于顯示狀態(tài)機(jī)(State Machine Diagram),重點(diǎn)在與描述狀態(tài)圖的控制流。
如下圖例子,狀態(tài)機(jī)描述了門對(duì)象的生存期間的狀態(tài)序列,引起轉(zhuǎn)移的事件,以及因狀態(tài)轉(zhuǎn)移而伴隨的動(dòng)作(Action)
.狀態(tài)有Opened、Closed、Locked。
事件有 Open、Close、Lock和Unlock。
注意:
1、并不是所有的事件都會(huì)引起狀態(tài)的轉(zhuǎn)移,比如當(dāng)門是處于【Opened】狀態(tài),不能進(jìn)行【Lock】事件。
2、轉(zhuǎn)移(Transition)有警備條件(guard condition),比如只有doorWay->isEmpty 條件滿足時(shí),才會(huì)響應(yīng)事件。
二、狀態(tài)圖元素(State Diagram Elements) 1、狀態(tài)(States)
指在對(duì)象的生命周期中的某個(gè)條件或者狀況,在此期間對(duì)象將滿足某些條件、執(zhí)行某些活動(dòng)活活等待某些事件。所有對(duì)象都有狀態(tài),狀態(tài)是對(duì)象執(zhí)行了一系列活動(dòng)的結(jié)果,當(dāng)某個(gè)事件發(fā)生后,對(duì)象的狀態(tài)將發(fā)生變化。
狀態(tài)用圓角矩形表示
初態(tài)和終態(tài)(Initial and Final States)
初態(tài)用實(shí)心圓點(diǎn)表示,終態(tài)用圓形內(nèi)嵌圓點(diǎn)表示。
2、轉(zhuǎn)移(Transitions)
轉(zhuǎn)移(Transitions)是兩個(gè)狀態(tài)之間的一種關(guān)系,表示對(duì)象將在源狀態(tài)(Source State)中執(zhí)行一定的動(dòng)作,并在某個(gè)特定事件發(fā)生而且某個(gè)特定的警界條件滿足時(shí)進(jìn)入目標(biāo)狀態(tài)(Target State)
事件標(biāo)記(Trigger):是轉(zhuǎn)移的誘因,可以是一個(gè)信號(hào),事件、條件變化(a change in some condition)和時(shí)間表達(dá)式。
警界條件(Guard Condition):當(dāng)警界條件滿足時(shí),事件才會(huì)引發(fā)轉(zhuǎn)移(Transition)。
結(jié)果(Effect):對(duì)象狀態(tài)轉(zhuǎn)移后的結(jié)果。
3、動(dòng)作(State Actions)
動(dòng)作(Actions)是一個(gè)可執(zhí)行的原子操作,也就是說(shuō)動(dòng)作是不可中斷的,其執(zhí)行時(shí)間是可忽略不計(jì)的。
在上例中,對(duì)象狀態(tài)轉(zhuǎn)移后的結(jié)果顯示在轉(zhuǎn)移線上,如果目標(biāo)狀態(tài)有許多轉(zhuǎn)移,而且每個(gè)轉(zhuǎn)移有相同的結(jié)果,這時(shí)把轉(zhuǎn)移后的結(jié)果(Effect)展示在目標(biāo)狀態(tài)中(Target State)更好一些,可以定義進(jìn)入動(dòng)作(Entry Action )和退出動(dòng)作(Exit Action),如下圖
4、自身轉(zhuǎn)移(Self-Transitions)
狀態(tài)可以有返回自身狀態(tài)的轉(zhuǎn)移,稱之為自身轉(zhuǎn)移(Self-Transitions)
2S后,Poll input事件執(zhí)行,轉(zhuǎn)移到自己狀態(tài)【W(wǎng)aiting】
5、組合狀態(tài)(Compound States)
嵌套在另外一個(gè)狀態(tài)中的狀態(tài)稱之為子狀態(tài)(sub-state),一個(gè)含有子狀態(tài)的狀態(tài)被稱作組合狀態(tài)(Compound States). 如下圖,【Check PIN】是組合狀態(tài),【Enter PIN】是子狀態(tài)。
也可用以下方式進(jìn)行描述
如上圖,狀態(tài)機(jī)【Check PIN】的細(xì)節(jié)被分割到另外一個(gè)圖中了。
6、進(jìn)入節(jié)點(diǎn)(Entry Point)
如下圖所示,由于一些原因并不會(huì)執(zhí)行初始化(initialization),而是直接通過(guò)一個(gè)節(jié)點(diǎn)進(jìn)入狀態(tài)【Ready】,則此節(jié)點(diǎn)稱之為進(jìn)入節(jié)點(diǎn)(Entry Point)
7、退出節(jié)點(diǎn)(Exit Point)
8、歷史狀態(tài)(History States)
歷史狀態(tài)是一個(gè)偽狀態(tài)(Pseudostate),其目的是記住從組合狀態(tài)中退出時(shí)所處的子狀態(tài),當(dāng)再次進(jìn)入組合狀態(tài),可直接進(jìn)入這個(gè)子狀態(tài),而不是再次從組合狀態(tài)的初態(tài)開始。
在上圖的狀態(tài)圖中,正常的狀態(tài)順序是:【W(wǎng)ashing】- >【Rinsing】->【Spinning】。
如果是從狀態(tài)【Rinsing】突然停電(Power Cut)退出,,洗衣機(jī)停止工作進(jìn)入狀態(tài)【Power Off】,當(dāng)電力恢復(fù)時(shí)直接進(jìn)入狀態(tài)【Running】。
9、并發(fā)區(qū)域(Concurrent Regions)
狀態(tài)圖可以分為區(qū)域,而區(qū)域又包括退出或者當(dāng)前執(zhí)行的子狀態(tài)。說(shuō)明組合狀態(tài)在某一時(shí)刻可以同時(shí)達(dá)到多個(gè)子狀態(tài)。如下圖剎車系統(tǒng),同時(shí)進(jìn)入前剎車【Applying Front Brakes】狀態(tài)和后剎車【Applying Rear Brakes】狀態(tài)。
三、狀態(tài)圖案例分析(State Diagram Example Analysis)
按照blink518的建議(“出貨中”是屬于條件分支應(yīng)該使用Decision),改成如下圖也是很好的做法:
訂單成立狀態(tài)主要有:
訂單成立
訂單取消(Guard:會(huì)員訂單-繳款期限已過(guò)期)
備貨中(Guard:已付款、訂單成立、庫(kù)存量足夠)
出貨中(Effect:扣除商品可接單量及移除購(gòu)物車中的購(gòu)買資料)
出貨確認(rèn)(Guard:實(shí)際配達(dá)日及發(fā)票代碼、號(hào)碼均不為空值)
出貨完畢(Guard:實(shí)際配達(dá)日不為空)
出貨失敗
訂單成立(Guard:出貨完畢,已付款、鑒賞期結(jié)束日期 小于等于 [系統(tǒng)日期])
分析:
1、購(gòu)物車生成訂單進(jìn)入狀態(tài)【訂單成立】
2、系統(tǒng)檢測(cè)訂單已經(jīng)付款并且?guī)齑媪孔銐,則進(jìn)入狀態(tài)【備貨中】
3、物流發(fā)貨,進(jìn)入狀態(tài)【發(fā)貨中】,狀態(tài)轉(zhuǎn)移為【發(fā)貨中】后,需要做的操作有“扣除商品可接單量及移除購(gòu)物車中的購(gòu)買資料”
4、發(fā)貨完畢后,狀態(tài)分為【出貨確認(rèn)】和狀態(tài)【出貨失敗】,如果狀態(tài)是【出貨失敗】,則【結(jié)束】,如果狀態(tài)為【出貨確認(rèn)】,則進(jìn)入下一步。
5、配貨人員填寫實(shí)際配達(dá)日期,進(jìn)入狀態(tài)【出貨完畢】。
6、如果”已付款、鑒賞期結(jié)束日期 小于等于 [系統(tǒng)日期]”,則【訂單成立】。
四、總結(jié)(Summary) 狀態(tài)圖重點(diǎn)在于描述對(duì)象的狀態(tài)及其狀態(tài)之間的轉(zhuǎn)移,狀態(tài)圖的基本元素主要有:狀態(tài)、轉(zhuǎn)移、動(dòng)作、自身轉(zhuǎn)移、組合狀態(tài)、進(jìn)入節(jié)點(diǎn)、退出節(jié)點(diǎn)、歷史狀態(tài)、并發(fā)區(qū)域等,狀態(tài)中的事件分為調(diào)用事件(Call)、變化事件(Change)、時(shí)間事件(Time)和信號(hào)事件(Singal)。最后以實(shí)例對(duì)狀態(tài)對(duì)進(jìn)行了分析。
出處:靈動(dòng)生活
責(zé)任編輯:bluehearts
上一頁(yè) UML建模之活動(dòng)圖介紹(Activity Diagram) [4] 下一頁(yè) UML建模之時(shí)序圖(Sequence Diagram) [6]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|