UML基礎(chǔ)與建模實(shí)踐:10、第十章 狀態(tài)機(jī)圖_第1頁(yè)
UML基礎(chǔ)與建模實(shí)踐:10、第十章 狀態(tài)機(jī)圖_第2頁(yè)
UML基礎(chǔ)與建模實(shí)踐:10、第十章 狀態(tài)機(jī)圖_第3頁(yè)
UML基礎(chǔ)與建模實(shí)踐:10、第十章 狀態(tài)機(jī)圖_第4頁(yè)
UML基礎(chǔ)與建模實(shí)踐:10、第十章 狀態(tài)機(jī)圖_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

UML基礎(chǔ)與建模實(shí)踐

第十章?tīng)顟B(tài)機(jī)圖

主講人:

內(nèi)容摘要什么是狀態(tài)機(jī)圖1狀態(tài)圖的表示2遷移以及狀態(tài)的分類3狀態(tài)機(jī)圖應(yīng)用4小結(jié)與習(xí)題510.1什么是狀態(tài)機(jī)圖狀態(tài)機(jī)圖描述對(duì)象在整個(gè)生命周期內(nèi),在外部事件的作用下,從一種狀態(tài)遷移到另一種狀態(tài)的關(guān)系圖。狀態(tài)圖的節(jié)點(diǎn)是狀態(tài)(包括初始狀態(tài)和終止?fàn)顟B(tài)),關(guān)系是遷移。10.2狀態(tài)圖的表示一個(gè)狀態(tài)圖包含的元素有:

初始狀態(tài) 終止?fàn)顟B(tài) 狀態(tài) 遷移 分支下面分別描述元素的語(yǔ)義和表示方法。10.2.1狀態(tài)的表示1.初始狀態(tài) 初始狀態(tài)在一個(gè)狀態(tài)圖中只允許有一個(gè),它用一個(gè)實(shí)心的圓表示,如圖10-2所示。2.終止?fàn)顟B(tài)終止?fàn)顟B(tài)用一個(gè)套有一個(gè)實(shí)心圓的空心圓表示。如圖10-3所示。圖10-2初始狀態(tài)的表示圖10-3終止?fàn)顟B(tài)的表示10.2.1狀態(tài)的表示3.狀態(tài) 狀態(tài)有三種表示方法,如圖10-4所示,是狀態(tài)的簡(jiǎn)單表示,如圖10-5所示,是狀態(tài)的詳細(xì)表示,如圖10-6所示, 是含有子狀態(tài)的表示。

狀態(tài)名稱Name狀態(tài)名稱entry/actionexit/actiondo/activityevent/action(argument)圖10-4簡(jiǎn)單表示圖10-5詳細(xì)表示狀態(tài)名稱entry/actionexit/actiondo/activityevent/action(argument)圖10-6包含子狀態(tài)表示子狀態(tài)圖繪制在這里10.2.1狀態(tài)的表示(1)狀態(tài)名稱:給對(duì)象所處狀態(tài)取的名字,名字用一個(gè)字符串表示,在一個(gè)圖中,名字應(yīng)該是唯一的。(2)entry/action:表示進(jìn)入該狀態(tài)時(shí)執(zhí)行的動(dòng)作。entry是關(guān)鍵字,表示進(jìn)入該狀態(tài),action代表某個(gè)動(dòng)作。(3)exit/action:表示退出該狀態(tài)時(shí)執(zhí)行的動(dòng)作。exit是關(guān)鍵字,表示退出該狀態(tài),action代表某個(gè)動(dòng)作。10.2.1狀態(tài)的表示(4)do/activity:表示處于該狀態(tài)時(shí),執(zhí)行的活動(dòng)(do是關(guān)鍵字,表示活動(dòng),activity代表某個(gè)活動(dòng)),活動(dòng)是一系列動(dòng)作的集合,活動(dòng)執(zhí)行時(shí)可以被中斷,動(dòng)作執(zhí)行時(shí)不能被中斷。(5)event/action(argument):表示內(nèi)部遷移。該語(yǔ)句表示對(duì)象處于該狀態(tài)時(shí)響應(yīng)某個(gè)事件(event)所執(zhí)行的動(dòng)作action(argument)。event代表某個(gè)事件,action(argument)代表某個(gè)動(dòng)作。Argument表示動(dòng)作執(zhí)行時(shí)用到的參數(shù)。

