第10章 狀態(tài)機(jī)圖_第1頁
第10章 狀態(tài)機(jī)圖_第2頁
第10章 狀態(tài)機(jī)圖_第3頁
第10章 狀態(tài)機(jī)圖_第4頁
第10章 狀態(tài)機(jī)圖_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、LOGOUML 統(tǒng)一建模統(tǒng)一建模第第10章章 狀態(tài)機(jī)圖狀態(tài)機(jī)圖目錄目錄101 狀態(tài)機(jī)圖的概念狀態(tài)機(jī)圖的概念102 狀態(tài)圖的表示狀態(tài)圖的表示103 轉(zhuǎn)換的分類轉(zhuǎn)換的分類104 狀態(tài)的分類狀態(tài)的分類105 建立狀態(tài)機(jī)圖建立狀態(tài)機(jī)圖106 狀態(tài)機(jī)圖應(yīng)用范圍狀態(tài)機(jī)圖應(yīng)用范圍第第10章章 狀態(tài)機(jī)圖狀態(tài)機(jī)圖狀態(tài)圖描述從狀態(tài)到狀態(tài)的控制流程,常用來對系統(tǒng)的動態(tài)特怔進(jìn)行狀態(tài)圖描述從狀態(tài)到狀態(tài)的控制流程,常用來對系統(tǒng)的動態(tài)特怔進(jìn)行建模。在大多數(shù)情況下,它用來對反應(yīng)型對象建模。在大多數(shù)情況下,它用來對反應(yīng)型對象(外部事件觸發(fā)對象外部事件觸發(fā)對象,對對象接受到事件后產(chǎn)生響應(yīng)象接受到事件后產(chǎn)生響應(yīng))的行為模型。的行為

2、模型。101 狀態(tài)機(jī)圖的概念狀態(tài)機(jī)圖的概念1.狀態(tài)機(jī)圖狀態(tài)機(jī)圖描述對象在整個生命周期內(nèi),在外部事件的作用下,從一種狀態(tài)轉(zhuǎn)換到另一種狀態(tài)的關(guān)系圖。這種圖的節(jié)點是狀態(tài)(包括初始狀態(tài)和終止?fàn)顟B(tài)),關(guān)系是轉(zhuǎn)換。圖10-1是一個典型的狀態(tài)機(jī)圖。圖圖10-1狀態(tài)機(jī)圖。狀態(tài)機(jī)圖。101 狀態(tài)機(jī)圖的概念狀態(tài)機(jī)圖的概念2.狀態(tài)機(jī)圖的作用狀態(tài)機(jī)圖常用來描述業(yè)務(wù)或軟件系統(tǒng)中的對象在外部事件的作用下,對象的狀態(tài)從一個狀態(tài)到另一個狀態(tài)的控制流。利用狀態(tài)圖可以精確地描述對象在生命周期內(nèi)的行為特征。 3狀態(tài)機(jī)圖的組成元素狀態(tài)機(jī)圖的組成元素包括:初始狀態(tài)、終止?fàn)顟B(tài)、狀態(tài)、轉(zhuǎn)換。其中,轉(zhuǎn)換將各種狀態(tài)連接在一起,構(gòu)成一個狀態(tài)圖。

3、4.狀態(tài)機(jī)在整個生命周期內(nèi),描述對象處于各種狀態(tài)的圖,該圖必須完整包括:初始狀態(tài)、終止?fàn)顟B(tài)、狀態(tài)、轉(zhuǎn)換。狀態(tài)圖不一定完整包含初始狀態(tài)、終止?fàn)顟B(tài)、狀態(tài)、轉(zhuǎn)換等狀態(tài) 。102 狀態(tài)圖的表示狀態(tài)圖的表示一個狀態(tài)圖包含的元素有初始狀態(tài)、終止?fàn)顟B(tài)、狀態(tài)、轉(zhuǎn)換、分支。下面分別描述元素的語義和表示方法。下面分別描述每個元素的表示法。1021 狀態(tài)的表示1初始狀態(tài)初始狀態(tài)代表狀態(tài)圖的起始位置,只能作為轉(zhuǎn)換的源,而不能作為轉(zhuǎn)換的目標(biāo)。初始狀態(tài)在一個狀態(tài)圖中只允許有一個,它用一個實心的圓表示,如下圖所示。2終止?fàn)顟B(tài)終止?fàn)顟B(tài)是對象的最后狀態(tài),是一個狀態(tài)圖的終止點。終止?fàn)顟B(tài)只能作為轉(zhuǎn)換的目標(biāo),而不能作為轉(zhuǎn)換的源。終止

