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

下載本文檔

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

文檔簡介

UML基礎與建模實踐

第十章狀態(tài)機圖

主講人:

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

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

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

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

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

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

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

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

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

在圖10-19中,IC卡電話包括3個基本狀態(tài):“使用狀態(tài)”、“未使用狀態(tài)”和“維修狀態(tài)”,其中“使用狀態(tài)”是一個復合狀態(tài)。下面來看看IC電話的連接過程: 當拿起電話打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卡,則電話轉(zhuǎn)入“未使用”狀態(tài)。 “使用狀態(tài)”包含5個子狀態(tài),因為IC電話不能同時處于兩個不同的子狀態(tài)中,所以這些子狀態(tài)是順序子狀態(tài)。10.4.2復合狀態(tài)圖10-19順序子狀態(tài)實例10.4.2復合狀態(tài)2.并發(fā)子狀態(tài) 如果復合狀態(tài)包含兩個或者多個并發(fā)的子狀態(tài)機,則稱復合狀態(tài)的子狀態(tài)為并發(fā)子狀態(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)也可以是高速行駛或者低速行駛狀態(tài),即前進狀態(tài)或后退狀態(tài)之一,可以與高速行駛狀態(tài)或低速行使狀態(tài)之一同時存在,我們就把這些可以同時出現(xiàn)的狀態(tài)稱為并發(fā)子狀態(tài),如圖10-20所示。并發(fā)子狀態(tài)可以用于并發(fā)線程的狀態(tài)建模。10.4.2復合狀態(tài)圖10-20并發(fā)子狀態(tài)實例10.4.2復合狀態(tài)3.復合狀態(tài)表示法復合狀態(tài)的表示法有兩種。(1)將子狀態(tài)機嵌入表示狀態(tài)的圓角矩形中這種表示法是在表示狀態(tài)的圓角矩形中加入子狀態(tài)機的新分欄,如圖10-21左圖所示。圖10-21復合狀態(tài)的兩種表示法10.4.2復合狀態(tài)(2)在圓角矩形中加入復合圖標這種表示法是在表示狀態(tài)的圓角矩形中加入分解指示符的新分欄,其中,分解指示符代表子狀態(tài)機,如圖10-21下圖所示。圖10-21復合狀態(tài)的兩種表示法10.4.3歷史狀態(tài)當遷移轉(zhuǎn)入復合狀態(tài)時,被嵌套的子狀態(tài)機一般要從子狀態(tài)機的初始狀態(tài)開始執(zhí)行,除非轉(zhuǎn)到特定的子狀態(tài)。但是有些情況下,當離開一個復合狀態(tài),然后重新進入復合狀態(tài)時,并不希望從復合包含的子狀態(tài)機的初始狀態(tài)開始執(zhí)行,而是希望直接進入上次離開復合狀態(tài)時的最后一個活動子狀態(tài),此時便需要用一個包含字母“H”的小圓圈表示最后一個活動子狀態(tài),即稱為歷史狀態(tài)。每當遷移到復合狀態(tài)的歷史狀態(tài)時,對象的狀態(tài)便恢復到上次離開該復合狀態(tài)時的最后一個活動子狀態(tài),并執(zhí)行入口動作

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論