10.2.2遷移的表示遷移分四種類型(外部遷移、內(nèi)部遷移、自動(dòng)遷移和復(fù)合遷移)。下面主要介紹外部遷移的表示法。外部遷移用帶箭頭的直線表示,箭尾連接源狀態(tài)(轉(zhuǎn)出的狀態(tài)),箭頭連接目標(biāo)狀態(tài)(轉(zhuǎn)入的狀態(tài))。每個(gè)遷移可能包含三個(gè)要素: (1)0或多個(gè)事件 (2)0或多個(gè)監(jiān)護(hù)條件 (3)0或多個(gè)動(dòng)作。10.2.2遷移的表示圖10-7所示即為描述了燒水器的狀態(tài)圖。我們用該圖說(shuō)明遷移的三要素。注意:用實(shí)線箭頭表示的遷移都是外部遷移。OffOn水開(kāi)了/turnOffturnOn[有水]/燒水turnOn[沒(méi)水]燒壞圖10-7燒水器的狀態(tài)圖10.2.2遷移的表示1.源狀態(tài)2.目標(biāo)狀態(tài)3.事件事件可以分為調(diào)用、信號(hào)、改變和時(shí)間4類。10.2.2遷移的表示(1)調(diào)用事件

調(diào)用事件是一種同步機(jī)制,例如在圖10-8中,銀行賬戶(BankAccount)的三種狀態(tài)遷移圖。該圖演示了外部調(diào)用事件和內(nèi)部調(diào)用事件。圖10-8調(diào)用事件實(shí)例10.2.2遷移的表示(2)信號(hào)事件

信號(hào)是對(duì)象之間異步傳遞信息包。發(fā)送信號(hào)的對(duì)象將信號(hào)發(fā)送出去后,繼續(xù)執(zhí)行自已的操作。在計(jì)算機(jī)中的鼠標(biāo)和鍵盤操作均屬于信號(hào)事件。圖10-9演示了信號(hào)事件。圖10-9信號(hào)事件10.2.2遷移的表示(3)改變事件 改變事件是指系統(tǒng)對(duì)某個(gè)條件表達(dá)式不斷進(jìn)行的循環(huán)測(cè)試,當(dāng)該條件表達(dá)式的值由false變?yōu)閠rue時(shí),就觸發(fā)相關(guān)的動(dòng)作,同時(shí),條件表達(dá)式的值再次變?yōu)閒alse,這時(shí),系統(tǒng)又不斷測(cè)試該條件表達(dá)式的值,如此循環(huán)。圖10-10演示了改變事件。圖10-10改變事件10.2.2遷移的表示(4)時(shí)間事件 時(shí)間事件是指當(dāng)時(shí)間到達(dá)某個(gè)特點(diǎn)時(shí)刻,或某個(gè)戈值時(shí),將要觸發(fā)的事件。時(shí)間事件用關(guān)鍵字when和after表示。when表示事件觸發(fā)的特點(diǎn)時(shí)刻;after表示事件觸發(fā)的戈值時(shí)間。例如,after(2個(gè)月),when(date=08/12/20010)。 圖10-11中,是某個(gè)信貸賬戶(Credit)狀態(tài)機(jī)片段。當(dāng)賬戶遷移到狀態(tài)Overdrawn兩個(gè)月以后,時(shí)間事件被觸發(fā)(after(2months)),賬戶遷移到狀態(tài)Frozen。圖10-11時(shí)間事件10.2.2遷移的表示4.監(jiān)護(hù)條件 監(jiān)護(hù)條件是一個(gè)布爾表達(dá)式。當(dāng)觸發(fā)事件發(fā)生,并且布爾表達(dá)式的值為真時(shí),遷移才能夠完成。監(jiān)護(hù)條件寫在[]符號(hào)中。10.2.2遷移的表示5.動(dòng)作動(dòng)作分為入口動(dòng)作和出口動(dòng)作:(1)入口動(dòng)作:入口動(dòng)作表示對(duì)象進(jìn)入某個(gè)狀態(tài)時(shí)所要執(zhí)行的動(dòng)作。入口動(dòng)作用格式“entry/要執(zhí)行的動(dòng)作”表示。(2)出口動(dòng)作:出口動(dòng)作表示對(duì)象退出某個(gè)狀態(tài)時(shí)所要執(zhí)行的動(dòng)作。出口動(dòng)作用格式“exit/要執(zhí)行的動(dòng)作”表示。入口動(dòng)作和出口動(dòng)作都寫在狀態(tài)圖標(biāo)的第二欄中。10.2.2遷移的表示6.活動(dòng) 如果對(duì)象處于某個(gè)狀態(tài)進(jìn)行一些動(dòng)作,可能會(huì)需要一些時(shí)間,我們可以用活動(dòng)來(lái)描述這一系列動(dòng)作。我們?cè)跔顟B(tài)的第二欄中描述活動(dòng),其格式為“do/動(dòng)作名”。7.理解簡(jiǎn)單狀態(tài)圖 例如描述一個(gè)燒水器在工作時(shí)的行為狀態(tài)變化。10.2.3分支的表示對(duì)象在外部事件的作用下,根據(jù)監(jiān)護(hù)條件的不同值,轉(zhuǎn)向不同的目標(biāo)狀態(tài),即對(duì)象的狀態(tài)根據(jù)監(jiān)護(hù)條件的取值而發(fā)生分支。分支用空心小菱形表示,如圖10-13所示。圖10-13分支的表示10.2.3分支的表示根據(jù)監(jiān)護(hù)條件的真假可以觸發(fā)不同的分支遷移。如圖10-14所示,當(dāng)對(duì)象處于狀態(tài)1時(shí),當(dāng)某個(gè)事件作用于對(duì)象,這時(shí)就要計(jì)算監(jiān)護(hù)條件,當(dāng)條件滿足時(shí)(true),對(duì)象的狀態(tài)變?yōu)闋顟B(tài)2;當(dāng)條件不滿足時(shí)(false),對(duì)象狀態(tài)變?yōu)闋顟B(tài)3。圖10-14分支實(shí)例10.3遷移的分類遷移通常分為外部遷移、內(nèi)部遷移、自動(dòng)遷移(不需要監(jiān)護(hù)條件下,離開(kāi)原狀態(tài),然后又回到原狀態(tài))和復(fù)合遷移4種。10.3遷移的分類1.外部遷移

