UML建模 狀態(tài)圖_第1頁
UML建模 狀態(tài)圖_第2頁
UML建模 狀態(tài)圖_第3頁
UML建模 狀態(tài)圖_第4頁
UML建模 狀態(tài)圖_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第第9章章 狀態(tài)機(jī)圖狀態(tài)機(jī)圖 狀態(tài)機(jī)圖是系統(tǒng)分析的一種常用工具,它描述了一個對象在其生命期內(nèi)所經(jīng)歷的各種狀態(tài),以及狀態(tài)之間的轉(zhuǎn)移,發(fā)生轉(zhuǎn)移的原因,條件和轉(zhuǎn)移中所執(zhí)行的活動。所有的類,只要它具有狀態(tài)和復(fù)雜的行為,都應(yīng)該有一個狀態(tài)機(jī)圖。狀態(tài)機(jī)圖用于指定對象的行為以及根據(jù)不同的當(dāng)前狀態(tài)行為之間差別。同時,它還能說明事件是如何改變一個類對象的狀態(tài)。通過狀態(tài)機(jī)圖可以了解一個對象所能到達(dá)的所有狀態(tài)以及對象收到的事件(收到的消息、超時、錯誤和條件滿足等)對對象狀態(tài)的影響等。2本章學(xué)習(xí)要點(diǎn): 了解狀態(tài)機(jī) 理解對象和狀態(tài) 掌握狀態(tài)機(jī)圖中基本標(biāo)記符 掌握動作 掌握事件 運(yùn)用順序子狀態(tài)和并發(fā)子狀態(tài) 理解子狀態(tài)機(jī)引

2、用狀態(tài) 掌握同步狀態(tài)和歷史狀態(tài)39.1 定義狀態(tài)機(jī)圖定義狀態(tài)機(jī)圖 狀態(tài)機(jī)圖中包含了諸多元素,在學(xué)習(xí)狀態(tài)機(jī)圖之前先來學(xué)習(xí)一下有關(guān)狀態(tài)機(jī)圖的相關(guān)知識。包括了狀態(tài)機(jī)的概念原理和狀態(tài)機(jī)圖中重要要領(lǐng)的說明。 狀態(tài)機(jī)圖可以用于對象和一些類來說明當(dāng)調(diào)用對象的行為時對象的狀態(tài)如何改變,但是狀態(tài)機(jī)圖還可以用于許多其他情況。例如,狀態(tài)機(jī)圖可以用來說明基于用戶輸入的屏幕狀態(tài)的改變,也可以用來說明復(fù)雜的用例狀態(tài)進(jìn)展情況。 49.1.1 狀態(tài)機(jī)狀態(tài)機(jī) UML中用狀態(tài)機(jī)對軟件系統(tǒng)的動態(tài)特征建模,通常一個狀態(tài)機(jī)依附于一個類,并且描述一個類的實(shí)例。狀態(tài)機(jī)包含了一個類的對象在其生命周期間所有狀態(tài)的序列以及對象對接收到的事件所產(chǎn)

3、生的反應(yīng)。 利用狀態(tài)機(jī)可以精確地描述對象的行為:從對象的初始狀態(tài)起,開始響應(yīng)事件并執(zhí)行某些動作,這些事件引起狀態(tài)的轉(zhuǎn)換;對象在新的狀態(tài)下又開始響應(yīng)狀態(tài)和執(zhí)行動作,如此連續(xù)直到終止?fàn)顟B(tài)。9.1.2 對象、狀態(tài)和事件對象、狀態(tài)和事件 在狀態(tài)機(jī)圖中,對象和狀態(tài)是一對不同分割的概念。狀態(tài)機(jī)圖是描述單個對象,以及對象的行為如何改變其狀態(tài)。對象是某個狀態(tài)下的對象,而狀態(tài)則是描述當(dāng)前對象。所有的對象均有狀態(tài),狀態(tài)的改變由對象的屬性值指向其他對象的鏈來決定。下面一些例子形像地說明了對象和狀態(tài)。 (1)支票(對象)已付(狀態(tài))。 (2)汽車(對象)已啟動(狀態(tài))。 (3)小王(對象)睡著了(狀態(tài))。 (4)小紅