4、狀態(tài)在一個狀態(tài)圖中可以有多個,它用一個套有一個實心圓的空心圓表示。如下圖所示。圖圖10-2 初始狀態(tài)的表示初始狀態(tài)的表示102 狀態(tài)圖的表示狀態(tài)圖的表示3狀態(tài)對象屬性值的集合標(biāo)識了一個對象的狀態(tài)。表示對象狀態(tài)的圖標(biāo)由一個帶圓角的矩形表示。它包含個三部分:圖圖10-3 終止?fàn)顟B(tài)的表示終止?fàn)顟B(tài)的表示102 狀態(tài)圖的表示狀態(tài)圖的表示名稱:給對象所處狀態(tài)取的名字,名字用一個字符串表示,在一個圖中,名字應(yīng)該是唯一的。內(nèi)部轉(zhuǎn)換:對象響應(yīng)外部事件所執(zhí)行的動作。內(nèi)部轉(zhuǎn)換發(fā)生時,不改變對象的狀態(tài),但是,當(dāng)進(jìn)入該狀態(tài)時,可以包含進(jìn)入動作;當(dāng)退出該狀態(tài)時,可以包含退出動作。我們把內(nèi)部轉(zhuǎn)換標(biāo)識在狀態(tài)框的第二欄;用一條

5、實線箭頭來標(biāo)識外部轉(zhuǎn)換,外部轉(zhuǎn)換是指一種狀態(tài)到另一種狀態(tài)的轉(zhuǎn)換。嵌套狀態(tài) :狀態(tài)圖中的狀態(tài)可以包含兩種狀態(tài):一種是簡單狀態(tài),簡單狀態(tài)不包含其它狀態(tài);一種是組合狀態(tài),組合狀態(tài)包含了子狀態(tài)。即狀態(tài)圖的某些狀態(tài)本身也是狀態(tài)圖。圖圖10-4 狀態(tài)視圖的表示狀態(tài)視圖的表示102 狀態(tài)圖的表示狀態(tài)圖的表示1022 轉(zhuǎn)換的表示轉(zhuǎn)換是指對象在外部事件的作用下,當(dāng)滿足特定的條件時,對象執(zhí)行一定的動作,進(jìn)入目標(biāo)狀態(tài)。轉(zhuǎn)換用帶箭頭的直線表示,箭尾連接源狀態(tài)(轉(zhuǎn)出的狀態(tài)),箭頭連接目標(biāo)狀態(tài)(轉(zhuǎn)入的狀態(tài))。轉(zhuǎn)換關(guān)系到的內(nèi)容包括:源狀態(tài)、目標(biāo)狀態(tài)、外部事件、監(jiān)護(hù)條件和執(zhí)行的動作。下圖描述了燒水器的狀態(tài)圖。注意:用實線箭頭

6、表示的轉(zhuǎn)換都是外部轉(zhuǎn)換。1源狀態(tài)對于一個轉(zhuǎn)換來說,轉(zhuǎn)換前對象所處的狀態(tài),就是源狀態(tài)。源狀態(tài)是個相對的概念,即,相對當(dāng)前狀態(tài)而言,它的前一個狀態(tài)就是源狀態(tài)。圖圖10-5 燒水器的狀態(tài)圖燒水器的狀態(tài)圖102 狀態(tài)圖的表示狀態(tài)圖的表示2.目標(biāo)狀態(tài)轉(zhuǎn)換完成后,對象所處的狀態(tài)就是目標(biāo)狀態(tài) 。當(dāng)前狀態(tài)相對它的前一個狀態(tài)而言,當(dāng)前狀態(tài)就是目標(biāo)狀態(tài)。源狀態(tài)和目標(biāo)狀態(tài)都是相對某個轉(zhuǎn)換而言的。3.事件事件就是外部作用于一個對象,能夠觸發(fā)對象狀態(tài)改變的一種現(xiàn)象。事件可以分為調(diào)用、改變、信號、時間四類事件。1).信號事件對象之間通過發(fā)送信號和接收信號實現(xiàn)通信。信號是一種異步機(jī)制。在計算機(jī)中,鼠標(biāo)和鍵盤的操作均屬于此類

