版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章狀態(tài)機(jī)圖UML建模設(shè)計(jì)與分析-狀態(tài)機(jī)圖本章的主要介紹狀態(tài)機(jī)的含義、作用、構(gòu)成及其創(chuàng)建和應(yīng)用。學(xué)習(xí)要點(diǎn)是:●理解狀態(tài)機(jī)及其構(gòu)成?!裾莆諣顟B(tài)機(jī)圖中的基本標(biāo)記符?!窭斫廪D(zhuǎn)移的概念?!裾莆帐录蛣幼鞯暮x及使用?!窭斫庾訝顟B(tài)機(jī)圖組合狀態(tài)?!裾莆胀綘顟B(tài)、歷史狀態(tài)的使用。
通常狀態(tài)名英文的首字母要大寫,并且最好給狀態(tài)一個(gè)以“ing”為結(jié)尾的名字。(例如“Dialing”、“Faxing”)。當(dāng)然有時(shí)也無法起這樣的名字(例如“Idle”)。狀態(tài)機(jī)是展示狀態(tài)與狀態(tài)轉(zhuǎn)換的圖狀態(tài)機(jī)是一個(gè)類的對象所有可能的生命歷程的模型。當(dāng)對象探測到一個(gè)事件后,它依照當(dāng)前的狀態(tài)做出反應(yīng),反應(yīng)包括執(zhí)行一個(gè)動作和轉(zhuǎn)換到新狀態(tài)。什么是狀態(tài)圖UML狀態(tài)機(jī)圖能夠展示這種變化,描述了一個(gè)對象所處的可能狀態(tài)以及狀態(tài)之間的轉(zhuǎn)移,并給出了狀態(tài)變化序列的起點(diǎn)和終點(diǎn)。
狀態(tài)機(jī)圖也叫狀態(tài)(state),或狀態(tài)表(statechart)。
狀態(tài)機(jī)圖與類圖、對象圖和用例圖有著本質(zhì)的不同。前面章節(jié)介紹過的這3種圖能夠?qū)σ粋€(gè)系統(tǒng)或者至少是一組類、對象或用例建立模型。而狀態(tài)圖只是對單個(gè)對象建立模型。
表征系統(tǒng)變化的方法可以說成是對象改變了自己的狀態(tài)(state)以響應(yīng)事件和時(shí)間的流逝。例如:當(dāng)你拉下電燈的開關(guān)時(shí),電燈改變了它的狀態(tài),由關(guān)變?yōu)殚_。當(dāng)你按下遠(yuǎn)程遙控器的調(diào)頻按鈕時(shí),電視機(jī)的狀態(tài)由顯示一個(gè)頻道的節(jié)目變?yōu)轱@示另一個(gè)頻道的節(jié)目。
經(jīng)過一個(gè)適宜的時(shí)間后,洗衣機(jī)可以由洗滌變?yōu)槠礌顟B(tài)。狀態(tài)圖機(jī)與活動圖的區(qū)別狀態(tài)機(jī)圖只建模一個(gè)對象的行為,活動圖可以建模多個(gè)對象的活動活動圖中也允許建模特定活動中對象的某個(gè)狀態(tài)基本組成狀態(tài)(State)轉(zhuǎn)移(Transition)事件(Event)活動(Activity)動作(Action)狀態(tài)機(jī)圖中的標(biāo)識符有:狀態(tài)、初始狀態(tài)、終結(jié)狀態(tài)、轉(zhuǎn)移、判定決策點(diǎn)和同步。狀態(tài)機(jī)圖標(biāo)記符下圖顯示了圓角矩形代表一個(gè)狀態(tài),狀態(tài)間帶箭頭的實(shí)線代表狀態(tài)的遷移(轉(zhuǎn)移)。箭頭指向目標(biāo)狀態(tài)。圖中的實(shí)心圓代表狀態(tài)轉(zhuǎn)移的起點(diǎn),公牛眼形圓圈代表終點(diǎn)。狀態(tài)
狀態(tài)是指對象某個(gè)時(shí)刻存在的方式,如休眠、打印、驗(yàn)證等。狀態(tài)的4種形式添加動作的狀態(tài),狀態(tài)名與動作中間以一條斜線隔開狀態(tài)狀態(tài)是對象執(zhí)行某項(xiàng)活動或等待某個(gè)事件時(shí)的條件和狀況狀態(tài)是給定類的對象的一組屬性值,這組屬性值對所發(fā)生的事件具有相同性質(zhì)的反應(yīng)。對象在任何時(shí)候都會處于某種狀態(tài)中,所有對象都有狀態(tài)。對象所處的狀態(tài)決定了它如何響應(yīng)所檢測到的事件或所接收的消息。通常,事件使對象從一個(gè)狀態(tài)轉(zhuǎn)向另一個(gè)狀態(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)時(shí)所執(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)嵌套在另外一個(gè)狀態(tài)中的狀態(tài)組合狀態(tài)包含子狀態(tài)的狀態(tài)稱為組合狀態(tài)(CompositeState)
將子狀態(tài)機(jī)單獨(dú)定義,對其進(jìn)行命名(通常以大寫字母開頭),然后在需要使用的地方來引用它例順序狀態(tài)如果一個(gè)組成狀態(tài)的子狀態(tài)對應(yīng)的對象在其生命周期內(nèi)的任何時(shí)刻都只能處于一個(gè)子狀態(tài),也就是說狀態(tài)機(jī)圖中多個(gè)子狀態(tài)是互斥的,不能同時(shí)存在,這種子狀態(tài)被稱為順序狀態(tài)或互斥狀態(tài)或不相交狀態(tài)。在順序狀態(tài)中最多只能有一個(gè)初態(tài)和一個(gè)終態(tài)。并發(fā)子狀態(tài)
有時(shí)組成狀態(tài)有兩個(gè)或多個(gè)并發(fā)的子狀態(tài),此時(shí)稱組成狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)。
如果并發(fā)子狀態(tài)中有一個(gè)子狀態(tài)機(jī)比其它并發(fā)子狀態(tài)先到達(dá)終態(tài),先到的將等待,直到所有子狀態(tài)到達(dá)終態(tài)。并發(fā)子狀態(tài)同步狀態(tài)同步狀態(tài)是連接兩個(gè)并發(fā)狀態(tài)區(qū)域的特殊狀態(tài)。
組合狀態(tài)圖區(qū)域之間是獨(dú)立的,如果要求對并發(fā)區(qū)域之間的控制進(jìn)行同步,就需要同步狀態(tài)。歷史狀態(tài)歷史狀態(tài)用于在復(fù)雜的組合中標(biāo)記轉(zhuǎn)移過后需要返回的狀態(tài)。UML狀態(tài)機(jī)圖中歷史狀態(tài)分為淺歷史狀態(tài)(歷史狀態(tài))和深歷史狀態(tài)(詳細(xì)歷史狀態(tài))兩種。例當(dāng)從狀態(tài)“結(jié)賬”和“顯示購物車”返回子狀態(tài)“顯示索引信息”時(shí),將進(jìn)入的是離開時(shí)的歷史狀態(tài)。也就是說,轉(zhuǎn)到購物或結(jié)賬區(qū)之后,再回到“瀏覽目錄”的頁面時(shí),其中的內(nèi)容是不變的,仍然保留原來的信息。子狀態(tài)機(jī)引用狀態(tài)
子狀態(tài)機(jī)引用狀態(tài)是表示激活其他子狀態(tài)機(jī)的狀態(tài)。聲明子狀態(tài)機(jī)引用狀態(tài)時(shí),使用關(guān)鍵字include來標(biāo)記。如子狀態(tài)機(jī)不是通過初態(tài)和終態(tài)進(jìn)入和退出子狀態(tài)機(jī),可以用樁狀態(tài)來實(shí)現(xiàn)。樁狀態(tài)分為入口樁和出口樁,表示非默認(rèn)的入口和出口。轉(zhuǎn)移用來顯示從一個(gè)狀態(tài)到另一個(gè)狀態(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)換被激活時(shí),對應(yīng)的動作被執(zhí)行轉(zhuǎn)換轉(zhuǎn)移的區(qū)別進(jìn)入和退出轉(zhuǎn)換:當(dāng)進(jìn)入一個(gè)狀態(tài)時(shí),執(zhí)行某個(gè)動作;或當(dāng)退出某個(gè)狀態(tài)時(shí),執(zhí)行什么動作。這時(shí)就可以使用進(jìn)入和退出轉(zhuǎn)換來表示內(nèi)部轉(zhuǎn)換:用來處理一些不離開該狀態(tài)的事件事件事件是發(fā)生在時(shí)間和空間上可以定位,并值得注意的事情。如果某一事情的發(fā)生造成了影響,那么在狀態(tài)模型中它是一個(gè)事件在OO中,事件是對一個(gè)可觀察的事情的規(guī)格說明,這種事情的發(fā)生可以引發(fā)狀態(tài)的轉(zhuǎn)換事件可能有參數(shù)來辨別每個(gè)實(shí)例,就像類用屬性來辨別每個(gè)對象通常事件后跟一個(gè)監(jiān)護(hù)條件,監(jiān)護(hù)條件為假,事件不能觸發(fā)。如turnOn[有水]事件種類信號事件調(diào)用事件改變事件時(shí)間事件延遲事件事件種類1)信號事件所謂信號,是指由一個(gè)對象異步地發(fā)送、并由另外一個(gè)對象接收的一個(gè)已命名的對象。一個(gè)對象對一個(gè)信號實(shí)例的接收導(dǎo)致一個(gè)信號事件信號可以在類圖中被聲明為類元,并用關(guān)鍵字《signal》表示,信號的參數(shù)被聲明為屬性。信號的等級組織事件種類2)調(diào)用事件對操作調(diào)用的接收調(diào)用事件一般是同步的事件種類3)時(shí)間事件指定事件后,經(jīng)過一段時(shí)間或到了指定時(shí)間,導(dǎo)致的一個(gè)時(shí)間事件。如after(5妙),after(A推出后5妙)事件種類4)改變事件用布爾表達(dá)式描述的指派條件變?yōu)檎?,就?dǎo)致一個(gè)改變事件。無論表達(dá)式的值何時(shí)由假變?yōu)檎?,事件都發(fā)生變?yōu)檎鏁r(shí),事件發(fā)生一次,即使之后變?yōu)榧?,產(chǎn)生的事件仍將保持,直到它被處理為止用when(bullexpress)表示事件種類5)延遲事件延遲事件是在當(dāng)前狀態(tài)不處理、推遲或排隊(duì)等到對象轉(zhuǎn)移到另一個(gè)狀態(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í)行的計(jì)算(動作)。添加的事件和動作寫在轉(zhuǎn)移線上,觸發(fā)器事件和動作名之間用反斜杠隔開。有時(shí)一個(gè)事件會引起沒有相關(guān)動作的狀態(tài)轉(zhuǎn)移,或者有時(shí)一個(gè)轉(zhuǎn)移是由于某個(gè)狀態(tài)完成了它的活動所引起(而不是由于事件引起)。這種類型的狀態(tài)轉(zhuǎn)移被稱為無觸發(fā)器轉(zhuǎn)移。
圖形用戶界面(GUI)是一個(gè)可以說明狀態(tài)轉(zhuǎn)移細(xì)節(jié)的例子。在這里,假設(shè)GUI可以處于以下3種狀態(tài)之一:Initializing(初始化)。
Working(工作)。
ShutDown(關(guān)閉)。當(dāng)打開PC電源的時(shí)候,自啟動發(fā)生。因此TurningthePCon(打開PC)是一個(gè)觸發(fā)器事件,它導(dǎo)致了GUI的狀態(tài)轉(zhuǎn)移到Initializing狀態(tài),而Bootup(自啟動)是一個(gè)在轉(zhuǎn)移過程中執(zhí)行的動作。
由于Initializing狀態(tài)中活動的完成,GUI將轉(zhuǎn)移進(jìn)入Working狀態(tài)。當(dāng)你對PC選擇ShutDown(關(guān)閉機(jī)器)時(shí),就生成了一個(gè)引起轉(zhuǎn)移到ShutingDown狀態(tài)的觸發(fā)器事件,最后PC自己切斷電源,整個(gè)過程結(jié)束。下面的狀態(tài)圖捕獲了GUI的這些狀態(tài)和轉(zhuǎn)移。轉(zhuǎn)移的細(xì)節(jié):監(jiān)視條件上面對GUI的狀態(tài)變遷還有考慮不全之處。首先,如果你離開,你的計(jì)算機(jī)將無人照管或者你漫無目的坐在一旁,不打字或不碰鼠標(biāo),那么過一段時(shí)間屏幕保護(hù)程序就會運(yùn)行。用狀態(tài)轉(zhuǎn)移的術(shù)語來說,就是如果GUI在足夠的時(shí)間內(nèi)沒有接收到用戶的輸入,那么它將從Working狀態(tài)轉(zhuǎn)移到另一種狀態(tài)——Screensaving(屏幕保護(hù))狀態(tài)。
進(jìn)入屏幕保護(hù)狀態(tài)取決于指定的時(shí)間間隔。比如是15分鐘。15分鐘的時(shí)間間隔是一個(gè)保護(hù)條件——當(dāng)滿足這個(gè)條件時(shí),轉(zhuǎn)移才能發(fā)生。
在前面的例子中,引起從Screensaving轉(zhuǎn)移到working的觸發(fā)器事件可能是一個(gè)擊鍵操作、一次鼠標(biāo)移動或者一次鼠標(biāo)點(diǎn)擊。任何這種類型的事件實(shí)際上是一個(gè)從用戶到GUI的消息。因?yàn)閷ο笾g正是通過相互發(fā)送消息進(jìn)行通信,因此這是一個(gè)重要概念。在這種情況下,觸發(fā)器事件是從一個(gè)對象(用戶)消息和信號到另一個(gè)對象(GUI)的消息。在接收對象的狀態(tài)圖中,能夠觸發(fā)一個(gè)狀態(tài)轉(zhuǎn)移的消息叫做信號(signal)。在面向?qū)ο箢I(lǐng)域里,發(fā)送一個(gè)信號就等同于創(chuàng)建一個(gè)信號類的實(shí)例并將這個(gè)信號實(shí)例傳送給接收對象。信號也有自己的屬性。如果將信號看成是一個(gè)類,那么可以建立信號之間繼承層次的類圖。用來操縱電視機(jī)的遙控器是信號發(fā)送者的一個(gè)好例子,并且提供給我們建立信號類層次模型的機(jī)會。這個(gè)例子也提供了學(xué)習(xí)使用構(gòu)造型的好機(jī)會。記住構(gòu)造型是UML的自擴(kuò)展方式。UML沒有專門為狀態(tài)機(jī)建模一般需以下步驟標(biāo)識出需要進(jìn)一步建模的實(shí)體標(biāo)識出實(shí)體的開始狀態(tài)和結(jié)束狀態(tài)選定實(shí)體中一組有意義的對狀態(tài)有影響的屬性,結(jié)合事件動作條件以決定該對象的狀態(tài)確定與實(shí)體相關(guān)的事件用被適當(dāng)?shù)氖录|發(fā)的轉(zhuǎn)換將這些狀態(tài)連接起來識別各狀態(tài)的進(jìn)入推出動作如果必要,則建立復(fù)合狀態(tài)狀態(tài)機(jī)圖應(yīng)用對對象生命周期建模:主要描述對象能夠響應(yīng)的事件、對這些事件的響以及過去對當(dāng)前行為的影響對反應(yīng)型對象建模:這個(gè)對象可能處于的穩(wěn)定狀態(tài),從一個(gè)狀態(tài)到另一個(gè)狀態(tài)之間的轉(zhuǎn)換所需的觸發(fā)事件,以及每個(gè)狀態(tài)改變時(shí)發(fā)生的動作狀態(tài)機(jī)圖既可以用來表示一個(gè)業(yè)務(wù)領(lǐng)域的知識,也可以用來描述設(shè)計(jì)階段對象的狀態(tài)變遷訂單處理訂單處理(復(fù)合)
狀態(tài)圖能幫助分析員、設(shè)計(jì)員和開發(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)機(jī)圖很重要?開發(fā)人員尤其要知道對象是如何表現(xiàn)自己的行為的,因?yàn)樗麄円密浖?shí)施這些行為。僅僅實(shí)施對象是不夠的,開發(fā)人員還必須讓對象做該做的事情。狀態(tài)機(jī)圖可以確保開發(fā)人員能夠清楚的了解對象應(yīng)該做什么,而不用自己去猜測它。如果有了一幅展示對象行為的清晰圖景,那么開發(fā)小組構(gòu)造出的系統(tǒng)滿足需求的可能性就會大大增加。小結(jié)
系統(tǒng)中的對象改變自身的狀態(tài)以響應(yīng)事件和時(shí)間流逝,UML狀態(tài)機(jī)圖就能捕獲這些狀態(tài)變化。狀態(tài)圖的焦點(diǎn)是一個(gè)對象的狀態(tài)變化。狀態(tài)用一個(gè)圓角矩形表示,狀態(tài)轉(zhuǎn)移用帶箭頭的實(shí)線表示,它指向目標(biāo)狀態(tài)。狀態(tài)圖標(biāo)中要寫明狀態(tài)名,并且可以添加動作。轉(zhuǎn)移可能作為對觸發(fā)事件的響應(yīng)而發(fā)生的,并且需要一個(gè)活動。轉(zhuǎn)移也可能因?yàn)闋顟B(tài)中的活動的完成而引起,這種方式發(fā)生的轉(zhuǎn)移叫做無觸發(fā)器轉(zhuǎn)移。最后,轉(zhuǎn)移還可能起因于一個(gè)特定條件(守衛(wèi)條件)的滿足而引起。有時(shí)候狀態(tài)可以包含子狀態(tài)。子狀態(tài)可能是順序的(一個(gè)接著一個(gè)地發(fā)生)或者是并發(fā)的(同時(shí)發(fā)生)。包含子狀態(tài)的狀態(tài)被稱為組成狀態(tài)。歷史狀態(tài)是說明一個(gè)組成狀態(tài)在對象轉(zhuǎn)移出該組成狀態(tài)之后還能夠記住的子狀態(tài)。歷史狀態(tài)可能是淺的也可能是深的。這個(gè)術(shù)語和嵌套的子狀態(tài)有關(guān)。淺的歷史狀態(tài)只記憶了最頂層的子狀態(tài)。而深的歷史狀態(tài)能夠記憶所有層次的子狀態(tài)。當(dāng)一個(gè)對象向另一個(gè)對象發(fā)送稍息時(shí),就觸發(fā)了第2個(gè)對象的狀態(tài)圖中的某個(gè)轉(zhuǎn)移,這個(gè)消息就被稱為信號。使用擴(kuò)展的構(gòu)造型《Signal》的類圖標(biāo),可以建立信號的繼承層次。
UML必須包括狀態(tài)機(jī)圖,因?yàn)樗軒椭治鰡T、設(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 隧道襯砌耐久性-洞察分析
- 二零二五年航空服務(wù)業(yè)勞動合同補(bǔ)充協(xié)議3篇
- 語音演變軌跡研究-洞察分析
- 關(guān)注學(xué)生課外興趣的探索方案計(jì)劃
- 康復(fù)評估室護(hù)理工作總結(jié)
- 洗浴會所行業(yè)銷售工作總結(jié)
- 水質(zhì)指標(biāo)與富營養(yǎng)化關(guān)系-洞察分析
- 二零二五年度鮮活水產(chǎn)品運(yùn)輸合作協(xié)議
- 個(gè)性化印刷服務(wù)協(xié)議樣本2024下載版A版
- 餐廳服務(wù)員工作技巧
- 大健康商業(yè)招商計(jì)劃書
- 高一上半學(xué)期總結(jié)教學(xué)課件
- 高速公路初步設(shè)計(jì)匯報(bào)課件
- 申根簽證申請表模板
- 企業(yè)會計(jì)準(zhǔn)則、應(yīng)用指南及附錄2023年8月
- 2022年浙江省事業(yè)編制招聘考試《計(jì)算機(jī)專業(yè)基礎(chǔ)知識》真題試卷【1000題】
- 認(rèn)養(yǎng)一頭牛IPO上市招股書
- GB/T 3767-2016聲學(xué)聲壓法測定噪聲源聲功率級和聲能量級反射面上方近似自由場的工程法
- GB/T 23574-2009金屬切削機(jī)床油霧濃度的測量方法
- 動物生理學(xué)-全套課件(上)
- 河北省衡水市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
評論
0/150
提交評論