麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 課堂 > 技術(shù)開發(fā) > 正文

UML系列內(nèi)容之十:狀態(tài)圖

2023-06-17 18:00:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

今天,繼續(xù)我們的UML之旅。

今天,我們將瀏覽一下UML中的狀態(tài)機(jī)圖。

1.什么是狀態(tài)機(jī)圖

狀態(tài)機(jī)圖(State Machine Diagram)是系統(tǒng)分析中常用的一種工具,它用于描述一個(gè)對(duì)象在其生命周期內(nèi)所經(jīng)歷的各種狀態(tài),以及狀態(tài)之間的轉(zhuǎn)移、引發(fā)轉(zhuǎn)移的事件或狀態(tài)轉(zhuǎn)移的活動(dòng)。

狀態(tài)機(jī)圖主要用于對(duì)類或?qū)ο蟮膭?dòng)態(tài)行為進(jìn)行建模。也可以對(duì)一個(gè)用例,或整個(gè)系統(tǒng)進(jìn)行建模。

2.狀態(tài)機(jī)的構(gòu)成

狀態(tài)機(jī)由狀態(tài)、轉(zhuǎn)移、事件和動(dòng)作等組成。

2.1 狀態(tài)

狀態(tài)(state)是指對(duì)象在其生命周期中,滿足某些條件、執(zhí)行某些活動(dòng)或等待某些事件時(shí)的一個(gè)狀況。

如圖書館的一本書籍可能有:“在架”、“借出”、“被預(yù)借”等狀態(tài);讀者可能有“已綁定借閱卡”、“未綁定借閱卡”、“被限制借閱”等狀態(tài)。

在UML中,狀態(tài)使用圓角矩形表示,一個(gè)狀態(tài)有自己的狀態(tài)名稱,狀態(tài)中包含該狀態(tài)下將執(zhí)行的動(dòng)作和事件。

借閱圖書狀態(tài)
圖1 借閱圖書狀態(tài)

如上圖是借閱系統(tǒng)中借閱圖書的一個(gè)狀態(tài)。

entry、do和exit是標(biāo)準(zhǔn)的三個(gè)動(dòng)作,分別是進(jìn)入狀態(tài)時(shí)的動(dòng)作,處于該狀態(tài)下執(zhí)行的動(dòng)作和退出該狀態(tài)時(shí)的動(dòng)作

且可以在該狀態(tài)下定義相應(yīng)的事件動(dòng)作event。

entry為進(jìn)入動(dòng)作,當(dāng)進(jìn)入該狀態(tài)時(shí)要執(zhí)行的動(dòng)作

exit為退出動(dòng)作,當(dāng)離開當(dāng)前狀態(tài)時(shí)要執(zhí)行的動(dòng)作

除了這種標(biāo)準(zhǔn)狀態(tài)之外,UML中還定義了初始狀態(tài)、結(jié)束狀態(tài)、組合狀態(tài)、子狀態(tài)和歷史狀態(tài)。

(1)初始狀態(tài)

初始狀態(tài)代表狀態(tài)機(jī)圖的開始,使用實(shí)心圓表示。一個(gè)狀態(tài)機(jī)圖只有一個(gè)初始狀態(tài)。

初始狀態(tài)
圖2 初始狀態(tài)

(2)結(jié)束狀態(tài)

結(jié)束狀態(tài)表示一個(gè)狀態(tài)機(jī)圖的結(jié)束,使用實(shí)心的圓環(huán)表示。一個(gè)狀態(tài)機(jī)圖可以有多個(gè)結(jié)束狀態(tài)。

結(jié)束狀態(tài)
圖3 結(jié)束狀態(tài)

(3)組合狀態(tài)

組合狀態(tài)是狀態(tài)內(nèi)部嵌套有子狀態(tài)的狀態(tài)。一個(gè)組合狀態(tài)包含一系列子狀態(tài)。

而沒有嵌套的狀態(tài)稱之為簡(jiǎn)單狀態(tài)。