7、事件。對于一個信號而言,對象一般都有相應(yīng)的事件處理器,如onMouseClick()等。2).調(diào)用事件調(diào)用某個對象的成員方法就是調(diào)用事件,它是一種同步的機(jī)制。例如在圖10-5中,turnOn就是一種調(diào)用事件,用來將開關(guān)置于“On”狀態(tài)。102 狀態(tài)圖的表示狀態(tài)圖的表示3).改變事件改變事件是指某個指定屬性值為真時,事件得到觸發(fā)。它與監(jiān)護(hù)條件不同,在對象生命周期內(nèi),一直在計算改變事件中的屬性值,當(dāng)屬性值為真時,事件觸發(fā),計算停止。4).時間事件當(dāng)時間流逝到某個時刻,觸發(fā)事件對對象起作用。時間事件代表時間的流逝。它可以指定為絕對形式(每天的某時,例如after(12:00),也可以指定為相對形式(

8、從某一指定事件發(fā)生開始所經(jīng)過的時間,例如after(2seconds)。對于前一種形式,也可以使用變化事件來描述:when(12:00)。102 狀態(tài)圖的表示狀態(tài)圖的表示5).延遲事件延遲事件是指對象處在在本狀態(tài)時外部事件產(chǎn)生了,但沒有執(zhí)行事件,要推遲到另外一個狀態(tài)才執(zhí)行的事件。例如,當(dāng)E-mail程序中正在發(fā)送第一封郵件時,用戶下達(dá)發(fā)送第二封郵件執(zhí)令(事件)就會被延遲,但第一封郵件發(fā)送完成后,這封郵件就會被發(fā)送。這種事件就屬于延遲事件。4.監(jiān)護(hù)條件監(jiān)護(hù)條件是一個布爾表達(dá)式,當(dāng)布爾表達(dá)式的值為真時,轉(zhuǎn)換才能夠完成。只有在觸發(fā)事件發(fā)生時,才計算一次監(jiān)護(hù)條件的值,當(dāng)監(jiān)護(hù)條件的值為真時,轉(zhuǎn)換才發(fā)生。

9、如果轉(zhuǎn)換發(fā)生后,監(jiān)護(hù)條件才由假變?yōu)檎?,那么轉(zhuǎn)換也不會被觸發(fā)。 102 狀態(tài)圖的表示狀態(tài)圖的表示5動作當(dāng)轉(zhuǎn)換被激活后,如果定義了相應(yīng)的動作,那么就將執(zhí)行這個動作。動作可以是一個賦值語句、簡單的算術(shù)運(yùn)算、發(fā)送信號、調(diào)用操作、創(chuàng)建和銷毀對象、讀取和設(shè)置屬性的值,甚至是一個包含多個動作的活動。例如,在圖10-5中,當(dāng)turnOn事件發(fā)生,就測試監(jiān)護(hù)條件有水,如果有水,就會執(zhí)行“燒水”的動作。動作分為入口動作和出口動作。當(dāng)轉(zhuǎn)換發(fā)生時,進(jìn)入某個狀態(tài)時發(fā)生的動作稱為入口動作;離開某個狀態(tài)時發(fā)生的動作稱為出口動作。1).入口動作入口動作表示對象進(jìn)入某個狀態(tài)所要執(zhí)行的動作。入口動作用“entry/要執(zhí)行的動作”

10、表示。102 狀態(tài)圖的表示狀態(tài)圖的表示2). 出口動作出口動作表示對象退出某個狀態(tài)所要執(zhí)行的動作。出口動作用“exit/要執(zhí)行的動作”表示。 入口動作和出口動作都標(biāo)識在狀態(tài)視圖的第二欄中。6活動當(dāng)對象處于一個狀態(tài)時,它一般是空閑的,在等待一個事件的發(fā)生。但是某些時間,對象正在執(zhí)行一序列動作,即,對象做著某些工作,并一直繼續(xù)到被某個外部事件的到來,才中斷這些工作,我們把對象處于某個狀態(tài)時進(jìn)行的一序列動作稱為活動。如果對象處于某個狀態(tài)進(jìn)行一些動作,可能會需要一些時間,我們可以用活動來描述這一序列動作。表示活動的方法是,在狀態(tài)的轉(zhuǎn)換分欄中添加一行“活動描述”,其格式為“do/動作名”。 活動用來描述