4、(對象)未婚(狀態(tài))。5 當(dāng)某些事件發(fā)生時對象的狀態(tài)就會改變,此時稱改變對象狀態(tài)的事情為“事件事件”。事件體現(xiàn)了狀態(tài)改變的這種動態(tài)性,該動態(tài)性表現(xiàn)在兩個方面:交互和內(nèi)部狀態(tài)改變。 交互描述對象的外部行為以及對象如何與其他對象交換信息;而內(nèi)部狀態(tài)改變描述對象是如何改變其狀態(tài)的,例如,對象內(nèi)部屬性值。UnmarriedMarriedMarry9.1.3 狀態(tài)機(jī)圖狀態(tài)機(jī)圖 狀態(tài)機(jī)圖實(shí)質(zhì)上是一種由狀態(tài)、轉(zhuǎn)移、事件和動作組成的狀態(tài)機(jī),用來建模對象是如何改變其狀態(tài)的,并且定義了狀態(tài)機(jī)的表示符號。在對象生命周期中狀態(tài)機(jī)被用來捕捉由外部事件引起的變化,事件對對象發(fā)出命令,該命令會導(dǎo)致對象發(fā)生轉(zhuǎn)移,這又反過來影

5、響對象行為。狀態(tài)機(jī)圖表示了對象在其生命周期各個時期的狀態(tài),以及引起變化的事件。 狀態(tài)機(jī)圖描述從狀態(tài)到狀態(tài)的控制流,學(xué)用于系統(tǒng)的動態(tài)特性建模。 8 在UML中系統(tǒng)動態(tài)建模時,除了狀態(tài)機(jī)圖,建模人員還可以用序列圖、協(xié)作圖和活動圖對系統(tǒng)的動態(tài)行為進(jìn)行建模,但四種圖存在著以下重要差別: 序列圖和協(xié)作圖用于對共同完成某些對序列圖和協(xié)作圖用于對共同完成某些對象群體進(jìn)行建模。象群體進(jìn)行建模。 狀態(tài)機(jī)圖和活動圖用于對單個對象(可狀態(tài)機(jī)圖和活動圖用于對單個對象(可以是類、用例或整個系統(tǒng)的實(shí)例)的生以是類、用例或整個系統(tǒng)的實(shí)例)的生命周期建模。命周期建模。9.2 認(rèn)識狀態(tài)機(jī)圖中的標(biāo)記符認(rèn)識狀態(tài)機(jī)圖中的標(biāo)記符 狀態(tài)

6、機(jī)圖中某些標(biāo)記符與活動圖的標(biāo)記符非常相似,有時候會讓人混淆。其實(shí)活動圖是用來建模不同區(qū)域的工作如何彼此交互的,而狀態(tài)機(jī)圖用來表示單個對象,以及對象的行為如何改變其狀態(tài)。狀態(tài)機(jī)圖由狀態(tài)、轉(zhuǎn)移和事件等組成。109.2.1 狀態(tài)狀態(tài) 狀態(tài)指對象的生命周期中滿足某些條件、執(zhí)行某些活動或者等待某些事件時的一個條件或情況。狀態(tài)和事件之間的關(guān)系是狀態(tài)機(jī)圖的基礎(chǔ)。狀態(tài)與之前在活動圖中講到的相同,同樣使用了圓矩形。中間狀態(tài)的名稱,名稱也可以作為個標(biāo)記置于狀態(tài)機(jī)圖標(biāo)上面。除了簡單的狀態(tài),UML還定義了兩種特別的狀態(tài),即初始狀態(tài)和終止?fàn)顟B(tài)。初始狀態(tài)是使用一個填充的圓圈表示,終止?fàn)顟B(tài)類似在于在初始狀態(tài)外加一個圓圈,圖

7、演示了狀態(tài)標(biāo)記符。 11Stateentry/ dosth()exit/ dother9.2.2 轉(zhuǎn)移轉(zhuǎn)移 轉(zhuǎn)移用來顯示從一個狀態(tài)到另一外狀態(tài)的控制流,它描述了對象在兩種狀態(tài)間的轉(zhuǎn)變。當(dāng)對象在第一個狀態(tài)中執(zhí)行一定的動作,并在某個特定事件發(fā)生后并且滿足特定的條件,然后進(jìn)入第二個狀態(tài)時。當(dāng)狀態(tài)間發(fā)生這種轉(zhuǎn)移時,稱轉(zhuǎn)移被激活。轉(zhuǎn)移被激活之前對象處于狀態(tài)稱為源狀態(tài);轉(zhuǎn)移激活之后,稱對象所在狀態(tài)為目標(biāo)狀態(tài)。131.外部轉(zhuǎn)移PowerOnRunningWorkingFreePowerOff2.轉(zhuǎn)移條件 一個轉(zhuǎn)移還會有復(fù)雜的名稱結(jié)束和動作列表。 轉(zhuǎn)移名: 事件名 參數(shù)列表 守衛(wèi)條件/動作列表 事件:源狀態(tài)的