嵌套在一個(gè)狀態(tài)內(nèi)部的狀態(tài)為子狀態(tài)。可以根據(jù)狀態(tài)是否同時(shí)存在,可以再細(xì)分為順序子狀態(tài)和并發(fā)子狀態(tài)。

順序子狀態(tài):在組合狀態(tài)的生命周期中,任何時(shí)刻只能處于一個(gè)子狀態(tài),即多個(gè)子狀態(tài)之間是互斥的關(guān)系,不能同時(shí)存在。

如下面的圖中演示一部手機(jī)處于“給某人打電話”這種組合狀態(tài)時(shí),其子狀態(tài)不能同時(shí)存在,是一種順序的子狀態(tài)。

并發(fā)狀態(tài)之順序子狀態(tài)
圖4 組合狀態(tài)之順序子狀態(tài)

并發(fā)子狀態(tài):多個(gè)順序的子狀態(tài)可以同時(shí)存在。下圖給出一輛汽車行駛中的組合狀態(tài)。低速和高速這兩個(gè)狀態(tài)是順序的子狀態(tài),在某一時(shí)刻只能處于其中一個(gè)狀態(tài);前進(jìn)和倒車也是如此。但這兩個(gè)順序的子狀態(tài)又可以同時(shí)存在。

并發(fā)狀態(tài)
圖5 組合狀態(tài)之并發(fā)子狀態(tài)

歷史狀態(tài):歷史狀態(tài)是一種偽狀態(tài),它表示在狀態(tài)再次轉(zhuǎn)移到該組合狀態(tài)時(shí),應(yīng)處于上一次退出時(shí)的一個(gè)子狀態(tài)。

歷史狀態(tài)
圖6 組合狀態(tài)之歷史狀態(tài)

上圖給出了一個(gè)音樂(lè)播放器的一個(gè)狀態(tài)機(jī)圖。其中“播放”標(biāo)記為歷史狀態(tài)。其含義是在播放狀態(tài)轉(zhuǎn)移到暫停狀態(tài),當(dāng)由暫停再進(jìn)入播放狀態(tài)時(shí),其應(yīng)進(jìn)入“播放”狀態(tài)退出時(shí)的一個(gè)子狀態(tài),它可能在退出時(shí)是“順序播放”狀態(tài),也可能是“隨機(jī)播放”狀態(tài),也可能是“倒序播放”狀態(tài),但必須是退出“播放”狀態(tài)時(shí)所處的一個(gè)歷史狀態(tài)。

2.2 轉(zhuǎn)移

轉(zhuǎn)移(Transition)指的是兩個(gè)不同狀態(tài)之間的一種關(guān)系,是對(duì)象在滿足一定條件或發(fā)生某個(gè)事件時(shí),從一種狀態(tài)遷移到另外一種狀態(tài)。

狀態(tài)轉(zhuǎn)移
圖7 狀態(tài)轉(zhuǎn)移

一個(gè)轉(zhuǎn)移一般包括源狀態(tài)、目的狀態(tài)、觸發(fā)事件、警戒條件和動(dòng)作5部分組成。

也就是說(shuō)事件的發(fā)生導(dǎo)致了從源狀態(tài)到目的狀態(tài)的轉(zhuǎn)移。

(1)源狀態(tài)

是受轉(zhuǎn)移影響的狀態(tài),當(dāng)事件發(fā)生或滿足警戒條件時(shí),就會(huì)激活一個(gè)轉(zhuǎn)移。

(2)目的狀態(tài)

轉(zhuǎn)移完成后的狀態(tài)。

(3)觸發(fā)事件

當(dāng)源狀態(tài)的對(duì)象接收到事件時(shí)轉(zhuǎn)移才有可能被激活。觸發(fā)事件有自己的名稱,也可以有自己的參數(shù)。

(4)警戒條件

轉(zhuǎn)移激活前需要滿足的一個(gè)條件。警戒條件往往是一個(gè)邏輯表達(dá)式,其值為真或假。觸發(fā)事件發(fā)生,且警戒條件為真時(shí),轉(zhuǎn)移才會(huì)被激活。否則,本次事件將被丟棄,只能等待下一次觸發(fā)事件的發(fā)生。

