UML狀態(tài)機圖分析_第1頁
UML狀態(tài)機圖分析_第2頁
UML狀態(tài)機圖分析_第3頁
UML狀態(tài)機圖分析_第4頁
UML狀態(tài)機圖分析_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章狀態(tài)機圖UML建模設計與分析-狀態(tài)機圖本章的主要介紹狀態(tài)機的含義、作用、構成及其創(chuàng)建和應用。學習要點是:●理解狀態(tài)機及其構成?!裾莆諣顟B(tài)機圖中的基本標記符?!窭斫廪D移的概念?!裾莆帐录蛣幼鞯暮x及使用?!窭斫庾訝顟B(tài)機圖組合狀態(tài)?!裾莆胀綘顟B(tài)、歷史狀態(tài)的使用。

通常狀態(tài)名英文的首字母要大寫,并且最好給狀態(tài)一個以“ing”為結尾的名字。(例如“Dialing”、“Faxing”)。當然有時也無法起這樣的名字(例如“Idle”)。狀態(tài)機是展示狀態(tài)與狀態(tài)轉換的圖狀態(tài)機是一個類的對象所有可能的生命歷程的模型。當對象探測到一個事件后,它依照當前的狀態(tài)做出反應,反應包括執(zhí)行一個動作和轉換到新狀態(tài)。什么是狀態(tài)圖UML狀態(tài)機圖能夠展示這種變化,描述了一個對象所處的可能狀態(tài)以及狀態(tài)之間的轉移,并給出了狀態(tài)變化序列的起點和終點。

狀態(tài)機圖也叫狀態(tài)(state),或狀態(tài)表(statechart)。

狀態(tài)機圖與類圖、對象圖和用例圖有著本質的不同。前面章節(jié)介紹過的這3種圖能夠對一個系統(tǒng)或者至少是一組類、對象或用例建立模型。而狀態(tài)圖只是對單個對象建立模型。

表征系統(tǒng)變化的方法可以說成是對象改變了自己的狀態(tài)(state)以響應事件和時間的流逝。例如:當你拉下電燈的開關時,電燈改變了它的狀態(tài),由關變?yōu)殚_。當你按下遠程遙控器的調(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)轉移(Transition)事件(Event)活動(Activity)動作(Action)狀態(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)的4種形式添加動作的狀態(tài),狀態(tài)名與動作中間以一條斜線隔開狀態(tài)狀態(tài)是對象執(zhí)行某項活動或等待某個事件時的條件和狀況狀態(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)時所執(zhí)行的動作。entry/動作exit/動作內(nèi)部轉換在不使狀態(tài)發(fā)生變更的情況下進行的轉移。事件名[監(jiān)護條件]/動作延遲事件延遲到下一狀態(tài)中處理的事件表示:事件/defer子狀態(tài)嵌套在另外一個狀態(tài)中的狀態(tài)組合狀態(tài)包含子狀態(tài)的狀態(tài)稱為組合狀態(tài)(CompositeState)

將子狀態(tài)機單獨定義,對其進行命名(通常以大寫字母開頭),然后在需要使用的地方來引用它例順序狀態(tài)如果一個組成狀態(tài)的子狀態(tài)對應的對象在其生命周期內(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)先到達終態(tài),先到的將等待,直到所有子狀態(tài)到達終態(tài)。并發(fā)子狀態(tài)同步狀態(tài)同步狀態(tài)是連接兩個并發(fā)狀態(tài)區(qū)域的特殊狀態(tài)。

組合狀態(tài)圖區(qū)域之間是獨立的,如果要求對并發(fā)區(qū)域之間的控制進行同步,就需要同步狀態(tài)。歷史狀態(tài)歷史狀態(tài)用于在復雜的組合中標記轉移過后需要返回的狀態(tài)。UML狀態(tài)機圖中歷史狀態(tài)分為淺歷史狀態(tài)(歷史狀態(tài))和深歷史狀態(tài)(詳細歷史狀態(tài))兩種。例當從狀態(tài)“結賬”和“顯示購物車”返回子狀態(tài)“顯示索引信息”時,將進入的是離開時的歷史狀態(tài)。也就是說,轉到購物或結賬區(qū)之后,再回到“瀏覽目錄”的頁面時,其中的內(nèi)容是不變的,仍然保留原來的信息。子狀態(tài)機引用狀態(tài)