外部遷移是一種改變對(duì)象狀態(tài)的遷移。外部遷移用從源狀態(tài)到目標(biāo)狀態(tài)的箭頭表示。如圖10-15所示即描述了火車上衛(wèi)生間的簡(jiǎn)單狀態(tài)遷移,該衛(wèi)生間存在3個(gè)狀態(tài),包含5個(gè)外部遷移。圖10-15外部遷移10.3遷移的分類2.內(nèi)部遷移

內(nèi)部遷移是指狀態(tài)不變的情況下,事件引發(fā)的動(dòng)作。內(nèi)部遷移自始至終都不離開(kāi)源狀態(tài),所以不會(huì)產(chǎn)生入口動(dòng)作和出口動(dòng)作。因此,當(dāng)對(duì)象處于某個(gè)狀態(tài)進(jìn)行一些動(dòng)作時(shí),可以把這些動(dòng)作看成是內(nèi)部遷移。3.自動(dòng)遷移

自動(dòng)遷移指在沒(méi)有事件觸發(fā)的情況下,當(dāng)監(jiān)護(hù)條件為真時(shí)執(zhí)行某些動(dòng)作。它是離開(kāi)某個(gè)狀態(tài)后重新進(jìn)入原先的狀態(tài),它會(huì)激發(fā)狀態(tài)的入口動(dòng)作和出口動(dòng)作的執(zhí)行。10.3遷移的分類4.復(fù)合遷移 復(fù)合遷移由簡(jiǎn)單遷移組成,它通過(guò)分支判定,把多個(gè)簡(jiǎn)單遷移組合在一起,如圖10-17所示。圖10-17復(fù)合遷移10.4狀態(tài)的分類狀態(tài)機(jī)圖中的狀態(tài)分為: (1)簡(jiǎn)單狀態(tài)(2)復(fù)合狀態(tài)兩種10.4.1簡(jiǎn)單狀態(tài)簡(jiǎn)單狀態(tài)是指不包含子狀態(tài)的狀態(tài),但簡(jiǎn)單狀態(tài)可以具有內(nèi)部遷移、入口動(dòng)作和出口動(dòng)作等。如圖10-18所示便是某銷售POS機(jī)的工作流程:當(dāng)客戶到收銀臺(tái)后,收銀員逐一輸入用戶購(gòu)買的商品,輸入完之后,計(jì)算出總金額,然后等待用戶付款,確定支付成功之后,完成收銀,等待下一個(gè)客戶。10.4.2復(fù)合狀態(tài)復(fù)合狀態(tài)是指狀態(tài)本身包含一個(gè)或者多個(gè)子狀態(tài)的狀態(tài)。復(fù)合狀態(tài)中包含的多個(gè)子狀態(tài)之間的關(guān)系有兩種:一種是并發(fā)關(guān)系,另一種是互斥關(guān)系。如果子狀態(tài)是并發(fā)關(guān)系,則稱子狀態(tài)為并發(fā)子狀態(tài);如果子狀態(tài)是互斥關(guān)系,則稱子狀態(tài)為順序子狀態(tài)。10.4.2復(fù)合狀態(tài)1.順序子狀態(tài)