8、對象接收觸發(fā)事件后,只要滿足守衛(wèi)條件便可激活相應(yīng)轉(zhuǎn)移。 守衛(wèi)條件:守衛(wèi)條件是用方括號括起來的表達(dá)式,它放在事件的后面。 動作:動作可以操作調(diào)用另一個對象的創(chuàng)建和撤銷或向另一個對象的信號發(fā)送,它不能被事件中斷。 動作是一組可執(zhí)行語句或者計算處理過程。 動作可以包括發(fā)送消息給另一個對象、操作調(diào)用、設(shè)置返回值、創(chuàng)建和銷毀對象等。 動作是原子的,不可中斷的,動作或動作序列的執(zhí)行不會被同時發(fā)生的其他動作影響或終止。 整個系統(tǒng)可以在同一時間執(zhí)行多個動作。LoginGUIIDInputGUIPasswordInputGUIRefuseCheckingdo/ CheckIDAndPasswordRetry /

9、 ClearInfoExitExitSystem / Cancle Invalid / Error Valid / BusinessBeginSubmit3.自轉(zhuǎn)移 建模時對象會收到一個事件,該事件不會改變對象的狀態(tài),卻會導(dǎo)致狀態(tài)的中斷,這種事件被稱為自轉(zhuǎn)移,它打斷當(dāng)前狀態(tài)下的所有活動,使對象退出當(dāng)前狀態(tài),然后又返回該狀態(tài)。Stateevent Reset/ addItemRetry / ChangeInfo()4.內(nèi)部轉(zhuǎn)移 內(nèi)部轉(zhuǎn)移只有源狀態(tài)沒有目標(biāo)狀態(tài),轉(zhuǎn)移激發(fā)的結(jié)果并不改變狀態(tài)本身。如果一個內(nèi)部轉(zhuǎn)移帶有動作,動作也要被執(zhí)行,但由于沒有狀態(tài)改變發(fā)生,因此不需要執(zhí)行入口動作和出口動作。Inf

10、ormationShowingevent Help/ DisplayHelpevent ShowInfo/ Information.show() 內(nèi)部轉(zhuǎn)移和自轉(zhuǎn)移不同,雖然兩者都不改變狀態(tài)本身,但有著本質(zhì)區(qū)別。自轉(zhuǎn)移會觸發(fā)入口動作和出口動作,而內(nèi)部轉(zhuǎn)移不會。9.2.3 決策點(diǎn)決策點(diǎn) 在第4章活動圖中講到過決策點(diǎn),在狀態(tài)機(jī)圖中也需要用到?jīng)Q策點(diǎn)。它在建模狀態(tài)機(jī)圖時提供了方便,因?yàn)樗ㄟ^在中心位置分組轉(zhuǎn)移到各自的方向,從而提高了狀態(tài)機(jī)圖的可視性。決策點(diǎn)標(biāo)記符是一個空心菱形,圖演示了決策點(diǎn)的使用方法。22MainMenuPersonOptionMenuAreaMenuControlMenu9.2.4

11、同步同步 使用同步條可以顯示并發(fā)轉(zhuǎn)移,并發(fā)轉(zhuǎn)移中可以有多個源狀態(tài)和目標(biāo)狀態(tài)。并發(fā)轉(zhuǎn)移表示一個同步將一個控制劃分為并發(fā)的線程。狀態(tài)機(jī)圖中使用到同步條是為了說明某些狀態(tài)在哪里需要跟上或者等待其他狀態(tài)。狀態(tài)機(jī)圖中同步條是一條黑色的粗線,圖顯示了使用了同步條的狀態(tài)機(jī)圖。249.3 指定狀態(tài)機(jī)圖中動作和事件指定狀態(tài)機(jī)圖中動作和事件 事件是一個在時間和空間上都事件是一個在時間和空間上都占據(jù)一定位置有意義事情的規(guī)約,占據(jù)一定位置有意義事情的規(guī)約,它能指示狀態(tài)之間轉(zhuǎn)移的條件。它能指示狀態(tài)之間轉(zhuǎn)移的條件。對應(yīng)于消息的事件被發(fā)送到對象,要求對象做某件事情,這個事情被稱為動作。動作改變了對象屬性的值,導(dǎo)致對象的狀態(tài)