子狀態(tài)機引用狀態(tài)是表示激活其他子狀態(tài)機的狀態(tài)。聲明子狀態(tài)機引用狀態(tài)時,使用關鍵字include來標記。如子狀態(tài)機不是通過初態(tài)和終態(tài)進入和退出子狀態(tài)機,可以用樁狀態(tài)來實現(xiàn)。樁狀態(tài)分為入口樁和出口樁,表示非默認的入口和出口。轉移用來顯示從一個狀態(tài)到另一個狀態(tài)的處理流。轉換定義了處于此狀態(tài)的對象對外界發(fā)生的事件所做出的反應。轉移有多種,如自轉移、內(nèi)部轉移、自動轉移和復合轉移等。轉移自轉移復合轉移自動轉移內(nèi)部轉移轉移轉移的組成源狀態(tài)轉換激發(fā)前對象所處的狀態(tài)目標狀態(tài)轉換完成后,對象所處的狀態(tài)觸發(fā)事件引起轉換的事件監(jiān)護條件布爾表達式,真則觸發(fā)事件有效動作轉換被激活時,對應的動作被執(zhí)行轉換轉移的區(qū)別進入和退出轉換:當進入一個狀態(tài)時,執(zhí)行某個動作;或當退出某個狀態(tài)時,執(zhí)行什么動作。這時就可以使用進入和退出轉換來表示內(nèi)部轉換:用來處理一些不離開該狀態(tài)的事件事件事件是發(fā)生在時間和空間上可以定位,并值得注意的事情。如果某一事情的發(fā)生造成了影響,那么在狀態(tài)模型中它是一個事件在OO中,事件是對一個可觀察的事情的規(guī)格說明,這種事情的發(fā)生可以引發(fā)狀態(tài)的轉換事件可能有參數(shù)來辨別每個實例,就像類用屬性來辨別每個對象通常事件后跟一個監(jiān)護條件,監(jiān)護條件為假,事件不能觸發(fā)。如turnOn[有水]事件種類信號事件調(diào)用事件改變事件時間事件延遲事件事件種類1)信號事件所謂信號,是指由一個對象異步地發(fā)送、并由另外一個對象接收的一個已命名的對象。一個對象對一個信號實例的接收導致一個信號事件信號可以在類圖中被聲明為類元,并用關鍵字《signal》表示,信號的參數(shù)被聲明為屬性。信號的等級組織事件種類2)調(diào)用事件對操作調(diào)用的接收調(diào)用事件一般是同步的事件種類3)時間事件指定事件后,經(jīng)過一段時間或到了指定時間,導致的一個時間事件。如after(5妙),after(A推出后5妙)事件種類4)改變事件用布爾表達式描述的指派條件變?yōu)檎妫蛯е乱粋€改變事件。無論表達式的值何時由假變?yōu)檎?,事件都發(fā)生變?yōu)檎鏁r,事件發(fā)生一次,即使之后變?yōu)榧?,產(chǎn)生的事件仍將保持,直到它被處理為止用when(bullexpress)表示事件種類5)延遲事件延遲事件是在當前狀態(tài)不處理、推遲或排隊等到對象轉移到另一個狀態(tài)再處理的事件。延遲事件使用關鍵字defer來標識,語法形式為:延遲事件/defer.轉移的細節(jié):事件和動作可以對狀態(tài)轉移線添加一些細節(jié)??梢灾该饕疝D移發(fā)生的事件(觸發(fā)器事件)和引起狀態(tài)變化所需執(zhí)行的計算(動作)。添加的事件和動作寫在轉移線上,觸發(fā)器事件和動作名之間用反斜杠隔開。有時一個事件會引起沒有相關動作的狀態(tài)轉移,或者有時一個轉移是由于某個狀態(tài)完成了它的活動所引起(而不是由于事件引起)。這種類型的狀態(tài)轉移被稱為無觸發(fā)器轉移。

圖形用戶界面(GUI)是一個可以說明狀態(tài)轉移細節(jié)的例子。在這里,假設GUI可以處于以下3種狀態(tài)之一:Initializing(初始化)。

Working(工作)。

ShutDown(關閉)。當打開PC電源的時候,自啟動發(fā)生。因此TurningthePCon(打開PC)是一個觸發(fā)器事件,它導致了GUI的狀態(tài)轉移到Initializing狀態(tài),而Bootup(自啟動)是一個在轉移過程中執(zhí)行的動作。

由于Initializing狀態(tài)中活動的完成,GUI將轉移進入Working狀態(tài)。當你對PC選擇ShutDown(關閉機器)時,就生成了一個引起轉移到ShutingDown狀態(tài)的觸發(fā)器事件,最后PC自己切斷電源,整個過程結束。下面的狀態(tài)圖捕獲了GUI的這些狀態(tài)和轉移。轉移的細節(jié):監(jiān)視條件上面對GUI的狀態(tài)變遷還有考慮不全之處。首先,如果你離開,你的計算機將無人照管或者你漫無目的坐在一旁,不打字或不碰鼠標,那么過一段時間屏幕保護程序就會運行。用狀態(tài)轉移的術語來說,就是如果GUI在足夠的時間內(nèi)沒有接收到用戶的輸入,那么它將從Working狀態(tài)轉移到另一種狀態(tài)——Screensaving(屏幕保護)狀態(tài)。