在圖10-19中,IC卡電話包括3個(gè)基本狀態(tài):“使用狀態(tài)”、“未使用狀態(tài)”和“維修狀態(tài)”,其中“使用狀態(tài)”是一個(gè)復(fù)合狀態(tài)。下面來(lái)看看IC電話的連接過(guò)程: 當(dāng)拿起電話打IC電話前,首先要插入IC卡,進(jìn)行IC卡的有效驗(yàn)證,驗(yàn)證通過(guò)后才可以撥打電話,此時(shí)從最初的“IC卡驗(yàn)證”狀態(tài)轉(zhuǎn)到“撥號(hào)”狀態(tài)。如果電話接通,則轉(zhuǎn)到“連接”狀態(tài);在連接狀態(tài),如果對(duì)方也拿起聽(tīng)筒,則轉(zhuǎn)入“通話”狀態(tài),通話完畢轉(zhuǎn)入“掛斷”狀態(tài);如果對(duì)方無(wú)人接聽(tīng),則轉(zhuǎn)入“掛斷”狀態(tài)。如果撥號(hào)時(shí)出現(xiàn)異常情況,則掛斷電話;如果掛斷后重新?lián)芴?hào),電話又處于“撥號(hào)”狀態(tài)。如果此時(shí)取出IC卡,則電話轉(zhuǎn)入“未使用”狀態(tài)。 “使用狀態(tài)”包含5個(gè)子狀態(tài),因?yàn)镮C電話不能同時(shí)處于兩個(gè)不同的子狀態(tài)中,所以這些子狀態(tài)是順序子狀態(tài)。10.4.2復(fù)合狀態(tài)圖10-19順序子狀態(tài)實(shí)例10.4.2復(fù)合狀態(tài)2.并發(fā)子狀態(tài) 如果復(fù)合狀態(tài)包含兩個(gè)或者多個(gè)并發(fā)的子狀態(tài)機(jī),則稱復(fù)合狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)。 下面考察一輛處于“運(yùn)行”狀態(tài)的電動(dòng)車。當(dāng)車處在運(yùn)行狀態(tài)時(shí),包含了前進(jìn)和后退兩個(gè)不同的子狀態(tài),這兩個(gè)子狀態(tài)之間的關(guān)系是順序子狀態(tài),因?yàn)橐惠v車不可能同時(shí)處于前進(jìn)和后退兩種子狀態(tài)。另一方面,車的運(yùn)行狀態(tài)又包括高速行駛狀態(tài)或者低速行駛狀態(tài),而前進(jìn)狀態(tài)可以同時(shí)為高速行駛或者低速行駛狀態(tài),后退狀態(tài)也可以是高速行駛或者低速行駛狀態(tài),即前進(jìn)狀態(tài)或后退狀態(tài)之一,可以與高速行駛狀態(tài)或低速行使?fàn)顟B(tài)之一同時(shí)存在,我們就把這些可以同時(shí)出現(xiàn)的狀態(tài)稱為并發(fā)子狀態(tài),如圖10-20所示。并發(fā)子狀態(tài)可以用于并發(fā)線程的狀態(tài)建模。10.4.2復(fù)合狀態(tài)圖10-20并發(fā)子狀態(tài)實(shí)例10.4.2復(fù)合狀態(tài)3.復(fù)合狀態(tài)表示法復(fù)合狀態(tài)的表示法有兩種。(1)將子狀態(tài)機(jī)嵌入表示狀態(tài)的圓角矩形中這種表示法是在表示狀態(tài)的圓角矩形中加入子狀態(tài)機(jī)的新分欄,如圖10-21左圖所示。圖10-21復(fù)合狀態(tài)的兩種表示法10.4.2復(fù)合狀態(tài)(2)在圓角矩形中加入復(fù)合圖標(biāo)這種表示法是在表示狀態(tài)的圓角矩形中加入分解指示符的新分欄,其中,分解指示符代表子狀態(tài)機(jī),如圖10-21下圖所示。圖10-21復(fù)合狀態(tài)的兩種表示法10.4.3歷史狀態(tài)當(dāng)遷移轉(zhuǎn)入復(fù)合狀態(tài)時(shí),被嵌套的子狀態(tài)機(jī)一般要從子狀態(tài)機(jī)的初始狀態(tài)開(kāi)始執(zhí)行,除非轉(zhuǎn)到特定的子狀態(tài)。但是有些情況下,當(dāng)離開(kāi)一個(gè)復(fù)合狀態(tài),然后重新進(jìn)入復(fù)合狀態(tài)時(shí),并不希望從復(fù)合包含的子狀態(tài)機(jī)的初始狀態(tài)開(kāi)始執(zhí)行,而是希望直接進(jìn)入上次離開(kāi)復(fù)合狀態(tài)時(shí)的最后一個(gè)活動(dòng)子狀態(tài),此時(shí)便需要用一個(gè)包含字母“H”的小圓圈表示最后一個(gè)活動(dòng)子狀態(tài),即稱為歷史狀態(tài)。每當(dāng)遷移到復(fù)合狀態(tài)的歷史狀態(tài)時(shí),對(duì)象的狀態(tài)便恢復(fù)到上次離開(kāi)該復(fù)合狀態(tài)時(shí)的最后一個(gè)活動(dòng)子狀態(tài),并執(zhí)行入口動(dòng)作