12、發(fā)生變化。本節(jié)將會對狀態(tài)機(jī)圖中動作和事件進(jìn)行詳細(xì)講解。259.3.1 事件事件【目前作為了解目前作為了解】 一個事件的發(fā)生能觸發(fā)狀態(tài)的轉(zhuǎn)移,事件和轉(zhuǎn)移總是相伴出現(xiàn)。事件既可以是內(nèi)部事件又可以是外部事件,可以是同步的,也可以是異步的。內(nèi)部事件是指在系統(tǒng)內(nèi)部對象之間傳送的事件。例如,異常就是一個內(nèi)部事件。外部事件是指在系統(tǒng)和它的參與者之間傳送的事件。例如,在指定文本框中輸入內(nèi)容就是一個外部事件。圖顯示了帶有事件的狀態(tài)機(jī)圖26 在UML中有多種事情可以讓建模人員進(jìn)行建模,它們分別是:調(diào)用事件、信號事件、變化事件、時間事件和延遲事件。調(diào)用事件 一個調(diào)用事件代表一個操作的調(diào)用,它是同步的。當(dāng)一個對象調(diào)用

13、另一個具有狀態(tài)機(jī)對象的某個操作時,控制就從發(fā)送者傳遞到接收者。該事件觸發(fā)轉(zhuǎn)移,完成操作后,接收這轉(zhuǎn)到一個新的狀態(tài),并將控制返還給發(fā)送者。DelInfoGUIUserDeleteddelManager( username )Stateevent delManage( username )/ 信號事件 信號是對象異步地發(fā)送并由另一個對象接收的具有名字的對象,它和簡單的類有許多共同之處。例如,信號可以有實(shí)例,信號可包含在泛化層次中,它可以有屬性和操作,信號可作為狀態(tài)機(jī)中一個狀態(tài)轉(zhuǎn)移的動作而被發(fā)送,也可作為交互中的一條消息被發(fā)送,一個操作的執(zhí)行也可以發(fā)送信號。事實(shí)上,當(dāng)建模人員為一個類或一個接口建模時

14、,通常需要說明它的操作所發(fā)送的信號。DelInfoGUIUerDeletedDefinedByMyselfStateevent DefinedByMyself/ 變化事件 變化事件是狀態(tài)中的一個變化或者某些事件滿足的條件。在UML中變化事件使用關(guān)鍵字when來標(biāo)記,它隱含了對于控制條件的連續(xù)測試,相當(dāng)于編程中的循環(huán)。當(dāng)條件從假變?yōu)檎鏁r,事件發(fā)生,建模人員可以使用諸如when:time=08:00的表達(dá)式來標(biāo)記時間,也可以用如when:number20Stateevent when:KeepDays20/ 時間事件 時間事件是經(jīng)過一定的時間或者到達(dá)某個絕對時間后發(fā)生的事件。在UML中時間時間使用