進入屏幕保護狀態(tài)取決于指定的時間間隔。比如是15分鐘。15分鐘的時間間隔是一個保護條件——當滿足這個條件時,轉移才能發(fā)生。

在前面的例子中,引起從Screensaving轉移到working的觸發(fā)器事件可能是一個擊鍵操作、一次鼠標移動或者一次鼠標點擊。任何這種類型的事件實際上是一個從用戶到GUI的消息。因為對象之間正是通過相互發(fā)送消息進行通信,因此這是一個重要概念。在這種情況下,觸發(fā)器事件是從一個對象(用戶)消息和信號到另一個對象(GUI)的消息。在接收對象的狀態(tài)圖中,能夠觸發(fā)一個狀態(tài)轉移的消息叫做信號(signal)。在面向對象領域里,發(fā)送一個信號就等同于創(chuàng)建一個信號類的實例并將這個信號實例傳送給接收對象。信號也有自己的屬性。如果將信號看成是一個類,那么可以建立信號之間繼承層次的類圖。用來操縱電視機的遙控器是信號發(fā)送者的一個好例子,并且提供給我們建立信號類層次模型的機會。這個例子也提供了學習使用構造型的好機會。記住構造型是UML的自擴展方式。UML沒有專門為狀態(tài)機建模一般需以下步驟標識出需要進一步建模的實體標識出實體的開始狀態(tài)和結束狀態(tài)選定實體中一組有意義的對狀態(tài)有影響的屬性,結合事件動作條件以決定該對象的狀態(tài)確定與實體相關的事件用被適當?shù)氖录|發(fā)的轉換將這些狀態(tài)連接起來識別各狀態(tài)的進入推出動作如果必要,則建立復合狀態(tài)狀態(tài)機圖應用對對象生命周期建模:主要描述對象能夠響應的事件、對這些事件的響以及過去對當前行為的影響對反應型對象建模:這個對象可能處于的穩(wěn)定狀態(tài),從一個狀態(tài)到另一個狀態(tài)之間的轉換所需的觸發(fā)事件,以及每個狀態(tài)改變時發(fā)生的動作狀態(tài)機圖既可以用來表示一個業(yè)務領域的知識,也可以用來描述設計階段對象的狀態(tài)變遷訂單處理訂單處理(復合)

狀態(tài)圖能幫助分析員、設計員和開發(fā)人員理解系統(tǒng)中對象的行為。類圖和對應的對象圖只展示出系統(tǒng)的靜態(tài)方面。它們展示的是系統(tǒng)靜態(tài)層次和關聯(lián),并能告訴你系統(tǒng)的行為是什么。但它們不能說明這些行為的動態(tài)細節(jié)。

為什么狀態(tài)機圖很重要?開發(fā)人員尤其要知道對象是如何表現(xiàn)自己的行為的,因為他們要用軟件實施這些行為。僅僅實施對象是不夠的,開發(fā)人員還必須讓對象做該做的事情。狀態(tài)機圖可以確保開發(fā)人員能夠清楚的了解對象應該做什么,而不用自己去猜測它。如果有了一幅展示對象行為的清晰圖景,那么開發(fā)小組構造出的系統(tǒng)滿足需求的可能性就會大大增加。小結

系統(tǒng)中的對象改變自身的狀態(tài)以響應事件和時間流逝,UML狀態(tài)機圖就能捕獲這些狀態(tài)變化。狀態(tài)圖的焦點是一個對象的狀態(tài)變化。狀態(tài)用一個圓角矩形表示,狀態(tài)轉移用帶箭頭的實線表示,它指向目標狀態(tài)。狀態(tài)圖標中要寫明狀態(tài)名,并且可以添加動作。轉移可能作為對觸發(fā)事件的響應而發(fā)生的,并且需要一個活動。轉移也可能因為狀態(tài)中的活動的完成而引起,這種方式發(fā)生的轉移叫做無觸發(fā)器轉移。最后,轉移還可能起因于一個特定條件(守衛(wèi)條件)的滿足而引起。有時候狀態(tài)可以包含子狀態(tài)。子狀態(tài)可能是順序的(一個接著一個地發(fā)生)或者是并發(fā)的(同時發(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)。當一個對象向另一個對象發(fā)送稍息時,就觸發(fā)了第2個對象的狀態(tài)圖中的某個轉移,這個消息就被稱為信號。使用擴展的構造型《Signal》的類圖標,可以建立信號的繼承層次。

UML必須包括狀態(tài)機圖,因為它能幫助分析員、設

溫馨提示

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

評論

0/150

提交評論