11、對象處于某個狀態(tài)時,對象進(jìn)行的一序列動作。102 狀態(tài)圖的表示狀態(tài)圖的表示7理解簡單狀態(tài)圖例如,我們描述一個燒水器在工作時的行為狀態(tài)變化??梢圆捎萌鐖D10-6所示進(jìn)行描述。圖圖10-6 燒水器的狀態(tài)變化圖燒水器的狀態(tài)變化圖102 狀態(tài)圖的表示狀態(tài)圖的表示對上圖的說明如下:與狀態(tài)off相關(guān)的轉(zhuǎn)換有兩個,其觸發(fā)事件都是turnOn,只不過其監(jiān)護(hù)條件不同。如果對象收到事件turnOn,那么將判斷壺中是否有水;如果沒水,則仍然處于off狀態(tài);如果有水則轉(zhuǎn)為on狀態(tài),并執(zhí)行“燒水”動作而與狀態(tài)on相關(guān)的轉(zhuǎn)換也有兩個,如果“水開了”就執(zhí)行turnOff動作,關(guān)掉開關(guān);如果燒壞了,就進(jìn)入了終態(tài)了 102 狀

12、態(tài)圖的表示狀態(tài)圖的表示從圖10-6中不難看出,在一張狀態(tài)機(jī)圖中,最為核心的元素?zé)o外乎有兩個:一個是用圓角矩形表示的狀態(tài)(初態(tài)和終態(tài)例外);另一個是轉(zhuǎn)換。在前面已經(jīng)說過了狀態(tài)的含義和表示法,在此重點理解“轉(zhuǎn)換”的含義和表示法。1023 分支的表示對象在外部事件的作用下,根據(jù)監(jiān)護(hù)條件的不同值,轉(zhuǎn)向不同的目標(biāo)狀態(tài)。即,對象的狀態(tài)根據(jù)監(jiān)護(hù)條件的取值而發(fā)生分支。分支用空心小菱形表示。根據(jù)監(jiān)護(hù)條件的真假可以觸發(fā)不同的分支轉(zhuǎn)換。圖圖10-7分支的表示分支的表示102 狀態(tài)圖的表示狀態(tài)圖的表示圖10-8說明,當(dāng)對象處于狀態(tài)1時,當(dāng)某個事件作用于對象,這時,就要計算監(jiān)護(hù)條件,當(dāng)條件滿足時(true),對象的狀態(tài)

13、變?yōu)闋顟B(tài)2;當(dāng)條件不滿足時(false),對象狀態(tài)變?yōu)闋顟B(tài)3。轉(zhuǎn)換表示當(dāng)一個外部事件作用于對象,在監(jiān)護(hù)條件得到滿足時,對象在源狀態(tài)下執(zhí)行一序列的動作后,轉(zhuǎn)向目標(biāo)狀態(tài)。 轉(zhuǎn)換進(jìn)入的狀態(tài)稱為活動狀態(tài),轉(zhuǎn)換離開的狀態(tài)變變?yōu)榉腔顒訝顟B(tài)。 轉(zhuǎn)換通常分為外部轉(zhuǎn)換、內(nèi)部轉(zhuǎn)換、 自動轉(zhuǎn)換、 復(fù)合轉(zhuǎn)換4種。狀態(tài)1狀態(tài)2狀態(tài)3 滿足監(jiān)護(hù)條件 不滿足監(jiān)護(hù)條件 圖圖10-8分支實例分支實例103 轉(zhuǎn)換的分類轉(zhuǎn)換的分類1外部轉(zhuǎn)換外部轉(zhuǎn)換是一種改變對象狀態(tài)的轉(zhuǎn)換,是最常見的一種轉(zhuǎn)換。外部轉(zhuǎn)換用從源狀態(tài)到目標(biāo)狀態(tài)的箭頭表示。圖10-9描述了火車上衛(wèi)生間的簡單狀態(tài)轉(zhuǎn)換。該衛(wèi)生間存在三個狀態(tài),包含5個外部轉(zhuǎn)換。 圖圖10-9

14、外部轉(zhuǎn)換外部轉(zhuǎn)換UsedUnusedMaintainingThe train stopThe train go runningSomebody go intoSomebody go intoSomebody go out103 轉(zhuǎn)換的分類轉(zhuǎn)換的分類2內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換有一個源狀態(tài)但是沒有目標(biāo)狀態(tài),它轉(zhuǎn)換后的狀態(tài)仍舊是它本身。內(nèi)部轉(zhuǎn)換自始至終都不離開源狀態(tài),所以沒有入口動作和出口動作。因此,當(dāng)對象處于某個狀態(tài),進(jìn)行的一些動作時,我們可以把這些動作看成是內(nèi)部轉(zhuǎn)換。在圖10-10中,在第二欄,描述了入口動作和出口動作,也描述了內(nèi)部轉(zhuǎn)換,要注意的是,入口動作和出口動作描述的是外部轉(zhuǎn)換時發(fā)生的動作;內(nèi)部轉(zhuǎn)