15、關(guān)鍵字after來標(biāo)記,后面跟著計算一段時間的表達(dá)式。如:after(10分鐘。如果沒有特別說明,那么上面的表達(dá)式的開始時間是進(jìn)入當(dāng)前狀態(tài)的時間。FreshGobadafter:10Days延遲事件 在UML中,建模人員有時需識別某些事件,延遲對它們的響應(yīng)直到以后某個合適的時刻才執(zhí)行,在描述這種行為時可以使用延遲事。延遲事件使用關(guān)鍵字defer來標(biāo)識,其語法形式為:延遲事件/defer。在實(shí)現(xiàn)時,所有的延遲事件被保存在一個列表中,這些事件在狀態(tài)中的發(fā)生被延遲,直到對象進(jìn)入了一個不在需要延遲這些時間并需使用它們的狀態(tài)時列表中的事件才會發(fā)生,并觸發(fā)相應(yīng)的轉(zhuǎn)移。一旦對象進(jìn)入了一個不延遲切沒有使用這些

16、事件的狀態(tài),它們就會從這個列表中刪除。9.3.2 動作動作 動作可以由對象(擁有所有狀態(tài)的對象)的操作和屬性組成,也可以由事件說明中的參數(shù)組成,在一個狀態(tài)中允許有多個動作。 38 動作初始時可以有以下5中基本狀態(tài)動作類型。 entry:標(biāo)記入口動作,用來指定進(jìn)入狀態(tài)時發(fā)生的動作。entry/entry/動作名動作名 exit:標(biāo)記出口動作,用來指定狀態(tài)被另一個狀態(tài)取代時發(fā)生的動作。exit/exit/動作名動作名 do:標(biāo)記內(nèi)部活動,用來指定處于某種狀態(tài)時發(fā)生的活動。do/do/活動表達(dá)式活動表達(dá)式 include: event:用來指定當(dāng)特定事件觸發(fā)時指定相應(yīng)動作的發(fā)生。event-name

17、(parameters)guard-condition/action 事件可以伴有多個動作的發(fā)生。動作之間用逗號分隔。9.4 組成狀態(tài)組成狀態(tài) 在簡單狀態(tài)之外,還有一種可以包含嵌套子狀態(tài)的狀態(tài),又稱為組成狀態(tài)組成狀態(tài)。在復(fù)雜的應(yīng)用中,當(dāng)狀態(tài)機(jī)圖處于某種特定的狀態(tài)時,狀態(tài)機(jī)圖描述的該對象行為仍可以用另一個狀態(tài)機(jī)圖描述,用于描述對象行為的狀態(tài)機(jī)圖又稱為子狀態(tài)。 子狀態(tài)可以是狀態(tài)機(jī)圖中單獨(dú)的普通狀態(tài),也可以是一個完整的狀態(tài)機(jī)圖來描述一個狀態(tài)。組成狀態(tài)中子狀態(tài)可以是順序子狀態(tài),也包含并發(fā)的子狀態(tài)。如果包含順序子狀態(tài)的狀態(tài)是活動的,則只有該子狀態(tài)是活動的;如果包含并發(fā)子狀態(tài)的狀態(tài)是活動的,則與它正交的所

18、有子狀態(tài)都是活動的。449.4.1 順序子狀態(tài)順序子狀態(tài) 如果一個組成狀態(tài)的子狀態(tài)對應(yīng)的對象在其生命周期內(nèi)的任何時刻都只能處于一個子狀態(tài),也就是說狀態(tài)機(jī)圖中多個子狀態(tài)是互斥的,不能同時存在,這種子狀態(tài)被稱為順序子狀態(tài)或叫互斥子狀態(tài)。在順序子狀態(tài)中最多只能有一個初態(tài)和一個終態(tài)。 當(dāng)狀態(tài)機(jī)圖通過轉(zhuǎn)移從某種狀態(tài)轉(zhuǎn)入組合狀態(tài)時,該轉(zhuǎn)移的目的可能是組成狀態(tài)本身,也可能是這個組成狀態(tài)的子狀態(tài)。 459.4.2 并發(fā)子狀態(tài)并發(fā)子狀態(tài) 有時組成狀態(tài)有兩個或多個并發(fā)的子狀態(tài),此時稱組成狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)。并發(fā)子狀態(tài)能說明很多事發(fā)生在同一時刻,為了分離不同的活動,組成狀態(tài)被分解成區(qū)域,每個區(qū)域都包含一個不同

19、的狀態(tài)機(jī)圖,各個狀態(tài)機(jī)圖在同一時刻分別運(yùn)行。 如果并發(fā)子狀態(tài)中有一個子狀態(tài)比其他并發(fā)子狀態(tài)到達(dá)它的終態(tài),那么先到的子狀態(tài)的控制流將在它的終態(tài)等待,直到所有的子狀態(tài)都達(dá)到終態(tài)。 479.4.3 子狀態(tài)機(jī)引用狀態(tài)子狀態(tài)機(jī)引用狀態(tài) 子狀態(tài)機(jī)引用狀態(tài)是表示激活其他地方定義的一個子狀態(tài)機(jī)的狀態(tài)。子狀態(tài)機(jī)引用狀態(tài)和宏調(diào)用非常相似,因?yàn)樗鼘?shí)際上是一種用來表示將一個復(fù)雜的規(guī)約嵌入到另一個規(guī)約的簡單記號。 聲明子狀態(tài)機(jī)引用狀態(tài)時,使用關(guān)鍵字include來標(biāo)記,具體標(biāo)記信息如下所示: include 子狀態(tài)機(jī)名499.4.4 同步狀態(tài)同步狀態(tài)同步狀態(tài)是連接兩個并發(fā)區(qū)域的特殊狀態(tài)。在某些情況下,組合狀態(tài)通常由同個

