UML建模之狀態(tài)圖(Statechart Diagram)

一、狀態(tài)圖簡介(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í)行的原子操作,也就是說動(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)颊亮,而是直接通過一個(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)煤惩。說明組合狀態(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ì)員訂單-繳款期限已過期)
備貨中(Guard:已付款什猖、訂單成立、庫存量足夠)
出貨中(Effect:扣除商品可接單量及移除購物車中的購買資料)
出貨確認(rèn)(Guard:實(shí)際配達(dá)日及發(fā)票代碼红淡、號(hào)碼均不為空值)
出貨完畢(Guard:實(shí)際配達(dá)日不為空)
出貨失敗
訂單成立(Guard:出貨完畢不狮,已付款、鑒賞期結(jié)束日期 小于等于 [系統(tǒng)日期])

分析:
1在旱、購物車生成訂單進(jìn)入狀態(tài)【訂單成立】
2摇零、系統(tǒng)檢測(cè)訂單已經(jīng)付款并且?guī)齑媪孔銐颍瑒t進(jìn)入狀態(tài)【備貨中】
3桶蝎、物流發(fā)貨驻仅,進(jìn)入狀態(tài)【發(fā)貨中】,狀態(tài)轉(zhuǎn)移為【發(fā)貨中】后登渣,需要做的操作有“扣除商品可接單量及移除購物車中的購買資料”
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)行了分析郑口。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盾鳞,隨后出現(xiàn)的幾起案子犬性,更是在濱河造成了極大的恐慌,老刑警劉巖腾仅,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乒裆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡推励,警方通過查閱死者的電腦和手機(jī)鹤耍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來验辞,“玉大人稿黄,你說我怎么就攤上這事〉欤” “怎么了杆怕?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我财著,道長联四,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任撑教,我火速辦了婚禮朝墩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伟姐。我一直安慰自己收苏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布愤兵。 她就那樣靜靜地躺著鹿霸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秆乳。 梳的紋絲不亂的頭發(fā)上懦鼠,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音屹堰,去河邊找鬼肛冶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扯键,可吹牛的內(nèi)容都是我干的睦袖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼荣刑,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馅笙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厉亏,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤董习,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叶堆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阱飘,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年虱颗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沥匈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忘渔,死狀恐怖高帖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畦粮,我是刑警寧澤散址,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布乖阵,位于F島的核電站,受9級(jí)特大地震影響预麸,放射性物質(zhì)發(fā)生泄漏瞪浸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一吏祸、第九天 我趴在偏房一處隱蔽的房頂上張望对蒲。 院中可真熱鬧,春花似錦贡翘、人聲如沸蹈矮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泛鸟。三九已至,卻和暖如春踊东,著一層夾襖步出監(jiān)牢的瞬間北滥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工递胧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碑韵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓缎脾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親占卧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遗菠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容