15、換是描述本狀態(tài)沒有發(fā)生改變的情況下,發(fā)生的動作。圖圖10-10內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換104 狀態(tài)的分類狀態(tài)的分類3自動轉(zhuǎn)換在沒有外部事件的作用下,對象執(zhí)行了某些活動后,自然而然地完成的轉(zhuǎn)換。自轉(zhuǎn)換是離開某個狀態(tài)后重新進(jìn)入原先的狀態(tài),它會激發(fā)狀態(tài)的入口動作和出口動作的執(zhí)行。4復(fù)合轉(zhuǎn)換復(fù)合轉(zhuǎn)換由簡單轉(zhuǎn)換組成,通過分支判定,把多個簡單轉(zhuǎn)換組合在一起。圖10-11 復(fù)合轉(zhuǎn)換NewStateNewState2NewState3NewState4NewState5Event1 Condition1 / Action1 Condition2 / Action2 Condition3 / Action3 Condi

16、tion4 / Action4 Condition5 / Action5 Condition6 / Action6104 狀態(tài)的分類狀態(tài)的分類狀態(tài)機(jī)圖中的狀態(tài)分為簡單狀態(tài)和復(fù)合狀態(tài)2種。1041 簡單狀態(tài)簡單狀態(tài)是指不包含其他狀態(tài)的狀態(tài)。但是,簡單狀態(tài)可以具有內(nèi)部轉(zhuǎn)換、入口動作和出口動作等。 下圖10-12是燒水器的狀態(tài)圖,它只包含2個簡單狀態(tài)。圖圖10-12 燒水器的狀態(tài)圖燒水器的狀態(tài)圖104 狀態(tài)的分類狀態(tài)的分類1042 復(fù)合狀態(tài)復(fù)合狀態(tài)是指狀態(tài)本身包含一到多個子狀態(tài)機(jī)的狀態(tài)。復(fù)合狀態(tài)中包含的多個子狀態(tài)之間的關(guān)系有兩種:一種是并發(fā)關(guān)系,另一種是互斥關(guān)系。如果子狀態(tài)是并發(fā)關(guān)系,我們稱子狀態(tài)為

17、并發(fā)子狀態(tài);如果子狀態(tài)是互斥關(guān)系,我們稱子狀態(tài)為順序子狀態(tài)。1. 順序子狀態(tài)在任何時刻,當(dāng)復(fù)合狀態(tài)被激活時,如果復(fù)合狀態(tài)包含的多個子狀態(tài)中,只能有一個子狀態(tài)處于活動狀態(tài),即多個子狀態(tài)之間是互斥的,這種子狀態(tài)稱為順序子狀態(tài)。復(fù)合狀態(tài)的子狀態(tài)如果是順序子狀態(tài),那么,復(fù)合狀態(tài)只包含一個狀態(tài)機(jī)。104 狀態(tài)的分類狀態(tài)的分類在圖10-13中, IC卡電話包括3 個基本狀態(tài):“使用狀態(tài)”、“未使用狀態(tài)”和“維修狀態(tài)”。其中“使用狀態(tài)”狀態(tài)是一個復(fù)合狀態(tài)。下面我們來看看IC電話的連接過程:當(dāng)拿起電話打IC電話的時候,首先要插入IC卡,進(jìn)行IC卡的有效驗證,驗證通過才可以撥打電話,此時從最初的“IC卡驗證”狀

18、態(tài)轉(zhuǎn)到“撥號”狀態(tài)。如果電話接通,則轉(zhuǎn)到“連接”狀態(tài);在連接狀態(tài),如果對方也拿起聽筒,則轉(zhuǎn)入“通話”狀態(tài),通話完畢轉(zhuǎn)入“掛斷”狀態(tài);如果對方無人接聽。則轉(zhuǎn)入“掛斷”狀態(tài)。如果撥號時出現(xiàn)異常情況,則掛斷電話;如果掛斷后重新?lián)芴?,電話又處于“撥號”狀態(tài)。如果此時取出IC卡,則IC電話轉(zhuǎn)入“未使用”狀態(tài)?!拔词褂脿顟B(tài)”包含5個子狀態(tài),因為IC電話不能同時處于兩個不同的子狀態(tài)中,所以這些子狀態(tài)是順序子狀態(tài)。104 狀態(tài)的分類狀態(tài)的分類圖圖10-13 順序子狀態(tài)實例順序子狀態(tài)實例104 狀態(tài)的分類狀態(tài)的分類2. 并發(fā)子狀態(tài)如果復(fù)合狀態(tài)包含兩個或者多個并發(fā)的子狀態(tài)機(jī),此時稱復(fù)合狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)。