(5)動(dòng)作

當(dāng)轉(zhuǎn)移被激活時(shí),對(duì)應(yīng)的動(dòng)作也會(huì)被執(zhí)行。動(dòng)作一般可以是一個(gè)賦值操作或算術(shù)運(yùn)算,也可以是調(diào)用目的對(duì)象的一個(gè)操作或創(chuàng)建、銷毀一個(gè)對(duì)象,也可以是用簡(jiǎn)單語(yǔ)言來(lái)說(shuō)明動(dòng)作的含義。

狀態(tài)轉(zhuǎn)移
圖8 動(dòng)作

上圖中是圖書由“在架”狀態(tài)轉(zhuǎn)移到“被預(yù)借”狀態(tài)的一個(gè)例子。

源狀態(tài)是“在架”,目的狀態(tài)是“被預(yù)借”,“讀者預(yù)借”是觸發(fā)事件的名稱,“圖書編號(hào)”是觸發(fā)事件的參數(shù),“讀者預(yù)借數(shù)量<=1”是轉(zhuǎn)移的警戒條件,“添加預(yù)借記錄”和“設(shè)置圖書預(yù)借標(biāo)志=1”是轉(zhuǎn)移伴隨的動(dòng)作。

轉(zhuǎn)移還區(qū)分外部轉(zhuǎn)移和內(nèi)部轉(zhuǎn)移兩種情形。

外部轉(zhuǎn)移:外部轉(zhuǎn)移是一種改變狀態(tài)的轉(zhuǎn)移。也是狀態(tài)機(jī)中常見的一種轉(zhuǎn)移。

這種轉(zhuǎn)移主要出現(xiàn)在兩個(gè)不同的狀態(tài)之間。

內(nèi)部轉(zhuǎn)移:內(nèi)部轉(zhuǎn)移是指不會(huì)導(dǎo)致狀態(tài)改變的轉(zhuǎn)換。有時(shí),我們需要在該狀態(tài)下處理一些無(wú)需離開狀態(tài)的事件,這時(shí)可以定義一個(gè)內(nèi)部轉(zhuǎn)移。

如“借閱圖書”這個(gè)狀態(tài)中,“超出借閱冊(cè)數(shù)”時(shí),我們可能終止該本書的借閱,不把本書添加到借閱列表中,這種處理沒有導(dǎo)致借閱圖書狀態(tài)的轉(zhuǎn)移,可以視為內(nèi)部轉(zhuǎn)移。

內(nèi)部轉(zhuǎn)移的表示方法:

事件(參數(shù)名)[警戒條件]/動(dòng)作

如下圖所示的三個(gè)event動(dòng)作。

狀態(tài)中的動(dòng)作
圖9 借閱圖書的狀態(tài)動(dòng)作

如果源狀態(tài)與目的狀態(tài)是同一狀態(tài),則稱為自轉(zhuǎn)移。

下面這個(gè)例子中的“循環(huán)”就是一個(gè)自轉(zhuǎn)移的例子。

自轉(zhuǎn)移
圖10 自轉(zhuǎn)移

2.3 事件

事件(Event)是指在特定時(shí)間或空間內(nèi)出現(xiàn),并能夠?qū)е聽顟B(tài)轉(zhuǎn)移的信號(hào)、超時(shí)、條件改變、時(shí)間段等。

主要包括信號(hào)事件、時(shí)間事件、改變事件和調(diào)用事件等。

(1)信號(hào)事件

信號(hào)事件(signal event)是指一個(gè)對(duì)象接收到信號(hào)的事件,該接收信號(hào)的事件會(huì)導(dǎo)致其狀態(tài)的轉(zhuǎn)換。

發(fā)送對(duì)象明確地創(chuàng)建、初始化一個(gè)信號(hào)實(shí)例并把它發(fā)送到一個(gè)對(duì)象或?qū)ο蟮募稀?/p>

信號(hào)事件
圖11 在選擇記錄時(shí),按下ctrl進(jìn)入多選模式狀態(tài),釋放ctrl鍵轉(zhuǎn)換為單選模式

