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

下載本文檔

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

文檔簡介

UML基礎與建模實踐

第十章狀態機圖

主講人:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10.5狀態機圖應用狀態機圖的主要應用有兩種:一是在對象生命周期內,對

溫馨提示

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

最新文檔

評論

0/150

提交評論