19、考察一輛處于“運(yùn)行”狀態(tài)的電動車。車處在運(yùn)行狀態(tài)時,包含了前進(jìn)和后退兩個不同的子狀態(tài),這兩個子狀態(tài)之間的關(guān)系看,它們就是順序子狀態(tài),因為一輛車不可能同時處于前進(jìn)和后退兩種子狀態(tài);另一方面,車的運(yùn)行狀態(tài)又包括高速行駛狀態(tài)和低速行駛狀態(tài)。前進(jìn)狀態(tài)可以同時為高速行駛或者低速行駛狀態(tài);后退狀態(tài)時,也可以是高速行駛或者低速行駛狀態(tài),即,前進(jìn)狀態(tài)或后退狀態(tài)之一,可以與高速行駛狀態(tài)或低速行使?fàn)顟B(tài)之一同時存在。我們把這些可以同時出現(xiàn)的狀態(tài)稱為并發(fā)子狀態(tài),如圖10-14所示。并發(fā)子狀態(tài)可以用于并發(fā)線程的狀態(tài)建模。圖圖10-14 并發(fā)子狀態(tài)實例并發(fā)子狀態(tài)實例104 狀態(tài)的分類狀態(tài)的分類3復(fù)合狀態(tài)表示法圖10-4是

20、簡單狀態(tài)的表示法,簡單狀態(tài)不包含子狀態(tài)。復(fù)合狀態(tài)包含了一個或多個嵌套的狀態(tài)機(jī),復(fù)合狀態(tài)所包含的狀態(tài)被稱為子狀態(tài)。復(fù)合狀態(tài)的表示法有2兩種。(1). 將子狀態(tài)機(jī)嵌入表示狀態(tài)的圓角矩形中這種表示法是在表示狀態(tài)的圓角矩形中加入子狀態(tài)機(jī)的新分欄,如圖10-15的左圖所示。圖圖10-15復(fù)合狀態(tài)的兩種表示法復(fù)合狀態(tài)的兩種表示法104 狀態(tài)的分類狀態(tài)的分類(2).在圓角矩形中加入加分解指示符這種表示法是在表示狀態(tài)的圓角矩形中加入分解指示符的新分欄,其中,分解指示符表示子狀態(tài)機(jī),如圖10-15的右所示。我們把復(fù)合狀態(tài)稱為父狀態(tài)。每個子狀態(tài)繼承了父狀態(tài)的全部轉(zhuǎn)換。每個復(fù)合狀態(tài)的區(qū)域可能具有一個初始狀態(tài)。進(jìn)入復(fù)

21、合狀態(tài)邊界的轉(zhuǎn)換,也就是進(jìn)入初始狀態(tài)上的轉(zhuǎn)換;類似地,復(fù)合狀態(tài)也可以有終態(tài)。到了終態(tài)的轉(zhuǎn)換會觸發(fā)復(fù)合狀態(tài)上的完成轉(zhuǎn)換。1043 歷史狀態(tài)當(dāng)狀態(tài)機(jī)通過轉(zhuǎn)換從某種狀態(tài)轉(zhuǎn)入復(fù)合狀態(tài)時,被嵌套的子狀態(tài)機(jī)一般要從子狀態(tài)機(jī)的初始狀態(tài)開始執(zhí)行,除非轉(zhuǎn)到特定的子狀態(tài)。但是有些情況下,當(dāng)離開一個復(fù)合狀態(tài),然后重新進(jìn)入復(fù)合狀態(tài)時,并不希望從復(fù)合包含的子狀態(tài)機(jī)的初始狀態(tài)開始執(zhí)行,而是希望直接進(jìn)入上次離開復(fù)合狀態(tài)時的最后一個活動子狀態(tài),我們用一個包含字母“H”的小圓圈表示最后一個活動子狀態(tài),即,稱為歷史狀態(tài)。每當(dāng)轉(zhuǎn)換到復(fù)合狀態(tài)的歷史狀態(tài)時,對象的狀態(tài)便恢復(fù)到上次離開該復(fù)合狀態(tài)時的最后一個活動子狀態(tài),并執(zhí)行入口動作。1