(2)時(shí)間事件

時(shí)間事件(time event)代表時(shí)間的流逝。當(dāng)時(shí)間條件被滿足時(shí)可能要觸發(fā)某個(gè)事件。時(shí)間可以是相對(duì)的也可以絕對(duì)的。如:after(9:00)。

時(shí)間事件
圖12 在路燈控制系統(tǒng)中,上午6:00斷電關(guān)閉,下午18:00后供電,開燈

(3)改變事件

改變事件(change event)是指依賴特定屬性值的邏輯表達(dá)式所表示的條件滿足時(shí),事件發(fā)生。

這里的改變事件與上面所說(shuō)的警戒條件不同,警戒條件是在轉(zhuǎn)移事件發(fā)生時(shí)或事件接收者對(duì)事件處理時(shí)被賦值一次,如果警戒條件為假,則轉(zhuǎn)移就不會(huì)發(fā)生,且該事件會(huì)被丟棄,警戒條件也不會(huì)再給賦值;而改變事件會(huì)被多次賦值直到條件為真,從而激活轉(zhuǎn)移。可以使用when(exp)的形式來(lái)表示。

改變事件
圖13 登錄后,time自動(dòng)連續(xù)增加,未操作時(shí)間超過(guò)300秒取消登錄狀態(tài)

(4)調(diào)用事件

調(diào)用事件(call event)表示一個(gè)對(duì)象接收到一個(gè)對(duì)調(diào)用的請(qǐng)求,這個(gè)對(duì)象用狀態(tài)的轉(zhuǎn)移而非特定的處理過(guò)程來(lái)實(shí)現(xiàn)操作。操作的參數(shù)即是事件的參數(shù)。調(diào)用結(jié)束時(shí),被調(diào)用者將返回結(jié)果給調(diào)用者,調(diào)用者可以繼續(xù)執(zhí)行。

調(diào)用事件
圖14 借閱圖書狀態(tài)中如有未交清罰款進(jìn)入到繳納罰款狀態(tài),繳納罰款完畢后返回繳清標(biāo)志,借閱圖書狀態(tài)繼續(xù)保持

2.4 動(dòng)作

動(dòng)作通常是一個(gè)簡(jiǎn)短的計(jì)算處理過(guò)程,如賦值操作或算術(shù)運(yùn)算。動(dòng)作也可以是一個(gè)動(dòng)作序列,包括給另外一個(gè)對(duì)象發(fā)送消息、調(diào)用一個(gè)操作、設(shè)置返回值、創(chuàng)建或銷毀對(duì)象。

動(dòng)作具有原子性,所以動(dòng)作不可被中斷,不能被同時(shí)發(fā)生的其它動(dòng)作所影響或終止。

動(dòng)作運(yùn)行時(shí)間很短,不能再被插入其它事件。

各種動(dòng)作的種類及相關(guān)語(yǔ)法可描述如下:

(1)賦值:target:=expression

(2)調(diào)用:opname(arg1,arg2)

(3)創(chuàng)建對(duì)象:new Cname(arg1,arg2)

(4)銷毀對(duì)象:object.destroy()

(5)返回值:return value

(6)向?qū)ο蟀l(fā)送消息:sname(arg1,arg2)

(7)對(duì)象自我終止:terminate

(8)不可中斷動(dòng)作:[用語(yǔ)言說(shuō)明]

3.狀態(tài)圖建模步驟

在狀態(tài)圖建模過(guò)程中可以參考以下步驟:

(1)確定建模的語(yǔ)境

狀態(tài)機(jī)可以用于對(duì)類進(jìn)行建模,也可以為一個(gè)用例進(jìn)行建模或者為一個(gè)子系統(tǒng),甚至整個(gè)系統(tǒng)建模。我們可以遵循從小到大的原則進(jìn)行建模,從類的狀態(tài)到用例,再到子系統(tǒng)的過(guò)程。當(dāng)然,并不是每個(gè)類都需要建立狀態(tài)機(jī)。

(2)識(shí)別狀態(tài)