20、并發(fā)區(qū)域組成,每個區(qū)域有自己的順序子狀態(tài)區(qū)域。當(dāng)進(jìn)入一個組合狀態(tài)時,每個并發(fā)區(qū)域里在一個控制線程。其中,區(qū)域之間是獨(dú)立的,如果要求對并發(fā)區(qū)域之間的控制進(jìn)行同步,此時可使用同步狀態(tài)。在同步狀態(tài)中使用了同步條,使用轉(zhuǎn)移把一個區(qū)域里中分叉的輸出連接到同步狀態(tài)的輸入上,同樣再使用轉(zhuǎn)移把同步狀態(tài)的輸出連接到另外一個區(qū)域中的匯合輸入上。 529.4.5 歷史狀態(tài)歷史狀態(tài) 在UML建模中,轉(zhuǎn)移進(jìn)入組成狀態(tài)并經(jīng)歷了許多狀態(tài),建模人員也許會在后面的步驟中返回到某個狀態(tài)。如果返回到一個簡單狀態(tài),那么就會很容易實(shí)現(xiàn);如果返回一個組成狀態(tài),就沒那么簡單了,并且再次使用同樣的組成狀態(tài)機(jī),狀態(tài)機(jī)圖會顯得臃腫。使用歷史狀態(tài)

21、就能解決這種問題,它允許組成狀態(tài)記住從該組成狀態(tài)出發(fā)的轉(zhuǎn)移觸發(fā)之前最后一個活動子狀態(tài)。 UML狀態(tài)機(jī)圖中歷史狀態(tài)分為淺歷史狀態(tài)(簡略歷史狀態(tài))和深歷史狀態(tài)(詳細(xì)歷史狀態(tài))兩種。 549.5 建造狀態(tài)機(jī)圖模型建造狀態(tài)機(jī)圖模型 本書以一個圖書管理系統(tǒng)貫穿全書,前面已經(jīng)建模圖書管理系統(tǒng)的用例圖、類圖和活動圖,本節(jié)將以前面章節(jié)中所建模圖形為基礎(chǔ),建模圖書管理系統(tǒng)的狀態(tài)機(jī)圖。建模狀態(tài)機(jī)圖可以按照以下五步進(jìn)行。 (1)標(biāo)識出需要進(jìn)一步建模的實(shí)體。 (2)標(biāo)識出每個實(shí)體的開始和結(jié)束狀態(tài)。 (3)確定與每一個實(shí)體相關(guān)的事件。 (4)從開始狀態(tài)建模完整狀態(tài)機(jī)圖。 (5)如果必要則指定組成狀態(tài)。569.5.1 分

22、析狀態(tài)機(jī)圖分析狀態(tài)機(jī)圖 第一步就是要確定需要進(jìn)一步建模的實(shí)體,標(biāo)識需要建模的對象。狀態(tài)機(jī)圖應(yīng)用于復(fù)雜的實(shí)體,而不必用于具有復(fù)雜行為的實(shí)體。對于有復(fù)雜行為或操作的實(shí)體,使用活動圖會更加適合。具有清晰、有序狀態(tài)的實(shí)體最適合使用狀態(tài)機(jī)圖進(jìn)一步建模。這里建模一個Book對象作為建模圖書館管理系統(tǒng)狀態(tài)機(jī)圖的演練目標(biāo)。579.5.2 完成狀態(tài)機(jī)圖完成狀態(tài)機(jī)圖 利用前面分析的結(jié)果,建模一個簡單的狀態(tài)機(jī)圖來描述Book對象的不同狀態(tài),以及觸發(fā)狀態(tài)改變的事件,如圖所示。58狀態(tài)圖建模技術(shù)建模步驟: 找出適合用模型描述其行為的類。 確定對象可能存在的狀態(tài)。 確定引起狀態(tài)轉(zhuǎn)換的事件。 確定轉(zhuǎn)換進(jìn)行時對象執(zhí)行的相應(yīng)動