22、04 狀態(tài)的分類狀態(tài)的分類考慮一個MP3播放器對象的狀態(tài)圖,如圖10-16所示。圖圖10-16 歷史狀態(tài)歷史狀態(tài)104 狀態(tài)的分類狀態(tài)的分類從上圖中可以看出,MP3播放器對象的復(fù)合狀態(tài)“活動”狀態(tài)包含4個嵌套子狀態(tài):“停止”、“播放”、“前進(jìn)”、“后退”狀態(tài),如果用戶按下了“暫?!卑粹o,活動狀態(tài)被打斷而進(jìn)入暫停狀態(tài);當(dāng)用戶撤銷暫停,恢復(fù)播放器的活動狀態(tài)時,MP3播放器對象直接進(jìn)入歷史狀態(tài),此時將進(jìn)入播放器上一次離開活動狀態(tài)時的子狀態(tài)。例如當(dāng)用戶在播放狀態(tài)按下暫停按鈕,當(dāng)恢復(fù)播放時,播放器仍進(jìn)入播放狀態(tài)。104 狀態(tài)的分類狀態(tài)的分類1044 子狀態(tài)機(jī)間實現(xiàn)通信在并發(fā)復(fù)合狀態(tài)中,子狀態(tài)機(jī)之間可能會

23、需要通信。要表示這些通信,當(dāng)然可以借助于監(jiān)護(hù)條件、狀態(tài)間的事件來描述,但有時更希望采用異步模式來描述它。在UML1.0中,采用屬性和基于同步點兩種方法來實現(xiàn)子狀態(tài)機(jī)間的通訊,但在UML2.0中已經(jīng)廢棄了同步狀態(tài)這一方法。在圖10-17中,狀態(tài)“課程評價”包含了三個并發(fā)的子狀態(tài)機(jī):第一個子狀態(tài)機(jī)包含兩個狀態(tài),即“實驗1”和“實驗2”;第二個子狀態(tài)機(jī)包含一個狀態(tài),即“團(tuán)隊項目”;第三個子狀態(tài)機(jī)包含一個狀態(tài),即“考試”。現(xiàn)在來看看第一個子狀態(tài)機(jī)與第二個子狀態(tài)機(jī)之間的通訊方式:選修該課程的學(xué)生必須先完成“實驗1”才能進(jìn)入子狀態(tài)“團(tuán)隊項目”,那么可以通過一個屬性來表達(dá)兩個子狀態(tài)之間的這種邏輯。104 狀

24、態(tài)的分類狀態(tài)的分類圖圖10-17 子狀態(tài)機(jī)間的通信子狀態(tài)機(jī)間的通信圖10-17中,在實驗1中添加了一個退出動作,使其退出該狀態(tài)時將屬性lab的值設(shè)置為true,再將lab作為另一個子狀態(tài)“團(tuán)隊項目”執(zhí)行的監(jiān)護(hù)條件,這樣就可以保證在實驗1完成之后才能進(jìn)入子狀態(tài)”團(tuán)隊項目”。105 建立狀態(tài)機(jī)圖建立狀態(tài)機(jī)圖前面已經(jīng)闡述了狀態(tài)機(jī)圖的基本組成,引入了內(nèi)部轉(zhuǎn)換、狀態(tài)的進(jìn)入和退出動作、活動、延遲事件等等;最后還介紹了各種復(fù)合狀態(tài)。下面以一個航班機(jī)票預(yù)訂的例子來說明狀態(tài)機(jī)圖的繪制過程。繪制狀態(tài)機(jī)圖的一般步驟是:1尋找主要的狀態(tài),2尋找外部事件,以便確定狀態(tài)之間的轉(zhuǎn)換3詳細(xì)描述每個狀態(tài)和轉(zhuǎn)換105 建立狀態(tài)機(jī)

