上篇文章,介紹了UML的基礎(chǔ)知識,并詳細(xì)介紹了UML中類圖的知識點(diǎn)與畫法。
本篇,來繼續(xù)介紹UML中的另一種圖——狀態(tài)圖。
1 UML狀態(tài)圖簡介
狀態(tài)圖,顯示一個狀態(tài)機(jī),屬于UML活動圖。
UML具有許多不同類型的圖表,包括:
- 靜態(tài)圖:用例圖、類圖、包圖
- 動態(tài)圖:活動圖、狀態(tài)圖、時序圖、協(xié)作圖
狀態(tài)機(jī)用于對模型元素的動態(tài)行為進(jìn)行建模,或是說對系統(tǒng)中受事件驅(qū)動的方面進(jìn)行建模。
2 狀態(tài)圖基本要素
2.1 狀態(tài)
狀態(tài)是狀態(tài)機(jī)的重要組成部分,描述了狀態(tài)機(jī)所在對象動態(tài)行為的執(zhí)行所產(chǎn)生的結(jié)果
2.1.1 初始/最終/選擇狀態(tài)
這三個都是****偽狀態(tài) (Pseudostate):
- 初始狀態(tài):用一個實(shí)心圓形表
- 最終狀態(tài):用一個圓圈內(nèi)嵌實(shí)心圓點(diǎn)表示
- 選擇狀態(tài):用一個菱形表示,條件分支上方括號內(nèi)的文字表示****監(jiān)護(hù)條件 (guard conditions)
2.1.2 一般狀態(tài)
UML中使用一個圓角矩形表示一個一般狀態(tài)
狀態(tài)的組成部分:
- 名稱:由一個字符串組成,用以識別不同狀態(tài)??赡涿?,一般放置在狀態(tài)圖符頂部
- 入口/出口動作:表示進(jìn)入/退出這個狀態(tài)所執(zhí)行的動作,動作可以是原子動作,也可是動作序列
- 內(nèi)部轉(zhuǎn)換:內(nèi)部轉(zhuǎn)換不會引起狀態(tài)變化的轉(zhuǎn)換,此轉(zhuǎn)換的觸發(fā)不會導(dǎo)致狀態(tài)的入口/出口動作被執(zhí)行。語法:事件/動作表達(dá)式
2.1.3 復(fù)合狀態(tài)
復(fù)合狀態(tài),或稱組合狀態(tài),是指包含有子狀態(tài)的狀態(tài)。
如下圖,“復(fù)合狀態(tài)2”即為復(fù)合狀態(tài),內(nèi)部的“狀態(tài)2-1”、"狀態(tài)2-2"為子狀態(tài)。
也可用以下形式表示,將復(fù)合狀態(tài)的內(nèi)容單獨(dú)畫出。
注:圖中的圓圈內(nèi)一個H字母,表示****歷史狀態(tài) ,它也是一個偽狀態(tài),其目的是記住從組合狀態(tài)中退出時所處的子狀態(tài),當(dāng)再次進(jìn)入組合狀態(tài),可直接進(jìn)入這個子狀態(tài),而不是再次從組合狀態(tài)的初態(tài)開始
2.2 轉(zhuǎn)換
轉(zhuǎn)換(Transition)是兩個狀態(tài)之間的關(guān)聯(lián)。表示對象在第一個狀態(tài)(Source State)中執(zhí)行一定的動作,并在某個特定事情發(fā)生并且某個特定的條件滿足時進(jìn)入下一個狀態(tài)(Target State)。
2.2.1 一般轉(zhuǎn)換
一般情況下的狀態(tài)轉(zhuǎn)換是兩個不同狀態(tài)之間的轉(zhuǎn)換,示意圖如下:
轉(zhuǎn)換的組成部分:
- 源狀態(tài)(Source State):源狀態(tài)就是被轉(zhuǎn)換影響的狀態(tài)。某對象處于源狀態(tài),當(dāng)它接收到觸發(fā)事件或滿足監(jiān)護(hù)條件,就會激活一個轉(zhuǎn)換
- 目標(biāo)狀態(tài)(Target State):轉(zhuǎn)換完成后,對象狀態(tài)發(fā)生變化,這時對象所處的狀態(tài)就是轉(zhuǎn)換的目標(biāo)狀態(tài)
- 觸發(fā)事件(Trigger):引起轉(zhuǎn)換的事件,這里所指的事件可以是信號、調(diào)用、時間段或狀態(tài)的一個改變
- 監(jiān)護(hù)條件(Guard Condition):是一個方括號括起來的布爾表達(dá)式,它被放在觸發(fā)事件的后面。監(jiān)護(hù)條件可以引用對象的屬性值和觸發(fā)事件的參數(shù)
- 結(jié)果(Effect):對象狀態(tài)轉(zhuǎn)移后的結(jié)果
2.2.2 自身轉(zhuǎn)換
自身轉(zhuǎn)換(Self-Transitions),是指狀態(tài)可以有返回自身狀態(tài)的轉(zhuǎn)換。
2.2.3 本地轉(zhuǎn)換與外部轉(zhuǎn)換
對于復(fù)合狀態(tài)之間的轉(zhuǎn)換,需要注意本地轉(zhuǎn)換(Local transition)與外部轉(zhuǎn)換(External transition)的不同。
上圖中,左邊是本地轉(zhuǎn)換,右邊是外部轉(zhuǎn)換。
- 上面兩個,源狀態(tài)包含了目標(biāo)狀態(tài),這種情況兩種轉(zhuǎn)換的區(qū)別在于:本地轉(zhuǎn)換不會從源狀態(tài)退出(不會執(zhí)行退出動作),而外部轉(zhuǎn)換會退出再重新進(jìn)入源狀態(tài)。
- 下面兩個,目標(biāo)狀態(tài)包含了源狀態(tài),這種情況兩種轉(zhuǎn)換的區(qū)別在于:本地轉(zhuǎn)換不會再次進(jìn)入目標(biāo)狀態(tài)(不會執(zhí)行進(jìn)入動作),而外部轉(zhuǎn)換會退出再重新進(jìn)入目標(biāo)狀態(tài)。
3 一個UML狀態(tài)圖實(shí)例
3.1 使用visio繪制UML狀態(tài)圖
新建一個visio文件,打開后會自動提示選擇創(chuàng)建某種類型的圖,這里選擇"軟件和數(shù)據(jù)庫 ->UML狀態(tài)機(jī)"
點(diǎn)擊確定之后,會進(jìn)入UML狀態(tài)圖的編輯界面,左側(cè)可以看到用于UML狀態(tài)圖編輯的基本元素,將這些元素拖拽到右側(cè)的編解面板中,可以看到這些元素的基本結(jié)構(gòu)形式:
3.2 實(shí)例講解
下面是一個UML狀態(tài)圖的實(shí)例:
這是一個全自動洗衣機(jī)的UML狀態(tài)圖,主要包括“設(shè)置”、“工作中”、“暫?!边@3個狀態(tài)。
- 開機(jī)時,會先進(jìn)入“設(shè)置”狀態(tài),可以設(shè)置洗衣模式以及水量等,觸發(fā)啟動后,會進(jìn)入“工作中”狀態(tài)。
- “工作中”是一個復(fù)合狀態(tài),內(nèi)部包括“加水”、“清洗”、“排水”、“甩干”這4個子狀態(tài)。進(jìn)入該狀態(tài)后,從“加水”子狀態(tài)開始執(zhí)行,然后會執(zhí)行“清洗”、"排水"子狀態(tài),排水完成后,根據(jù)清洗次數(shù)是否足夠,跳轉(zhuǎn)到“加水”或“甩干”子狀態(tài)。
- 在“工作中”狀態(tài)時,無論處于哪個子狀態(tài),只有按了暫停鍵,都會進(jìn)入“暫停”狀態(tài),再按繼續(xù),則會進(jìn)入“工作中”繼續(xù)執(zhí)行,注意繼續(xù)時指向的是歷史狀態(tài)(圓圈內(nèi)一個H字母),表示繼續(xù)指向剛才暫停時的子狀態(tài)。
4 總結(jié)
本篇介紹了UML狀態(tài)圖的基礎(chǔ)知識,并通過visio繪制一個全自動洗衣機(jī)的UML狀態(tài)圖實(shí)例,來介紹UML狀態(tài)圖的畫法與所表達(dá)的含義。
審核編輯:湯梓紅
-
UML
+關(guān)注
關(guān)注
0文章
122瀏覽量
30858 -
時序圖
+關(guān)注
關(guān)注
2文章
58瀏覽量
22444 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27539 -
狀態(tài)圖
+關(guān)注
關(guān)注
0文章
11瀏覽量
7318
發(fā)布評論請先 登錄
相關(guān)推薦
評論