




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章狀態(tài)機圖UML建模設(shè)計與分析-狀態(tài)機圖本章的主要介紹狀態(tài)機的含義、作用、構(gòu)成及其創(chuàng)建和應(yīng)用。學(xué)習(xí)要點是:●理解狀態(tài)機及其構(gòu)成。●掌握狀態(tài)機圖中的基本標(biāo)記符。●理解轉(zhuǎn)移的概念。●掌握事件和動作的含義及使用。●理解子狀態(tài)機圖組合狀態(tài)。●掌握同步狀態(tài)、歷史狀態(tài)的使用。
通常狀態(tài)名英文的首字母要大寫,并且最好給狀態(tài)一個以“ing”為結(jié)尾的名字。(例如“Dialing”、“Faxing”)。當(dāng)然有時也無法起這樣的名字(例如“Idle”)。狀態(tài)機是展示狀態(tài)與狀態(tài)轉(zhuǎn)換的圖狀態(tài)機是一個類的對象所有可能的生命歷程的模型。當(dāng)對象探測到一個事件后,它依照當(dāng)前的狀態(tài)做出反應(yīng),反應(yīng)包括執(zhí)行一個動作和轉(zhuǎn)換到新狀態(tài)。什么是狀態(tài)圖UML狀態(tài)機圖能夠展示這種變化,描述了一個對象所處的可能狀態(tài)以及狀態(tài)之間的轉(zhuǎn)移,并給出了狀態(tài)變化序列的起點和終點。
狀態(tài)機圖也叫狀態(tài)(state),或狀態(tài)表(statechart)。
狀態(tài)機圖與類圖、對象圖和用例圖有著本質(zhì)的不同。前面章節(jié)介紹過的這3種圖能夠?qū)σ粋€系統(tǒng)或者至少是一組類、對象或用例建立模型。而狀態(tài)圖只是對單個對象建立模型。
表征系統(tǒng)變化的方法可以說成是對象改變了自己的狀態(tài)(state)以響應(yīng)事件和時間的流逝。例如:當(dāng)你拉下電燈的開關(guān)時,電燈改變了它的狀態(tài),由關(guān)變?yōu)殚_。當(dāng)你按下遠(yuǎn)程遙控器的調(diào)頻按鈕時,電視機的狀態(tài)由顯示一個頻道的節(jié)目變?yōu)轱@示另一個頻道的節(jié)目。
經(jīng)過一個適宜的時間后,洗衣機可以由洗滌變?yōu)槠礌顟B(tài)。狀態(tài)圖機與活動圖的區(qū)別狀態(tài)機圖只建模一個對象的行為,活動圖可以建模多個對象的活動活動圖中也允許建模特定活動中對象的某個狀態(tài)基本組成狀態(tài)(State)轉(zhuǎn)移(Transition)事件(Event)活動(Activity)動作(Action)狀態(tài)機圖中的標(biāo)識符有:狀態(tài)、初始狀態(tài)、終結(jié)狀態(tài)、轉(zhuǎn)移、判定決策點和同步。狀態(tài)機圖標(biāo)記符下圖顯示了圓角矩形代表一個狀態(tài),狀態(tài)間帶箭頭的實線代表狀態(tài)的遷移(轉(zhuǎn)移)。箭頭指向目標(biāo)狀態(tài)。圖中的實心圓代表狀態(tài)轉(zhuǎn)移的起點,公牛眼形圓圈代表終點。狀態(tài)
狀態(tài)是指對象某個時刻存在的方式,如休眠、打印、驗證等。狀態(tài)的4種形式添加動作的狀態(tài),狀態(tài)名與動作中間以一條斜線隔開狀態(tài)狀態(tài)是對象執(zhí)行某項活動或等待某個事件時的條件和狀況狀態(tài)是給定類的對象的一組屬性值,這組屬性值對所發(fā)生的事件具有相同性質(zhì)的反應(yīng)。對象在任何時候都會處于某種狀態(tài)中,所有對象都有狀態(tài)。對象所處的狀態(tài)決定了它如何響應(yīng)所檢測到的事件或所接收的消息。通常,事件使對象從一個狀態(tài)轉(zhuǎn)向另一個狀態(tài)(即狀態(tài)的轉(zhuǎn)移)開始狀態(tài)結(jié)束狀態(tài)一般狀態(tài)復(fù)合狀態(tài)歷史狀態(tài)狀態(tài)簡單(一般)狀態(tài)狀態(tài)名進(jìn)入/退出動作在進(jìn)入和退出狀態(tài)時所執(zhí)行的動作。entry/動作exit/動作內(nèi)部轉(zhuǎn)換在不使?fàn)顟B(tài)發(fā)生變更的情況下進(jìn)行的轉(zhuǎn)移。事件名[監(jiān)護(hù)條件]/動作延遲事件延遲到下一狀態(tài)中處理的事件表示:事件/defer子狀態(tài)嵌套在另外一個狀態(tài)中的狀態(tài)組合狀態(tài)包含子狀態(tài)的狀態(tài)稱為組合狀態(tài)(CompositeState)
將子狀態(tài)機單獨定義,對其進(jìn)行命名(通常以大寫字母開頭),然后在需要使用的地方來引用它例順序狀態(tài)如果一個組成狀態(tài)的子狀態(tài)對應(yīng)的對象在其生命周期內(nèi)的任何時刻都只能處于一個子狀態(tài),也就是說狀態(tài)機圖中多個子狀態(tài)是互斥的,不能同時存在,這種子狀態(tài)被稱為順序狀態(tài)或互斥狀態(tài)或不相交狀態(tài)。在順序狀態(tài)中最多只能有一個初態(tài)和一個終態(tài)。并發(fā)子狀態(tài)
有時組成狀態(tài)有兩個或多個并發(fā)的子狀態(tài),此時稱組成狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)。
如果并發(fā)子狀態(tài)中有一個子狀態(tài)機比其它并發(fā)子狀態(tài)先到達(dá)終態(tài),先到的將等待,直到所有子狀態(tài)到達(dá)終態(tài)。并發(fā)子狀態(tài)同步狀態(tài)同步狀態(tài)是連接兩個并發(fā)狀態(tài)區(qū)域的特殊狀態(tài)。
組合狀態(tài)圖區(qū)域之間是獨立的,如果要求對并發(fā)區(qū)域之間的控制進(jìn)行同步,就需要同步狀態(tài)。歷史狀態(tài)歷史狀態(tài)用于在復(fù)雜的組合中標(biāo)記轉(zhuǎn)移過后需要返回的狀態(tài)。UML狀態(tài)機圖中歷史狀態(tài)分為淺歷史狀態(tài)(歷史狀態(tài))和深歷史狀態(tài)(詳細(xì)歷史狀態(tài))兩種。例當(dāng)從狀態(tài)“結(jié)賬”和“顯示購物車”返回子狀態(tài)“顯示索引信息”時,將進(jìn)入的是離開時的歷史狀態(tài)。也就是說,轉(zhuǎn)到購物或結(jié)賬區(qū)之后,再回到“瀏覽目錄”的頁面時,其中的內(nèi)容是不變的,仍然保留原來的信息。子狀態(tài)機引用狀態(tài)
子狀態(tài)機引用狀態(tài)是表示激活其他子狀態(tài)機的狀態(tài)。聲明子狀態(tài)機引用狀態(tài)時,使用關(guān)鍵字include來標(biāo)記。如子狀態(tài)機不是通過初態(tài)和終態(tài)進(jìn)入和退出子狀態(tài)機,可以用樁狀態(tài)來實現(xiàn)。樁狀態(tài)分為入口樁和出口樁,表示非默認(rèn)的入口和出口。轉(zhuǎn)移用來顯示從一個狀態(tài)到另一個狀態(tài)的處理流。轉(zhuǎn)換定義了處于此狀態(tài)的對象對外界發(fā)生的事件所做出的反應(yīng)。轉(zhuǎn)移有多種,如自轉(zhuǎn)移、內(nèi)部轉(zhuǎn)移、自動轉(zhuǎn)移和復(fù)合轉(zhuǎn)移等。轉(zhuǎn)移自轉(zhuǎn)移復(fù)合轉(zhuǎn)移自動轉(zhuǎn)移內(nèi)部轉(zhuǎn)移轉(zhuǎn)移轉(zhuǎn)移的組成源狀態(tài)轉(zhuǎn)換激發(fā)前對象所處的狀態(tài)目標(biāo)狀態(tài)轉(zhuǎn)換完成后,對象所處的狀態(tài)觸發(fā)事件引起轉(zhuǎn)換的事件監(jiān)護(hù)條件布爾表達(dá)式,真則觸發(fā)事件有效動作轉(zhuǎn)換被激活時,對應(yīng)的動作被執(zhí)行轉(zhuǎn)換轉(zhuǎn)移的區(qū)別進(jìn)入和退出轉(zhuǎn)換:當(dāng)進(jìn)入一個狀態(tài)時,執(zhí)行某個動作;或當(dāng)退出某個狀態(tài)時,執(zhí)行什么動作。這時就可以使用進(jìn)入和退出轉(zhuǎn)換來表示內(nèi)部轉(zhuǎn)換:用來處理一些不離開該狀態(tài)的事件事件事件是發(fā)生在時間和空間上可以定位,并值得注意的事情。如果某一事情的發(fā)生造成了影響,那么在狀態(tài)模型中它是一個事件在OO中,事件是對一個可觀察的事情的規(guī)格說明,這種事情的發(fā)生可以引發(fā)狀態(tài)的轉(zhuǎn)換事件可能有參數(shù)來辨別每個實例,就像類用屬性來辨別每個對象通常事件后跟一個監(jiān)護(hù)條件,監(jiān)護(hù)條件為假,事件不能觸發(fā)。如turnOn[有水]事件種類信號事件調(diào)用事件改變事件時間事件延遲事件事件種類1)信號事件所謂信號,是指由一個對象異步地發(fā)送、并由另外一個對象接收的一個已命名的對象。一個對象對一個信號實例的接收導(dǎo)致一個信號事件信號可以在類圖中被聲明為類元,并用關(guān)鍵字《signal》表示,信號的參數(shù)被聲明為屬性。信號的等級組織事件種類2)調(diào)用事件對操作調(diào)用的接收調(diào)用事件一般是同步的事件種類3)時間事件指定事件后,經(jīng)過一段時間或到了指定時間,導(dǎo)致的一個時間事件。如after(5妙),after(A推出后5妙)事件種類4)改變事件用布爾表達(dá)式描述的指派條件變?yōu)檎妫蛯?dǎo)致一個改變事件。無論表達(dá)式的值何時由假變?yōu)檎妫录及l(fā)生變?yōu)檎鏁r,事件發(fā)生一次,即使之后變?yōu)榧伲a(chǎn)生的事件仍將保持,直到它被處理為止用when(bullexpress)表示事件種類5)延遲事件延遲事件是在當(dāng)前狀態(tài)不處理、推遲或排隊等到對象轉(zhuǎn)移到另一個狀態(tài)再處理的事件。延遲事件使用關(guān)鍵字defer來標(biāo)識,語法形式為:延遲事件/defer.轉(zhuǎn)移的細(xì)節(jié):事件和動作可以對狀態(tài)轉(zhuǎn)移線添加一些細(xì)節(jié)。可以指明引起轉(zhuǎn)移發(fā)生的事件(觸發(fā)器事件)和引起狀態(tài)變化所需執(zhí)行的計算(動作)。添加的事件和動作寫在轉(zhuǎn)移線上,觸發(fā)器事件和動作名之間用反斜杠隔開。有時一個事件會引起沒有相關(guān)動作的狀態(tài)轉(zhuǎn)移,或者有時一個轉(zhuǎn)移是由于某個狀態(tài)完成了它的活動所引起(而不是由于事件引起)。這種類型的狀態(tài)轉(zhuǎn)移被稱為無觸發(fā)器轉(zhuǎn)移。
圖形用戶界面(GUI)是一個可以說明狀態(tài)轉(zhuǎn)移細(xì)節(jié)的例子。在這里,假設(shè)GUI可以處于以下3種狀態(tài)之一:Initializing(初始化)。
Working(工作)。
ShutDown(關(guān)閉)。當(dāng)打開PC電源的時候,自啟動發(fā)生。因此TurningthePCon(打開PC)是一個觸發(fā)器事件,它導(dǎo)致了GUI的狀態(tài)轉(zhuǎn)移到Initializing狀態(tài),而Bootup(自啟動)是一個在轉(zhuǎn)移過程中執(zhí)行的動作。
由于Initializing狀態(tài)中活動的完成,GUI將轉(zhuǎn)移進(jìn)入Working狀態(tài)。當(dāng)你對PC選擇ShutDown(關(guān)閉機器)時,就生成了一個引起轉(zhuǎn)移到ShutingDown狀態(tài)的觸發(fā)器事件,最后PC自己切斷電源,整個過程結(jié)束。下面的狀態(tài)圖捕獲了GUI的這些狀態(tài)和轉(zhuǎn)移。轉(zhuǎn)移的細(xì)節(jié):監(jiān)視條件上面對GUI的狀態(tài)變遷還有考慮不全之處。首先,如果你離開,你的計算機將無人照管或者你漫無目的坐在一旁,不打字或不碰鼠標(biāo),那么過一段時間屏幕保護(hù)程序就會運行。用狀態(tài)轉(zhuǎn)移的術(shù)語來說,就是如果GUI在足夠的時間內(nèi)沒有接收到用戶的輸入,那么它將從Working狀態(tài)轉(zhuǎn)移到另一種狀態(tài)——Screensaving(屏幕保護(hù))狀態(tài)。
進(jìn)入屏幕保護(hù)狀態(tài)取決于指定的時間間隔。比如是15分鐘。15分鐘的時間間隔是一個保護(hù)條件——當(dāng)滿足這個條件時,轉(zhuǎn)移才能發(fā)生。
在前面的例子中,引起從Screensaving轉(zhuǎn)移到working的觸發(fā)器事件可能是一個擊鍵操作、一次鼠標(biāo)移動或者一次鼠標(biāo)點擊。任何這種類型的事件實際上是一個從用戶到GUI的消息。因為對象之間正是通過相互發(fā)送消息進(jìn)行通信,因此這是一個重要概念。在這種情況下,觸發(fā)器事件是從一個對象(用戶)消息和信號到另一個對象(GUI)的消息。在接收對象的狀態(tài)圖中,能夠觸發(fā)一個狀態(tài)轉(zhuǎn)移的消息叫做信號(signal)。在面向?qū)ο箢I(lǐng)域里,發(fā)送一個信號就等同于創(chuàng)建一個信號類的實例并將這個信號實例傳送給接收對象。信號也有自己的屬性。如果將信號看成是一個類,那么可以建立信號之間繼承層次的類圖。用來操縱電視機的遙控器是信號發(fā)送者的一個好例子,并且提供給我們建立信號類層次模型的機會。這個例子也提供了學(xué)習(xí)使用構(gòu)造型的好機會。記住構(gòu)造型是UML的自擴(kuò)展方式。UML沒有專門為狀態(tài)機建模一般需以下步驟標(biāo)識出需要進(jìn)一步建模的實體標(biāo)識出實體的開始狀態(tài)和結(jié)束狀態(tài)選定實體中一組有意義的對狀態(tài)有影響的屬性,結(jié)合事件動作條件以決定該對象的狀態(tài)確定與實體相關(guān)的事件用被適當(dāng)?shù)氖录|發(fā)的轉(zhuǎn)換將這些狀態(tài)連接起來識別各狀態(tài)的進(jìn)入推出動作如果必要,則建立復(fù)合狀態(tài)狀態(tài)機圖應(yīng)用對對象生命周期建模:主要描述對象能夠響應(yīng)的事件、對這些事件的響以及過去對當(dāng)前行為的影響對反應(yīng)型對象建模:這個對象可能處于的穩(wěn)定狀態(tài),從一個狀態(tài)到另一個狀態(tài)之間的轉(zhuǎn)換所需的觸發(fā)事件,以及每個狀態(tài)改變時發(fā)生的動作狀態(tài)機圖既可以用來表示一個業(yè)務(wù)領(lǐng)域的知識,也可以用來描述設(shè)計階段對象的狀態(tài)變遷訂單處理訂單處理(復(fù)合)
狀態(tài)圖能幫助分析員、設(shè)計員和開發(fā)人員理解系統(tǒng)中對象的行為。類圖和對應(yīng)的對象圖只展示出系統(tǒng)的靜態(tài)方面。它們展示的是系統(tǒng)靜態(tài)層次和關(guān)聯(lián),并能告訴你系統(tǒng)的行為是什么。但它們不能說明這些行為的動態(tài)細(xì)節(jié)。
為什么狀態(tài)機圖很重要?開發(fā)人員尤其要知道對象是如何表現(xiàn)自己的行為的,因為他們要用軟件實施這些行為。僅僅實施對象是不夠的,開發(fā)人員還必須讓對象做該做的事情。狀態(tài)機圖可以確保開發(fā)人員能夠清楚的了解對象應(yīng)該做什么,而不用自己去猜測它。如果有了一幅展示對象行為的清晰圖景,那么開發(fā)小組構(gòu)造出的系統(tǒng)滿足需求的可能性就會大大增加。小結(jié)
系統(tǒng)中的對象改變自身的狀態(tài)以響應(yīng)事件和時間流逝,UML狀態(tài)機圖就能捕獲這些狀態(tài)變化。狀態(tài)圖的焦點是一個對象的狀態(tài)變化。狀態(tài)用一個圓角矩形表示,狀態(tài)轉(zhuǎn)移用帶箭頭的實線表示,它指向目標(biāo)狀態(tài)。狀態(tài)圖標(biāo)中要寫明狀態(tài)名,并且可以添加動作。轉(zhuǎn)移可能作為對觸發(fā)事件的響應(yīng)而發(fā)生的,并且需要一個活動。轉(zhuǎn)移也可能因為狀態(tài)中的活動的完成而引起,這種方式發(fā)生的轉(zhuǎn)移叫做無觸發(fā)器轉(zhuǎn)移。最后,轉(zhuǎn)移還可能起因于一個特定條件(守衛(wèi)條件)的滿足而引起。有時候狀態(tài)可以包含子狀態(tài)。子狀態(tài)可能是順序的(一個接著一個地發(fā)生)或者是并發(fā)的(同時發(fā)生)。包含子狀態(tài)的狀態(tài)被稱為組成狀態(tài)。歷史狀態(tài)是說明一個組成狀態(tài)在對象轉(zhuǎn)移出該組成狀態(tài)之后還能夠記住的子狀態(tài)。歷史狀態(tài)可能是淺的也可能是深的。這個術(shù)語和嵌套的子狀態(tài)有關(guān)。淺的歷史狀態(tài)只記憶了最頂層的子狀態(tài)。而深的歷史狀態(tài)能夠記憶所有層次的子狀態(tài)。當(dāng)一個對象向另一個對象發(fā)送稍息時,就觸發(fā)了第2個對象的狀態(tài)圖中的某個轉(zhuǎn)移,這個消息就被稱為信號。使用擴(kuò)展的構(gòu)造型《Signal》的類圖標(biāo),可以建立信號的繼承層次。
UML必須包括狀態(tài)機圖,因為它能幫助分析員、設(shè)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAOE 26-2021海洋生態(tài)本底調(diào)查與評價規(guī)范
- 西門子筆試題java面試題及答案
- 白柵欄考試題及答案
- sshm面試題及答案
- 護(hù)理競賽考試題庫及答案
- 地球文明考試題及答案
- 公考面試題型套路及答案
- 人生重在反思班會課件
- 食管賁門黏膜撕裂綜合征的臨床護(hù)理
- T/CADBM 62-2022多元鎂輕質(zhì)無機板
- FZ/T 93029-2016塑料粗紗筒管
- 2022年12月山東省普通高中學(xué)業(yè)水平合格性考試語文仿真模擬試卷C(答題卡)
- 塑膠原料來料檢驗指導(dǎo)書
- 人教版音樂三年級下冊知識總結(jié)
- 共點力平衡的應(yīng)用-完整版PPT
- 建筑物的防雷及安全用電電子教案
- 中國近現(xiàn)代史社會實踐報告-2000字
- 系桿拱橋工程測量施工方案
- ISA-300+使用-300技術(shù)使用說明書
- 高層建筑“一棟一冊”消防安全檔案
- 柳洲學(xué)校學(xué)生儀容儀表日常檢查記錄表
評論
0/150
提交評論