25、圖建立狀態(tài)機(jī)圖4.把簡單狀態(tài)圖轉(zhuǎn)換為復(fù)合狀態(tài)圖。1051 尋找主要狀態(tài)在繪制狀態(tài)機(jī)圖時,第一步就是尋找出主要的狀態(tài)。對于航班機(jī)票預(yù)訂系統(tǒng)而言,我們把飛機(jī)票看作一個整體,我們來看飛機(jī)票有哪幾種狀態(tài),以及有哪些事件觸發(fā)機(jī)票狀態(tài)的變化。1確定狀態(tài)飛機(jī)票有以下4種狀態(tài):無預(yù)訂、部分預(yù)訂、預(yù)訂完、預(yù)訂關(guān)閉。(1)在剛確定飛行計劃時,顯然時沒有任何預(yù)訂的,并且在顧客預(yù)訂機(jī)票之前都將處于這種“無預(yù)訂”狀態(tài)。105 建立狀態(tài)機(jī)圖建立狀態(tài)機(jī)圖(2)對于訂座而言,顯然有“部分預(yù)訂”和“預(yù)訂完”兩種狀態(tài)。(3)當(dāng)航班快要起飛時,顯然要“預(yù)訂關(guān)閉”。2尋找外部事件無論機(jī)票處于那種狀態(tài),可能有的外部事件有:(1)預(yù)訂(

26、):顧客預(yù)訂機(jī)票。(2)退訂():顧客退訂機(jī)票。(3)關(guān)閉():機(jī)票管理員關(guān)閉訂票系統(tǒng)。 (4) 取消航班():飛機(jī)調(diào)度人員取消飛行計劃。1052 確定狀態(tài)間的轉(zhuǎn)換我們已經(jīng)知道了機(jī)票的主要狀態(tài),也知道了改變機(jī)票狀態(tài)變化的外部事件?,F(xiàn)在我們分析狀態(tài)之間的轉(zhuǎn)換(這里指外部轉(zhuǎn)換)。即,確定當(dāng)機(jī)票處于這一狀態(tài)時,哪些外部事件能真正改變機(jī)票狀態(tài),哪些事件對本狀態(tài)不起作用??梢圆捎帽砀竦姆绞絹磉M(jìn)行分析,如表10-1所示。105 建立狀態(tài)機(jī)圖建立狀態(tài)機(jī)圖 通過上述分析,確定了狀態(tài)之間的有效轉(zhuǎn)換,在此基礎(chǔ)上可以繪制出相應(yīng)的狀態(tài)機(jī)圖,如圖10-18所示。源目標(biāo)源目標(biāo)無預(yù)訂無預(yù)訂部分預(yù)部分預(yù)訂訂預(yù)訂完預(yù)訂完預(yù)訂關(guān)

27、閉預(yù)訂關(guān)閉無預(yù)訂 預(yù)訂()不直接轉(zhuǎn)換關(guān)閉()部分預(yù)訂退訂()事件發(fā)生后,使預(yù)訂人=0 預(yù)訂(),無空座關(guān)閉()預(yù)訂完不直接轉(zhuǎn)換退訂() 關(guān)閉()預(yù)訂關(guān)閉無轉(zhuǎn)換無轉(zhuǎn)換無轉(zhuǎn)換 圖圖10-18 機(jī)票預(yù)訂系統(tǒng)的初步狀態(tài)圖機(jī)票預(yù)訂系統(tǒng)的初步狀態(tài)圖表10-1 事件與狀態(tài)轉(zhuǎn)換105 建立狀態(tài)機(jī)圖建立狀態(tài)機(jī)圖對圖10-18的說明如下:1起初,剛確定航班時,機(jī)票無人訂,機(jī)票處在“無預(yù)訂”狀態(tài);當(dāng)有顧客預(yù)訂機(jī)票時,機(jī)票處在“部分預(yù)訂”狀態(tài);當(dāng)有人退訂時,如果退訂時“退訂數(shù)等于已預(yù)訂數(shù)”,那么退訂后狀態(tài)將回到“無預(yù)訂”狀態(tài)。 2在部分預(yù)訂狀態(tài)時,如果再發(fā)生預(yù)訂,而且“預(yù)訂數(shù)=空位數(shù)”,那么將訂完所有的位置,因此將進(jìn)入 “預(yù)訂完” 狀態(tài)。3當(dāng)機(jī)票處在 “預(yù)訂完” 狀態(tài)時,只要有人退訂,就必將轉(zhuǎn)為 “部分預(yù)訂” 狀態(tài)。1053 詳細(xì)描述每個狀態(tài)和轉(zhuǎn)換前面已經(jīng)確定了各個狀態(tài)之間的外部轉(zhuǎn)換,為了詳細(xì)描述狀態(tài),我們給狀態(tài)添加內(nèi)部轉(zhuǎn)換、外部轉(zhuǎn)換時的進(jìn)入和退出動作,以及相關(guān)的活動等。例如,在這個例子中,還存在下一些內(nèi)部轉(zhuǎn)換和活動:105 建立狀態(tài)機(jī)圖建立狀態(tài)機(jī)圖1機(jī)票處在 “部分預(yù)訂” 狀態(tài)時,當(dāng)發(fā)生退訂事件

溫馨提示

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

最新文檔

評論

0/150

提交評論