版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGEPAGE145第10章狀態(tài)機圖狀態(tài)圖描述從狀態(tài)到狀態(tài)的控制流程,常用來對系統(tǒng)的動態(tài)特怔進行建模。在大多數(shù)情況下,它用來對反應(yīng)型對象(外部事件觸發(fā)對象,對象接受到事件后產(chǎn)生響應(yīng))的行為模型。10.1狀態(tài)機圖的概念10.1.1狀態(tài)機圖狀態(tài)機圖描述對象在整個生命周期內(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)機圖。圖10-1狀態(tài)機圖。10.1.2狀態(tài)機圖的作用狀態(tài)機圖常用來描述業(yè)務(wù)或軟件系統(tǒng)中的對象在外部事件的作用下,對象的狀態(tài)從一個狀態(tài)到另一個狀態(tài)的控制流。利用狀態(tài)圖可以精確地描述對象在生命周期內(nèi)的行為特征。10.1.3狀態(tài)機圖的組成元素狀態(tài)機圖的組成元素包括:初始狀態(tài)、終止?fàn)顟B(tài)、狀態(tài)、轉(zhuǎn)換。其中,轉(zhuǎn)換將各種狀態(tài)連接在一起,構(gòu)成一個狀態(tài)圖。10.1.4狀態(tài)機在整個生命周期內(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)。10.2狀態(tài)圖的表示一個狀態(tài)圖包含的元素有初始狀態(tài)、終止?fàn)顟B(tài)、狀態(tài)、轉(zhuǎn)換、分支。下面分別描述元素的語義和表示方法。下面分別描述每個元素的表示法。10.2.1狀態(tài)的表示1.初始狀態(tài)初始狀態(tài)代表狀態(tài)圖的起始位置,只能作為轉(zhuǎn)換的源,而不能作為轉(zhuǎn)換的目標。初始狀態(tài)在一個狀態(tài)圖中只允許有一個,它用一個實心的圓表示,如下圖所示。圖10-2初始狀態(tài)的表示2.終止?fàn)顟B(tài)終止?fàn)顟B(tài)是對象的最后狀態(tài),是一個狀態(tài)圖的終止點。終止?fàn)顟B(tài)只能作為轉(zhuǎn)換的目標,而不能作為轉(zhuǎn)換的源。終止?fàn)顟B(tài)在一個狀態(tài)圖中可以有多個,它用一個套有一個實心圓的空心圓表示。如下圖所示。圖10-3終止?fàn)顟B(tài)的表示3.狀態(tài)對象屬性值的集合標識了一個對象的狀態(tài)。表示對象狀態(tài)的圖標由一個帶圓角的矩形表示。它包含個三部分:名稱:給對象所處狀態(tài)取的名字,名字用一個字符串表示,在一個圖中,名字應(yīng)該是唯一的。內(nèi)部轉(zhuǎn)換:對象響應(yīng)外部事件所執(zhí)行的動作。內(nèi)部轉(zhuǎn)換發(fā)生時,不改變對象的狀態(tài),但是,當(dāng)進入該狀態(tài)時,可以包含進入動作;當(dāng)退出該狀態(tài)時,可以包含退出動作。我們把內(nèi)部轉(zhuǎn)換標識在狀態(tài)框的第二欄;用一條實線箭頭來標識外部轉(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)視圖的表示10.2.2轉(zhuǎn)換的表示轉(zhuǎn)換是指對象在外部事件的作用下,當(dāng)滿足特定的條件時,對象執(zhí)行一定的動作,進入目標狀態(tài)。轉(zhuǎn)換用帶箭頭的直線表示,箭尾連接源狀態(tài)(轉(zhuǎn)出的狀態(tài)),箭頭連接目標狀態(tài)(轉(zhuǎn)入的狀態(tài))。轉(zhuǎn)換關(guān)系到的內(nèi)容包括:源狀態(tài)、目標狀態(tài)、外部事件、監(jiān)護條件和執(zhí)行的動作。下圖描述了燒水器的狀態(tài)圖。注意:用實線箭頭表示的轉(zhuǎn)換都是外部轉(zhuǎn)換。圖10-5燒水器的狀態(tài)圖源狀態(tài)對于一個轉(zhuǎn)換來說,轉(zhuǎn)換前對象所處的狀態(tài),就是源狀態(tài)。源狀態(tài)是個相對的概念,即,相對當(dāng)前狀態(tài)而言,它的前一個狀態(tài)就是源狀態(tài)。目標狀態(tài)轉(zhuǎn)換完成后,對象所處的狀態(tài)就是目標狀態(tài)。當(dāng)前狀態(tài)相對它的前一個狀態(tài)而言,當(dāng)前狀態(tài)就是目標狀態(tài)。源狀態(tài)和目標狀態(tài)都是相對某個轉(zhuǎn)換而言的。事件事件就是外部作用于一個對象,能夠觸發(fā)對象狀態(tài)改變的一種現(xiàn)象。事件可以分為調(diào)用、改變、信號、時間四類事件。1).信號事件對象之間通過發(fā)送信號和接收信號實現(xiàn)通信。信號是一種異步機制。在計算機中,鼠標和鍵盤的操作均屬于此類事件。對于一個信號而言,對象一般都有相應(yīng)的事件處理器,如onMouseClick()等。2).調(diào)用事件調(diào)用某個對象的成員方法就是調(diào)用事件,它是一種同步的機制。例如在圖10-5中,turnOn就是一種調(diào)用事件,用來將開關(guān)置于“On”狀態(tài)。3).改變事件改變事件是指某個指定屬性值為真時,事件得到觸發(fā)。它與監(jiān)護條件不同,在對象生命周期內(nèi),一直在計算改變事件中的屬性值,當(dāng)屬性值為真時,事件觸發(fā),計算停止。4).時間事件當(dāng)時間流逝到某個時刻,觸發(fā)事件對對象起作用。時間事件代表時間的流逝。它可以指定為絕對形式(每天的某時,例如after(12:00)),也可以指定為相對形式(從某一指定事件發(fā)生開始所經(jīng)過的時間,例如after(2seconds))。對于前一種形式,也可以使用變化事件來描述:when(12:00)。5).延遲事件延遲事件是指對象處在在本狀態(tài)時外部事件產(chǎn)生了,但沒有執(zhí)行事件,要推遲到另外一個狀態(tài)才執(zhí)行的事件。例如,當(dāng)E-mail程序中正在發(fā)送第一封郵件時,用戶下達發(fā)送第二封郵件執(zhí)令(事件)就會被延遲,但第一封郵件發(fā)送完成后,這封郵件就會被發(fā)送。這種事件就屬于延遲事件。監(jiān)護條件監(jiān)護條件是一個布爾表達式,當(dāng)布爾表達式的值為真時,轉(zhuǎn)換才能夠完成。只有在觸發(fā)事件發(fā)生時,才計算一次監(jiān)護條件的值,當(dāng)監(jiān)護條件的值為真時,轉(zhuǎn)換才發(fā)生。如果轉(zhuǎn)換發(fā)生后,監(jiān)護條件才由假變?yōu)檎?,那么轉(zhuǎn)換也不會被觸發(fā)。動作當(dāng)轉(zhuǎn)換被激活后,如果定義了相應(yīng)的動作,那么就將執(zhí)行這個動作。動作可以是一個賦值語句、簡單的算術(shù)運算、發(fā)送信號、調(diào)用操作、創(chuàng)建和銷毀對象、讀取和設(shè)置屬性的值,甚至是一個包含多個動作的活動。例如,在圖10-5中,當(dāng)turnOn事件發(fā)生,就測試監(jiān)護條件[有水],如果有水,就會執(zhí)行“燒水”的動作。動作分為入口動作和出口動作。 當(dāng)轉(zhuǎn)換發(fā)生時,進入某個狀態(tài)時發(fā)生的動作稱為入口動作;離開某個狀態(tài)時發(fā)生的動作稱為出口動作。1).入口動作入口動作表示對象進入某個狀態(tài)所要執(zhí)行的動作。入口動作用“entry/要執(zhí)行的動作”表示。2).出口動作出口動作表示對象退出某個狀態(tài)所要執(zhí)行的動作。出口動作用“exit/要執(zhí)行的動作”表示。入口動作和出口動作都標識在狀態(tài)視圖的第二欄中?;顒赢?dāng)對象處于一個狀態(tài)時,它一般是空閑的,在等待一個事件的發(fā)生。但是某些時間,對象正在執(zhí)行一序列動作,即,對象做著某些工作,并一直繼續(xù)到被某個外部事件的到來,才中斷這些工作,我們把對象處于某個狀態(tài)時進行的一序列動作稱為活動。如果對象處于某個狀態(tài)進行一些動作,可能會需要一些時間,我們可以用活動來描述這一序列動作。表示活動的方法是,在狀態(tài)的轉(zhuǎn)換分欄中添加一行“活動描述”,其格式為“do/動作名”?;顒佑脕砻枋鰧ο筇幱谀硞€狀態(tài)時,對象進行的一序列動作。理解簡單狀態(tài)圖例如,我們描述一個燒水器在工作時的行為狀態(tài)變化??梢圆捎萌鐖D10-6所示進行描述。圖10-6燒水器的狀態(tài)變化圖對上圖的說明如下:與狀態(tài)off相關(guān)的轉(zhuǎn)換有兩個,其觸發(fā)事件都是turnOn,只不過其監(jiān)護條件不同。如果對象收到事件turnOn,那么將判斷壺中是否有水;如果[沒水],則仍然處于off狀態(tài);如果[有水]則轉(zhuǎn)為on狀態(tài),并執(zhí)行“燒水”動作而與狀態(tài)on相關(guān)的轉(zhuǎn)換也有兩個,如果“水開了”就執(zhí)行turnOff動作,關(guān)掉開關(guān);如果燒壞了,就進入了終態(tài)了從圖10-6中不難看出,在一張狀態(tài)機圖中,最為核心的元素?zé)o外乎有兩個:一個是用圓角矩形表示的狀態(tài)(初態(tài)和終態(tài)例外);另一個是轉(zhuǎn)換。在前面已經(jīng)說過了狀態(tài)的含義和表示法,在此重點理解“轉(zhuǎn)換”的含義和表示法。10.2.3分支的表示對象在外部事件的作用下,根據(jù)監(jiān)護條件的不同值,轉(zhuǎn)向不同的目標狀態(tài)。即,對象的狀態(tài)根據(jù)監(jiān)護條件的取值而發(fā)生分支。分支用空心小菱形表示。圖10-7分支的表示根據(jù)監(jiān)護條件的真假可以觸發(fā)不同的分支轉(zhuǎn)換。圖10-8分支實例圖10-8說明,當(dāng)對象處于狀態(tài)1時,當(dāng)某個事件作用于對象,這時,就要計算監(jiān)護條件,當(dāng)條件滿足時(true),對象的狀態(tài)變?yōu)闋顟B(tài)2;當(dāng)條件不滿足時(false),對象狀態(tài)變?yōu)闋顟B(tài)3。10.3轉(zhuǎn)換的分類轉(zhuǎn)換表示當(dāng)一個外部事件作用于對象,在監(jiān)護條件得到滿足時,對象在源狀態(tài)下執(zhí)行一序列的動作后,轉(zhuǎn)向目標狀態(tài)。轉(zhuǎ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種。外部轉(zhuǎn)換外部轉(zhuǎn)換是一種改變對象狀態(tài)的轉(zhuǎn)換,是最常見的一種轉(zhuǎn)換。外部轉(zhuǎn)換用從源狀態(tài)到目標狀態(tài)的箭頭表示。圖10-9描述了火車上衛(wèi)生間的簡單狀態(tài)轉(zhuǎn)換。該衛(wèi)生間存在三個狀態(tài),包含5個外部轉(zhuǎn)換。圖10-9外部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換有一個源狀態(tài)但是沒有目標狀態(tài),它轉(zhuǎn)換后的狀態(tài)仍舊是它本身。內(nèi)部轉(zhuǎn)換自始至終都不離開源狀態(tài),所以沒有入口動作和出口動作。因此,當(dāng)對象處于某個狀態(tài),進行的一些動作時,我們可以把這些動作看成是內(nèi)部轉(zhuǎn)換。圖10-10內(nèi)部轉(zhuǎn)換在圖10-10中,在第二欄,描述了入口動作和出口動作,也描述了內(nèi)部轉(zhuǎn)換,要注意的是,入口動作和出口動作描述的是外部轉(zhuǎn)換時發(fā)生的動作;內(nèi)部轉(zhuǎn)換是描述本狀態(tài)沒有發(fā)生改變的情況下,發(fā)生的動作。自動轉(zhuǎn)換在沒有外部事件的作用下,對象執(zhí)行了某些活動后,自然而然地完成的轉(zhuǎn)換。自轉(zhuǎn)換是離開某個狀態(tài)后重新進入原先的狀態(tài),它會激發(fā)狀態(tài)的入口動作和出口動作的執(zhí)行。復(fù)合轉(zhuǎn)換復(fù)合轉(zhuǎn)換由簡單轉(zhuǎn)換組成,通過分支判定,把多個簡單轉(zhuǎn)換組合在一起。圖10-11復(fù)合轉(zhuǎn)換10.4狀態(tài)的分類狀態(tài)機圖中的狀態(tài)分為簡單狀態(tài)和復(fù)合狀態(tài)2種。10.4.1簡單狀態(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)圖10.4.2復(fù)合狀態(tài)復(fù)合狀態(tài)是指狀態(tài)本身包含一到多個子狀態(tài)機的狀態(tài)。復(fù)合狀態(tài)中包含的多個子狀態(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)。順序子狀態(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)機。在圖10-13中,IC卡電話包括3個基本狀態(tài):“使用狀態(tài)”、“未使用狀態(tài)”和“維修狀態(tài)”。其中“使用狀態(tài)”狀態(tài)是一個復(fù)合狀態(tài)。下面我們來看看IC電話的連接過程:當(dāng)拿起電話打IC電話的時候,首先要插入IC卡,進行IC卡的有效驗證,驗證通過才可以撥打電話,此時從最初的“IC卡驗證”狀態(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)。圖10-13順序子狀態(tài)實例并發(fā)子狀態(tài)如果復(fù)合狀態(tài)包含兩個或者多個并發(fā)的子狀態(tài)機,此時稱復(fù)合狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)??疾煲惠v處于“運行”狀態(tài)的電動車。車處在運行狀態(tài)時,包含了前進和后退兩個不同的子狀態(tài),這兩個子狀態(tài)之間的關(guā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)或低速行使?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)表示法圖10-4是簡單狀態(tài)的表示法,簡單狀態(tài)不包含子狀態(tài)。復(fù)合狀態(tài)包含了一個或多個嵌套的狀態(tài)機,復(fù)合狀態(tài)所包含的狀態(tài)被稱為子狀態(tài)。復(fù)合狀態(tài)的表示法有2兩種。(1).將子狀態(tài)機嵌入表示狀態(tài)的圓角矩形中這種表示法是在表示狀態(tài)的圓角矩形中加入子狀態(tài)機的新分欄,如圖10-15的左圖所示。將子狀態(tài)機嵌入圓角矩形將子狀態(tài)機嵌入圓角矩形用分解指示符表示子狀態(tài)機圖10-15復(fù)合狀態(tài)的兩種表示法(2).在圓角矩形中加入加分解指示符這種表示法是在表示狀態(tài)的圓角矩形中加入分解指示符的新分欄,其中,分解指示符表示子狀態(tài)機,如圖10-15的右所示。我們把復(fù)合狀態(tài)稱為父狀態(tài)。每個子狀態(tài)繼承了父狀態(tài)的全部轉(zhuǎn)換。每個復(fù)合狀態(tài)的區(qū)域可能具有一個初始狀態(tài)。進入復(fù)合狀態(tài)邊界的轉(zhuǎn)換,也就是進入初始狀態(tài)上的轉(zhuǎn)換;類似地,復(fù)合狀態(tài)也可以有終態(tài)。到了終態(tài)的轉(zhuǎn)換會觸發(fā)復(fù)合狀態(tài)上的完成轉(zhuǎn)換。10.4.3歷史狀態(tài)當(dāng)狀態(tài)機通過轉(zhuǎn)換從某種狀態(tài)轉(zhuǎn)入復(fù)合狀態(tài)時,被嵌套的子狀態(tài)機一般要從子狀態(tài)機的初始狀態(tài)開始執(zhí)行,除非轉(zhuǎn)到特定的子狀態(tài)。但是有些情況下,當(dāng)離開一個復(fù)合狀態(tài),然后重新進入復(fù)合狀態(tài)時,并不希望從復(fù)合包含的子狀態(tài)機的初始狀態(tài)開始執(zhí)行,而是希望直接進入上次離開復(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í)行入口動作??紤]一個MP3播放器對象的狀態(tài)圖,如圖10-16所示。圖10-16歷史狀態(tài)從上圖中可以看出,MP3播放器對象的復(fù)合狀態(tài)——“活動”狀態(tài)包含4個嵌套子狀態(tài):“停止”、“播放”、“前進”、“后退”狀態(tài),如果用戶按下了“暫?!卑粹o,活動狀態(tài)被打斷而進入暫停狀態(tài);當(dāng)用戶撤銷暫停,恢復(fù)播放器的活動狀態(tài)時,MP3播放器對象直接進入歷史狀態(tài),此時將進入播放器上一次離開活動狀態(tài)時的子狀態(tài)。例如當(dāng)用戶在播放狀態(tài)按下暫停按鈕,當(dāng)恢復(fù)播放時,播放器仍進入播放狀態(tài)。10.4.4子狀態(tài)機間實現(xiàn)通信在并發(fā)復(fù)合狀態(tài)中,子狀態(tài)機之間可能會需要通信。要表示這些通信,當(dāng)然可以借助于監(jiān)護條件、狀態(tài)間的事件來描述,但有時更希望采用異步模式來描述它。在UML1.0中,采用屬性和基于同步點兩種方法來實現(xiàn)子狀態(tài)機間的通訊,但在UML2.0中已經(jīng)廢棄了同步狀態(tài)這一方法。在圖10-17中,狀態(tài)“課程評價”包含了三個并發(fā)的子狀態(tài)機:第一個子狀態(tài)機包含兩個狀態(tài),即“實驗1”和“實驗2”;第二個子狀態(tài)機包含一個狀態(tài),即“團隊項目”;第三個子狀態(tài)機包含一個狀態(tài),即“考試”?,F(xiàn)在來看看第一個子狀態(tài)機與第二個子狀態(tài)機之間的通訊方式:選修該課程的學(xué)生必須先完成“實驗1”才能進入子狀態(tài)“團隊項目”,那么可以通過一個屬性來表達兩個子狀態(tài)之間的這種邏輯。圖10-17子狀態(tài)機間的通信圖10-17中,在實驗1中添加了一個退出動作,使其退出該狀態(tài)時將屬性lab的值設(shè)置為true,再將lab作為另一個子狀態(tài)“團隊項目”執(zhí)行的監(jiān)護條件,這樣就可以保證在實驗1完成之后才能進入子狀態(tài)”團隊項目”。10.5建立狀態(tài)機圖前面已經(jīng)闡述了狀態(tài)機圖的基本組成,引入了內(nèi)部轉(zhuǎn)換、狀態(tài)的進入和退出動作、活動、延遲事件等等;最后還介紹了各種復(fù)合狀態(tài)。下面以一個航班機票預(yù)訂的例子來說明狀態(tài)機圖的繪制過程。繪制狀態(tài)機圖的一般步驟是:(1).尋找主要的狀態(tài),(2).尋找外部事件,以便確定狀態(tài)之間的轉(zhuǎn)換(3).詳細描述每個狀態(tài)和轉(zhuǎn)換(4).把簡單狀態(tài)圖轉(zhuǎn)換為復(fù)合狀態(tài)圖。10.5.1尋找主要狀態(tài)在繪制狀態(tài)機圖時,第一步就是尋找出主要的狀態(tài)。對于航班機票預(yù)訂系統(tǒng)而言,我們把飛機票看作一個整體,我們來看飛機票有哪幾種狀態(tài),以及有哪些事件觸發(fā)機票狀態(tài)的變化。確定狀態(tài)飛機票有以下4種狀態(tài):無預(yù)訂、部分預(yù)訂、預(yù)訂完、預(yù)訂關(guān)閉。(1)在剛確定飛行計劃時,顯然時沒有任何預(yù)訂的,并且在顧客預(yù)訂機票之前都將處于這種“無預(yù)訂”狀態(tài)。(2)對于訂座而言,顯然有“部分預(yù)訂”和“預(yù)訂完”兩種狀態(tài)。(3)當(dāng)航班快要起飛時,顯然要“預(yù)訂關(guān)閉”。尋找外部事件無論機票處于那種狀態(tài),可能有的外部事件有:(1)預(yù)訂():顧客預(yù)訂機票。(2)退訂():顧客退訂機票。(3)關(guān)閉():機票管理員關(guān)閉訂票系統(tǒng)。(4)取消航班():飛機調(diào)度人員取消飛行計劃。10.5.2確定狀態(tài)間的轉(zhuǎn)換我們已經(jīng)知道了機票的主要狀態(tài),也知道了改變機票狀態(tài)變化的外部事件?,F(xiàn)在我們分析狀態(tài)之間的轉(zhuǎn)換(這里指外部轉(zhuǎn)換)。即,確定當(dāng)機票處于這一狀態(tài)時,哪些外部事件能真正改變機票狀態(tài),哪些事件對本狀態(tài)不起作用??梢圆捎帽砀竦姆绞絹磉M行分析,如表10-1所示。表10-1事件與狀態(tài)轉(zhuǎn)換源目標無預(yù)訂部分預(yù)訂預(yù)訂完預(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)換
通過上述分析,確定了狀態(tài)之間的有效轉(zhuǎn)換,在此基礎(chǔ)上可以繪制出相應(yīng)的狀態(tài)機圖,如圖10-18所示。圖10-18機票預(yù)訂系統(tǒng)的初步狀態(tài)圖對圖10-18的說明如下:起初,剛確定航班時,機票無人訂,機票處在“無預(yù)訂”狀態(tài);當(dāng)有顧客預(yù)訂機票時,機票處在“部分預(yù)訂”狀態(tài);當(dāng)有人退訂時,如果退訂時“退訂數(shù)等于已預(yù)訂數(shù)”,那么退訂后狀態(tài)將回到“無預(yù)訂”狀態(tài)。在部分預(yù)訂狀態(tài)時,如果再發(fā)生預(yù)訂,而且“預(yù)訂數(shù)=空位數(shù)”,那么將訂完所有的位置,因此將進入“預(yù)訂完”狀態(tài)。當(dāng)機票處在“預(yù)訂完”狀態(tài)時,只要有人退訂,就必將轉(zhuǎn)為“部分預(yù)訂”狀態(tài)。10.5.3詳細描述每個狀態(tài)和轉(zhuǎn)換前面已經(jīng)確定了各個狀態(tài)之間的外部轉(zhuǎn)換,為了詳細描述狀態(tài),我們給狀態(tài)添加內(nèi)部轉(zhuǎn)換、外部轉(zhuǎn)換時的進入和退出動作,以及相關(guān)的活動等。例如,在這個例子中,還存在下一些內(nèi)部轉(zhuǎn)換和活動:1.機票處在“部分預(yù)訂”狀態(tài)時,當(dāng)發(fā)生退訂事件時,如果退訂數(shù)小于預(yù)訂數(shù),那么狀態(tài)不變;同樣的道理,當(dāng)發(fā)生預(yù)訂事件時,如果預(yù)訂數(shù)小于空位數(shù),那么狀態(tài)也是不變的。2.從初態(tài)到“無預(yù)訂”狀態(tài)時,我們要對機票數(shù)、預(yù)定數(shù)和空座位數(shù)進行初始化活動。3.當(dāng)預(yù)訂事件和取訂事件發(fā)生時,都應(yīng)該更新預(yù)訂數(shù)和空位數(shù)的值。但由于座位總數(shù)是已知的,因此只要更新預(yù)訂數(shù)就可以了。通過上述分析,可以在狀態(tài)機圖上,為每個狀態(tài)添加詳細的動作或活動,添加了新信息后,得到如圖10-19所示的狀態(tài)機圖。圖10-19詳細描述后的狀態(tài)圖10.5.4把簡單狀態(tài)圖轉(zhuǎn)換為復(fù)合狀態(tài)圖為了便于理解狀態(tài)圖,我們常把簡單狀態(tài)圖(圖10-19)轉(zhuǎn)換為復(fù)合狀態(tài)圖(圖10-20)。對于圖10-19,可以將無預(yù)定、部分預(yù)訂、預(yù)訂完三個狀態(tài)歸結(jié)為“預(yù)訂”狀態(tài),這樣就可以采用一個復(fù)合狀態(tài),即“預(yù)訂”狀態(tài)來表示該圖,如圖10-20所示。圖10-20復(fù)合狀態(tài)表示機票預(yù)訂系統(tǒng)10.6狀態(tài)機圖應(yīng)用范圍狀態(tài)機圖主要應(yīng)用有兩種:一是,在對象生命周期內(nèi),對一個對象的整個活動狀態(tài)建模;二是,對反應(yīng)型對象的行為建模。對對象的生命周期建模使用狀態(tài)機最通常的目的是對對象的生命周期建模,即,描述對象在生命周期內(nèi),各種狀態(tài)以及在外部事件的作用下,狀態(tài)之間的轉(zhuǎn)換。交互圖建模是用來描述多個協(xié)作對象的行為;
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版工廠經(jīng)營理念轉(zhuǎn)讓合同3篇
- 2025年度新能源汽車動力電池回收利用合同范本4篇
- 2024食用菌種植基地環(huán)境保護與生態(tài)修復(fù)合同3篇
- 2024版美容院產(chǎn)品購銷合同
- 2025年度商業(yè)地產(chǎn)項目租賃收益分成合同范本4篇
- 編制加油站生產(chǎn)建設(shè)項目可行性研究報告編制說明
- 2025年綠色建筑裝修垃圾清運及節(jié)能減排合同2篇
- 2025年度個人樓房房買賣合同標準范本下載4篇
- 2025年社區(qū)商業(yè)綜合體商鋪租賃管理協(xié)議3篇
- 2025年版影視作品版權(quán)轉(zhuǎn)讓合同范本3篇
- 高考全國Ⅲ卷語文真題含答案
- 10kV架空線路專項施工方案
- OGSM戰(zhàn)略規(guī)劃框架:實現(xiàn)企業(yè)目標的系統(tǒng)化方法論
- 遼寧省大連市中山區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題
- 2023年版《安寧療護實踐指南(試行)》解讀課件
- 2024年新課標高考化學(xué)試卷(適用黑龍江、遼寧、吉林地區(qū) 真題+答案)
- AQ6111-2023個體防護裝備安全管理規(guī)范
- 鈷酸鋰-安全技術(shù)說明書MSDS
- 江蘇省“大唐杯”全國大學(xué)生新一代信息通信技術(shù)大賽省賽題庫(含答案)
- (正式版)JBT 9229-2024 剪叉式升降工作平臺
- 如何做好談話筆錄
評論
0/150
提交評論