確定好建模的語(yǔ)境后,識(shí)別其可能的狀態(tài),識(shí)別狀態(tài)可以按照從粗到細(xì)的方法去識(shí)別。并確定出必要的狀態(tài)。

(3)確定狀態(tài)的進(jìn)入動(dòng)作和退出動(dòng)作

對(duì)每個(gè)狀態(tài)確定其是否需要進(jìn)入動(dòng)作和退出動(dòng)作。

(4)確定狀態(tài)中的其它動(dòng)作

確定建模對(duì)象在該狀態(tài)下是否有其他需要做的事情以及警戒條件等。

(5)確定狀態(tài)之間的轉(zhuǎn)移

識(shí)別出各個(gè)狀態(tài)之間轉(zhuǎn)移的條件或事件,以及警戒條件等。

(6)檢查所繪制的狀態(tài)機(jī)是否與實(shí)際相符

(7)進(jìn)行必要的優(yōu)化

優(yōu)化包括圖形的布局,圖形的形式,以及狀態(tài)是否有冗余等。

4.使用Rose創(chuàng)建狀態(tài)圖

4.1 新建狀態(tài)圖

在Rose中,可以為一個(gè)類、一個(gè)用例或一個(gè)參與者建立狀態(tài)圖,也可以為一個(gè)子系統(tǒng)或整個(gè)系統(tǒng)建立狀態(tài)圖。

在Rose中,狀態(tài)圖可以創(chuàng)建在用例視圖或邏輯視圖里。

如果為某一個(gè)對(duì)象,如類、用例或參與者,可以直接在左側(cè)對(duì)象瀏覽器中的該對(duì)象上右擊,然后選擇“New”(新建)->"Statechart Diagram"(狀態(tài)圖)。

新建狀態(tài)圖
圖15 為一個(gè)對(duì)象建立狀態(tài)圖

若不指定對(duì)象,也可以在邏輯視圖或用例視圖上右擊選擇“New”->“Statechart Diagram”。

新建狀態(tài)圖02
圖16 在邏輯視圖上新建狀態(tài)圖

新建完?duì)顟B(tài)圖后,可以直接給其重新命名。或者通過(guò)右擊新建的狀態(tài)圖,然后選擇“rename”,如下圖所示:


圖17 為狀態(tài)圖重命名

4.2 狀態(tài)圖的工具箱

通過(guò)在左側(cè)對(duì)象瀏覽器中,雙擊新建的狀態(tài)圖可以開始工作了。

同時(shí),在中間顯示出用于狀態(tài)圖的工具箱,默認(rèn)的工具箱及其含義如下:

狀態(tài)圖工具箱
圖18 狀態(tài)圖工具箱

用戶也可以在工具箱上右擊后選擇“Customize...”來(lái)添加其它的工具,如下圖所示:

定制狀態(tài)圖的工具箱
圖19 自定義工具箱

用戶可以在左側(cè)選中一個(gè)工具,然后點(diǎn)擊“添加(A)->”,將其添加到工具欄中,也可以把不需要的工具在右側(cè)選中之后點(diǎn)擊“<-刪除(R)”將其刪除掉。

在左側(cè)待選工具中,“—”是用于創(chuàng)建一個(gè)水平的同步條,“|”用于創(chuàng)建一個(gè)垂直的同步條,“◇”用于創(chuàng)建一個(gè)判定。

定制好自己的工具箱后,可以點(diǎn)擊“關(guān)閉”按鈕將其關(guān)閉。

4.3 創(chuàng)建狀態(tài)

(1)創(chuàng)建

用戶在工具箱中點(diǎn)擊狀態(tài)工具,然后在右側(cè)工作區(qū)中點(diǎn)擊一下,就會(huì)創(chuàng)建一個(gè)狀態(tài)。

(2)修改名稱

方式一:創(chuàng)建完?duì)顟B(tài),其默認(rèn)名稱會(huì)默認(rèn)被選中,這時(shí),用戶可以直接修改其名稱;