23、作。 對建模的結(jié)果進(jìn)行相應(yīng)的精化和細(xì)化。實(shí)例圖書館管理系統(tǒng)的狀態(tài)圖 1 使用Rational Rose繪制狀態(tài)圖的步驟 2 圖書館管理系統(tǒng)的狀態(tài)圖使用Rational Rose繪制狀態(tài)圖的步驟 1. 創(chuàng)建狀態(tài)圖 2. 狀態(tài)圖工具欄按鈕簡介 3. 加入初始狀態(tài)和終止?fàn)顟B(tài) 4. 增加狀態(tài) 5. 增加轉(zhuǎn)換 6. 增加歷史狀態(tài)圖書館管理系統(tǒng)的狀態(tài)圖 1. 書的狀態(tài)圖 2. 借閱憑證的狀態(tài)圖1. 書的狀態(tài)圖2. 借閱憑證的狀態(tài)圖補(bǔ)充:關(guān)于事件 入口事件 出口事件 動作事件 信號事件 調(diào)用事件 修改事件 時間事件 延遲事件 入口事件: 入口事件表示一個入口的動作序列,它在進(jìn)入狀態(tài)時執(zhí)行。 入口事件的動作是

24、原子的,并且先于人和內(nèi)部活動或轉(zhuǎn)換。 出口事件: 出口事件表示一個出口的動作序列,它在退出狀態(tài)時執(zhí)行。 出口事件也是原子的,它跟在所有的內(nèi)部活動之后,但是先于所有的出口轉(zhuǎn)換。 動作事件: 動作事件也稱為“do事件”,它表示對一個嵌套狀態(tài)機(jī)的調(diào)用。 與動作事件相關(guān)的活動必定引用嵌套狀態(tài)機(jī),而非引用包含它的對象的操作。 信號事件: 信號的接收是信號接受對象的一個事件。 信號分為異步單路通信和雙路通信。 在異步單路通信中,發(fā)送者是獨(dú)立的。 在雙路通信模型中,至少在每個方向上都要有一個信號。 在信號事件中,發(fā)送者和接受者可以是同一個對象。 調(diào)用事件: 調(diào)用事件是一個對象對調(diào)用的接收。 調(diào)用事件至少涉及

25、兩個以上的對象。 調(diào)用事件既可以為同步調(diào)用,也可以為異步調(diào)用。 修改事件: 修改事件依靠特定屬性值的布爾表達(dá)式所表示的條件的滿足來觸發(fā)狀態(tài)的轉(zhuǎn)換。 修改事件表示了一種具有時間持續(xù)性的并且可能是涉及全局的計算過程。 監(jiān)護(hù)條件與修改事件的區(qū)別:監(jiān)護(hù)條件只是在引起轉(zhuǎn)換的觸發(fā)器事件觸發(fā)時和事件接收者對事件進(jìn)行處理時被賦值一次。修改事件則可以被多次賦值直到條件為真,多次賦值滿足條件后轉(zhuǎn)換也會被激發(fā)。 時間事件: 時間事件代表時間的流逝。 時間事件既可以被指定為絕對形式(天數(shù)),也可以被指定為相對形式(從某一指定事件發(fā)生開始所經(jīng)歷的時間)。 時間事件可以描述一個通知信息,自進(jìn)入狀態(tài)以來某個時間期限已到,時間事件就會激發(fā)狀態(tài)的轉(zhuǎn)換。 延遲事件: 延遲事件是在本狀態(tài)不處理,要推遲到另外一個狀態(tài)才處理的事件。補(bǔ)充:關(guān)于轉(zhuǎn)換外部轉(zhuǎn)換 外部轉(zhuǎn)換是一種改變對象狀態(tài)的轉(zhuǎn)換,是最常見的一種轉(zhuǎn)換。 外部轉(zhuǎn)換用從源狀態(tài)到目標(biāo)狀態(tài)的箭頭表示。 UsedUnusedMaintainingThe train stopThe train go runningSomebody go intoSome

溫馨提示

  • 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

提交評論