10.4.3歷史狀態(tài)下面考慮一個(gè)MP3播放器對(duì)象的狀態(tài)圖,如圖10-22所示。

圖10-22歷史狀態(tài)10.4.4子狀態(tài)機(jī)間異步通信在很多情況下,并發(fā)子狀態(tài)機(jī)之間可能需要異步通信。為了實(shí)現(xiàn)異步通訊,我們采用的策略是:一個(gè)子狀態(tài)機(jī)設(shè)置某個(gè)屬性值,在另一個(gè)子狀態(tài)機(jī)中,在某個(gè)遷移的監(jiān)護(hù)條件中使用該屬性值。10.4.4子狀態(tài)機(jī)間異步通信在圖10-23中,“訂單處理”狀態(tài)包含了2個(gè)并發(fā)的子狀態(tài)機(jī):第一個(gè)子狀態(tài)機(jī)包含兩個(gè)狀態(tài),即“接收支付”和“已支付”;第二個(gè)子狀態(tài)機(jī)也包含兩個(gè)狀態(tài),即“配貨”和“發(fā)貨”?,F(xiàn)在來(lái)看看第一個(gè)子狀態(tài)機(jī)與第二個(gè)子狀態(tài)機(jī)之間的通信方式:當(dāng)訂單進(jìn)入“已支付”狀態(tài)時(shí),paidFor的值才為true,而第二個(gè)子狀態(tài)機(jī)要想進(jìn)入“發(fā)貨”狀態(tài),其監(jiān)護(hù)條件是paidFor為true。

10.4.4子狀態(tài)機(jī)間異步通信圖10-23中可以看出,只有paidFor為真,即只有完成了“已支付”行為,才能進(jìn)入“發(fā)貨”狀態(tài)。通過(guò)paidFor,我們實(shí)現(xiàn)了兩個(gè)并發(fā)子狀態(tài)機(jī)之間的異步通訊。

圖10-23子狀態(tài)機(jī)間的通信10.4.5建立狀態(tài)機(jī)圖的步驟繪制狀態(tài)機(jī)圖的一般步驟如下:(1)尋找主要的狀態(tài)。(2)尋找外部事件,以便確定狀態(tài)之間的遷移。(3)詳細(xì)描述每個(gè)狀態(tài)和遷移。(4)把簡(jiǎn)單狀態(tài)圖遷移為復(fù)合狀態(tài)圖。

10.5狀態(tài)機(jī)圖應(yīng)用狀態(tài)機(jī)圖的主要應(yīng)用有兩種:一是在對(duì)象生命周期內(nèi),對(duì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論