方式二:在創(chuàng)建完以后要修改其名稱,可以先選中這個(gè)狀態(tài),然后再次點(diǎn)擊一下,也可以修改其名稱;

方式三:在狀態(tài)上雙擊,彈出如下對(duì)話框:

狀態(tài)通用選項(xiàng)卡
圖20 狀態(tài)圖規(guī)范說(shuō)明對(duì)話框

在其“General”(通用)選項(xiàng)卡上的Name(名稱)項(xiàng)中修改其名稱;

方式四:右擊該狀態(tài),然后選擇“Open Specification...”,也會(huì)彈出上圖所示的對(duì)話框。右擊狀態(tài)選擇的情形如下圖所示:

Rose中右擊一個(gè)狀態(tài)
圖21 右擊狀態(tài)圖選擇“打開規(guī)范說(shuō)明...”

(3)刪除一個(gè)狀態(tài)

如果想徹底刪除一個(gè)狀態(tài),可以選中狀態(tài)后,按下“Ctrl + D”,這樣就把這個(gè)狀態(tài)徹底從模型庫(kù)中刪除了。

也可以在狀態(tài)上右擊,然后選擇“Edit”(編輯),再選擇“Delete from Model”,也可以把這個(gè)狀態(tài)從模型庫(kù)中徹底刪除。

用戶還可以在選中狀態(tài)后,通過(guò)菜單中的“Edit”菜單下的“Delete from Model”從模型庫(kù)中刪除該狀態(tài)。

Rose中右擊刪除一個(gè)狀態(tài)
圖22 右擊選擇刪除狀態(tài)

如果僅是從當(dāng)前圖中刪除狀態(tài),而非從模型庫(kù)中徹底刪除,用戶可以在選中狀態(tài)后,按下鍵盤上的“Del”(刪除鍵)進(jìn)行刪除,也可以在狀態(tài)上右擊,然后選擇“Edit”->"Delete",如上面的圖中的Delete,也可以選擇菜單中的“Edit”->“Delete”來(lái)刪除一個(gè)狀態(tài)。

(4)為狀態(tài)添加動(dòng)作

用戶可以雙擊一個(gè)狀態(tài)或右擊狀態(tài)選擇“Open Specification”打開狀態(tài)規(guī)格說(shuō)明對(duì)話框。打開的狀態(tài)規(guī)范說(shuō)明對(duì)話框如圖20所示。

在“General”選項(xiàng)卡中可以設(shè)置狀態(tài)的名稱、構(gòu)造型、說(shuō)明文檔、是否激活歷史狀態(tài)(淺層)或深層歷史狀態(tài)。

在第2個(gè)選項(xiàng)卡“Actions”中可以添加狀態(tài)的動(dòng)作,如下圖:

Rose中Actions選項(xiàng)卡
圖23 Actions選項(xiàng)卡

在空白處右擊,選擇“Insert”,可以為其添加一個(gè)動(dòng)作。

Rose中為狀態(tài)添加動(dòng)作
圖24 為狀態(tài)添加動(dòng)作

添加后的動(dòng)作如下圖所示:

Rose中添加動(dòng)作后的效果
圖25 添加動(dòng)作后的效果

我們可以在動(dòng)作所在的行上雙擊或右擊后選擇“Specification...”,其會(huì)彈出如下圖所示的對(duì)話框:

Rose中關(guān)于動(dòng)作的規(guī)格說(shuō)明
圖26 動(dòng)作的規(guī)格說(shuō)明

在該對(duì)話框中的“When”對(duì)應(yīng)的下拉列表中可以設(shè)置動(dòng)作的類型,其中“On Entry”代表進(jìn)入動(dòng)作,“On Exit”代表退出動(dòng)作,“Do”代表內(nèi)部執(zhí)行的活動(dòng),“On Event”代表內(nèi)部事件轉(zhuǎn)移。Type用于指定動(dòng)作的類型是一個(gè)普通動(dòng)作(Action)還是發(fā)送一個(gè)事件(Send Event)。

當(dāng)“When”中選擇的是“On Event”時(shí),在“When”下邊的“On Event”分組框中可以設(shè)置事件的名稱、參數(shù)和條件。

下圖是On Event的一個(gè)設(shè)置情景:

Rose中OnEvent的設(shè)置
圖27 動(dòng)作規(guī)格說(shuō)明的例子

下圖是對(duì)“已借出”狀態(tài)設(shè)置的相關(guān)動(dòng)作。

Rose中已借閱狀態(tài)的設(shè)置情況
圖28 設(shè)置了動(dòng)作的狀態(tài)規(guī)格說(shuō)明

4.4 添加轉(zhuǎn)移

在工具相中選擇“狀態(tài)轉(zhuǎn)移”工具,鼠標(biāo)會(huì)變?yōu)橐粋€(gè)向上的空心箭頭的形狀,這時(shí),在源狀態(tài)上按下鼠標(biāo)不放,滑動(dòng)到目的狀態(tài)上后松開鼠標(biāo)即可。

下圖給出了鼠標(biāo)到達(dá)目的狀態(tài)松開之前的一個(gè)情景。

Rose中添加狀態(tài)轉(zhuǎn)移的操作
圖29 添加狀態(tài)的轉(zhuǎn)移

松開鼠標(biāo)之后的效果如下圖所示:

圖片Rose中添加狀態(tài)轉(zhuǎn)移后的效果
圖30 添加了狀態(tài)轉(zhuǎn)移后的樣子

設(shè)置轉(zhuǎn)移的相關(guān)內(nèi)容

方式一:選中轉(zhuǎn)移后,右擊后選擇“Open Specification...”,如下圖所示:

Rose中轉(zhuǎn)移的設(shè)置
圖31 右鍵打開轉(zhuǎn)移的規(guī)格說(shuō)明

方式二:雙擊轉(zhuǎn)移。

兩種方式都會(huì)打開下圖所示的狀態(tài)轉(zhuǎn)移規(guī)格說(shuō)明對(duì)話框:

Rose狀態(tài)轉(zhuǎn)移設(shè)置-通用選項(xiàng)卡
圖32 轉(zhuǎn)移的規(guī)格說(shuō)明——General

在上面圖中“General”選項(xiàng)卡的Event行中添加觸發(fā)轉(zhuǎn)移的事件,在Arguments行中添加事件的參數(shù)。

在“Detail”選項(xiàng)卡中可以對(duì)觸發(fā)事件進(jìn)行詳細(xì)的設(shè)置,如下圖:

Rose中設(shè)置轉(zhuǎn)移-Detail
圖33 轉(zhuǎn)移個(gè)規(guī)格說(shuō)明——Detail

設(shè)置的內(nèi)容包括“Guard Condition(警戒條件)”、“Action(動(dòng)作)”以及發(fā)送的事件、發(fā)送事件的參數(shù)和發(fā)送的目標(biāo)對(duì)象。

若在General和Detail設(shè)置的內(nèi)容如圖34和圖35中的樣子,則最后在源狀態(tài)和目的狀態(tài)中呈現(xiàn)的樣子如圖36所示:

Rose中設(shè)置轉(zhuǎn)移的例子-通用選項(xiàng)卡
圖34 轉(zhuǎn)移規(guī)格說(shuō)明例子——General設(shè)置

Rose中設(shè)置轉(zhuǎn)移的例子-Detail選項(xiàng)卡
圖35 轉(zhuǎn)移的規(guī)格說(shuō)明——Detail設(shè)置


圖36 狀態(tài)轉(zhuǎn)移設(shè)置的最終樣子

4.5 子狀態(tài)的創(chuàng)建

在添加了主狀態(tài)之后,可以在其主狀態(tài)中,添加子狀態(tài),方法是在工具箱中選擇狀態(tài)后,直接在主狀態(tài)上點(diǎn)擊即可,則在主狀態(tài)中會(huì)添加一個(gè)子狀態(tài)。

下圖顯示了當(dāng)選擇狀態(tài)工具后,鼠標(biāo)滑到主狀態(tài)上時(shí)的情形:


圖37 添加子狀態(tài)

下圖顯示了添加完后的情形:

Rose中添加子狀態(tài)的效果
圖38 子狀態(tài)效果

給子狀態(tài)添加轉(zhuǎn)移等方法與上面有關(guān)內(nèi)容相同。

4.6 如何設(shè)置歷史狀態(tài)

打開狀態(tài)的規(guī)格說(shuō)明對(duì)話框(雙擊狀態(tài)或右擊選擇“Open Specification...”),在“General”選項(xiàng)卡中把下面的“State/activity history”勾選上,則會(huì)在狀態(tài)的左下角顯示一個(gè)帶圈的H,如果想激活狀態(tài)的深層歷史狀態(tài),就把“Sub state/activity history”也勾選上,則原來(lái)H字母的右上角出現(xiàn)一個(gè)“*”號(hào)。

設(shè)置歷史狀態(tài)的情形如下:

Rose中歷史狀態(tài)的設(shè)置
圖39 設(shè)置歷史狀態(tài)

狀態(tài)設(shè)置后的效果如下圖所示:

Rose中歷史狀態(tài)效果
圖40 歷史狀態(tài)

4.7 如何添加同步條

用戶可以使用本文中4.2中的方法,把水平同步條以及垂直同步條添加到工具箱中,在需要的時(shí)候選擇它后并在繪圖區(qū)點(diǎn)擊一下,即可以添加一個(gè)同步條。

用戶也可以通過(guò)菜單欄中的“Tools”->“Create”中的“Horizontal Synchronization Bar”及“Vertical Synchronization Bar”創(chuàng)建水平同步條或垂直的同步條。如下圖所示的菜單:

Rose中為狀態(tài)圖添加同步條
圖41 使用菜單添加同步條

4.8 關(guān)于初始狀態(tài)和結(jié)束狀態(tài)

若要?jiǎng)?chuàng)建初始狀態(tài),用戶可以直接在工具箱中選擇黑色的實(shí)心圓,在繪圖區(qū)點(diǎn)擊一下就可以創(chuàng)建一個(gè)初始狀態(tài)。

注意:一個(gè)狀態(tài)圖中只允許有一個(gè)初始狀態(tài),如果在一個(gè)繪圖區(qū)中要使用多次初始狀態(tài),用戶可以從左側(cè)瀏覽器中把它拖拽到繪圖區(qū) 中來(lái)。

創(chuàng)建結(jié)束狀態(tài)的方法與創(chuàng)建初始狀態(tài)的方法相同。

在一個(gè)狀態(tài)圖中,可以有多個(gè)結(jié)束狀態(tài)

以上帶大家學(xué)習(xí)了UML中的狀態(tài)機(jī)圖以及使用Rose繪制狀態(tài)圖的方法。

如有問(wèn)題,請(qǐng)留言。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 毛片a级毛片免费播放100 | 久久综合久久综合久久综合 | 欧美激情综合网 | 国产精品啪一品二区三区粉嫩 | 羞羞的视频免费在线观看 | 国产一区二区精品免费 | 成人国产精品色哟哟 | 一色桃子av大全在线播放 | 久久免费综合视频 | 黄色毛片视频在线观看 | 久操福利视频 | 免费人成在线播放 | 国产成人精品一区在线播放 | jizzjizzjizz少妇 | 成年人免费高清视频 | 成人毛片免费播放 | 一区二区三区在线观看免费 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲最大的成人网 | 午夜偷拍视频 | 艹男人的日日夜夜 | 亚洲第一综合色 | 中文字幕一区二区三区久久 | 日本特级a一片免费观看 | 国产精品久久久久久久hd | 狠狠操人人干 | 羞羞色网站 | 久久精品视频69 | 国产精品久久久久永久免费 | 久久久久久中文字幕 | 日韩av电影在线免费观看 | 久草在线观看首页 | 麻豆视频国产在线观看 | 精品一区二区三区在线观看视频 | 久久久一区二区三区四区 | 成人免费福利网站 | 黄色片网站免费在线观看 | 日韩精品中文字幕一区二区三区 | 久久精品视频在线 | 久久日本| 一区二区精品在线 |