第九章狀態(tài)圖new_第1頁
第九章狀態(tài)圖new_第2頁
第九章狀態(tài)圖new_第3頁
第九章狀態(tài)圖new_第4頁
第九章狀態(tài)圖new_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章狀態(tài)圖9.1.1狀態(tài)機狀態(tài)機是一種記錄下給定時刻狀態(tài)的設(shè)備,是展示狀態(tài)與狀態(tài)之間轉(zhuǎn)換的圖。UML用狀態(tài)機對軟件系統(tǒng)的動態(tài)特征建模。通常一個狀態(tài)機依附于一個類,并且描述一個類的實例。狀態(tài)機包含了一個類的對象在其生命期間所有狀態(tài)的序列以及對象對接受到的事件所產(chǎn)生的反應(yīng)。利用狀態(tài)機可以精確地描述對象的行為。狀態(tài)機也可用于描述整個系統(tǒng)的行為。9.1狀態(tài)機狀態(tài)機由5個部分組成(見書):狀態(tài)(State)轉(zhuǎn)換(Transition)事件(Event)活動(Activity)動作(Action)狀態(tài)機狀態(tài)機由狀態(tài)、轉(zhuǎn)換、事件、活動和動作5部分組成:(1)狀態(tài)指的是對象在其生命周期中的一種狀況,處于某個特定狀態(tài)中的對象必然會滿足某些條件、執(zhí)行某些動作或者是等待某些事件。一個狀態(tài)的生命周期是一個有限的時間階段。(2)轉(zhuǎn)換指的是兩個不同狀態(tài)之間的一種關(guān)系,表明對象將在第一個狀態(tài)中執(zhí)行一定的動作,并且在滿足某個特定條件下由某個事件觸發(fā)進入第二個狀態(tài)。

狀態(tài)機(3)事件指的是發(fā)生在時間和空間上的對狀態(tài)機來講有意義的那些事情。事件通常會引起狀態(tài)的變遷,促使狀態(tài)機從一種狀態(tài)切換到另一種狀態(tài),如信號、對象額度創(chuàng)建和銷毀等。(4)活動指的是狀態(tài)機中進行的非原子操作。(5)動作指的是狀態(tài)機中可以執(zhí)行的那些原子操作,所謂原子操作指的是它們在運行的過程中不能被其他消息所中斷,必須一直執(zhí)行下去,最終導致狀態(tài)的變更或者返回一個值。9.1.2狀態(tài)圖一個狀態(tài)圖本質(zhì)上是一個狀態(tài)機或者是狀態(tài)機的特殊情況。狀態(tài)圖表現(xiàn)從一個狀態(tài)到另一個狀態(tài)的控制流。狀態(tài)圖由狀態(tài)、轉(zhuǎn)換、事件、活動和動作5部分組成:狀態(tài)狀態(tài)用于對實體在其生命周期中的各種狀況進行建模,一個實體總是在有限的一段時間內(nèi)保持一個狀態(tài)。狀態(tài)由一個帶圓角的矩形表示,狀態(tài)的描述應(yīng)該包括:名稱、入口和出口動作、內(nèi)部轉(zhuǎn)換和嵌套狀態(tài)。轉(zhuǎn)換轉(zhuǎn)換用帶箭頭的直線表示,一端連接源狀態(tài)即轉(zhuǎn)出的狀態(tài),箭頭一端連接目標狀態(tài)即轉(zhuǎn)入的狀態(tài)。轉(zhuǎn)換可以標注與此轉(zhuǎn)換相關(guān)的選項如事件、動作和監(jiān)護條件。

初始狀態(tài)初始狀態(tài)代表狀態(tài)圖的起始位置,只能作為轉(zhuǎn)換的源,而不能作為轉(zhuǎn)換的目標。初始狀態(tài)在一個狀態(tài)圖中只允許有一個,它用一個實心的圓表示。終止狀態(tài)終止狀態(tài)是模型元素的最后狀態(tài),是一個狀態(tài)圖的終止點。終止狀態(tài)只能作為轉(zhuǎn)換的目標,而不能作為轉(zhuǎn)換的源。終止狀態(tài)在一個狀態(tài)圖中可以有多個,它用一個套有一個實心圓的空心圓表示。判定判定在狀態(tài)圖中的位置:工作流在此處按監(jiān)護條件的取值而發(fā)生分支。判定用空心小菱形表示。判定因為監(jiān)護條件為布爾表達式,所以通常條件下的判定只有一個入轉(zhuǎn)換和兩個出轉(zhuǎn)換。根據(jù)監(jiān)護條件的真假可以觸發(fā)不同的分支轉(zhuǎn)換。9.1.3狀態(tài)圖作用為什么要使用狀態(tài)圖狀態(tài)圖的作用主要體現(xiàn)在以下幾個方面:(1)狀態(tài)圖清晰的描述了狀態(tài)之間的轉(zhuǎn)換順序,通過狀態(tài)的轉(zhuǎn)換順序也就可以清晰的看出事件的執(zhí)行順序。如果沒有狀態(tài)圖我們就不可避免的要使用大量的文字來描述外部事件的合法順序。(2)清晰的事件順序有利于程序員在開發(fā)程序時避免出現(xiàn)事件錯序的情況。(3)狀態(tài)圖清晰的描述了狀態(tài)轉(zhuǎn)換時所必須的觸發(fā)事件、監(jiān)護條件和動作等影響轉(zhuǎn)換的因素,有利于程序員避免程序中非法事件的進入。(4)狀態(tài)圖通過判定可以更好的描述工作流因為不同的條件發(fā)生的分支。9.2狀態(tài)圖的組成狀態(tài)圖由狀態(tài)、轉(zhuǎn)換、事件、活動和動作5部分組成,本節(jié)詳細介紹。9.2.1狀態(tài)狀態(tài)是指在對象生命周期中滿足某些條件、執(zhí)行某些活動或等待某些事件的一個條件和狀況一個狀態(tài)通常包括狀態(tài)名、入口動作和出口動作、內(nèi)部轉(zhuǎn)換、子狀態(tài)和事件等五個部分組成.狀態(tài)種類:簡單狀態(tài)(SimpleState)組成狀態(tài)(CompositeState)狀態(tài)名狀態(tài)名表示狀態(tài)的名字,通常用字符串表示。一個狀態(tài)的名稱在狀態(tài)圖所在的上下文中應(yīng)該是唯一的。不過,狀態(tài)允許匿名。狀態(tài)的名字通常放在狀態(tài)圖標的頂部入口動作與出口動作入口動作和出口動作表示進入或退出這個狀態(tài)所要執(zhí)行的動作。入口動作用“entry/要執(zhí)行的動作”表達,而出口動作用“exit/要執(zhí)行的動作”表達。do:用來指定處于狀態(tài)時發(fā)生的動作;event:用來指定當特定事件觸發(fā)時發(fā)生的動作。內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換對事件做出響應(yīng),并執(zhí)行一個特定的活動,但并不引起狀態(tài)變化,因此不需要執(zhí)行入口和出口動作。內(nèi)部轉(zhuǎn)換和自轉(zhuǎn)換不同,雖然兩者都不改變狀態(tài)本身,但是自轉(zhuǎn)換會激發(fā)入口動作和出口動作的執(zhí)行,而內(nèi)部轉(zhuǎn)換卻不會。內(nèi)部轉(zhuǎn)換:用來處理一些不離開該狀態(tài)的事件.

簡單狀態(tài)簡單狀態(tài)是指不包含其他狀態(tài)的狀態(tài)。簡單狀態(tài)沒有子結(jié)構(gòu),但它可以具有內(nèi)部轉(zhuǎn)換、入口動作和出口動作等。9.2.2轉(zhuǎn)換轉(zhuǎn)換表示當一個特定事件發(fā)生或者某些條件得到滿足時,一個源狀態(tài)下的對象在完成一定的動作后將發(fā)生狀態(tài)轉(zhuǎn)變,轉(zhuǎn)向另一個稱之為目標狀態(tài)的狀態(tài)。轉(zhuǎn)換進入的狀態(tài)為活動狀態(tài),轉(zhuǎn)換離開的狀態(tài)變?yōu)榉腔顒訝顟B(tài)。9.2.2

轉(zhuǎn)換轉(zhuǎn)換組成:源狀態(tài):即受轉(zhuǎn)換影響的狀態(tài)目標狀態(tài):當轉(zhuǎn)換完成后對象的狀態(tài)觸發(fā)事件:用來為轉(zhuǎn)換定義一個事件,包括調(diào)用、改變、信號、時間四類事件監(jiān)護條件:布爾表達式,決定是否激活轉(zhuǎn)換動作:轉(zhuǎn)換激活時的操作9.2.2轉(zhuǎn)換轉(zhuǎn)換種類:外部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換自轉(zhuǎn)換復合轉(zhuǎn)換外部轉(zhuǎn)換外部轉(zhuǎn)換是一種改變對象狀態(tài)的轉(zhuǎn)換,是最常見的一種轉(zhuǎn)換。外部轉(zhuǎn)換對事件做出響應(yīng),引起狀態(tài)變化或自身轉(zhuǎn)換,同時引發(fā)一個特定動作。外部轉(zhuǎn)換用從源狀態(tài)到目標狀態(tài)的箭頭表示。內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換只有源狀態(tài),沒有目標狀態(tài),不會激發(fā)入口和出口動作,因此內(nèi)部轉(zhuǎn)換激發(fā)的結(jié)果不改變本來的狀態(tài)。如果一個內(nèi)部轉(zhuǎn)換帶有動作,它也要被執(zhí)行。內(nèi)部轉(zhuǎn)換常用于對不改變狀態(tài)的插入動作建立模型。要注意的是內(nèi)部轉(zhuǎn)換的激發(fā)可能會掩蓋使用相同事件的外部轉(zhuǎn)換。內(nèi)部轉(zhuǎn)換的表示法與入口動作和出口動作的表示法很相似。他們的區(qū)別主要在于入口和出口動作使用了保留字“entry”和“exit”,其它部分兩者的表示法相同。內(nèi)部轉(zhuǎn)換和自轉(zhuǎn)換不同:自轉(zhuǎn)換是離開本狀態(tài)后重新進入該狀態(tài),它會激發(fā)狀態(tài)的入口動作和出口動作的執(zhí)行。內(nèi)部轉(zhuǎn)換自始至終都不離開本狀態(tài),所以沒有出口或入口事件,也就不執(zhí)行入口和出口動作。觸發(fā)事件觸發(fā)事件是能夠引起狀態(tài)轉(zhuǎn)換的事件。閱讀最簡單的狀態(tài)圖與狀態(tài)off相關(guān)的轉(zhuǎn)換有兩個,其觸發(fā)事件都是turnOn,只不過其監(jiān)護條件不同。如果對象收到事件turnOn,那么將判斷壺中是否有水;如果[沒水],則仍然處于off狀態(tài);如果[有水]則轉(zhuǎn)為on狀態(tài),并執(zhí)行“燒水”動作而與狀態(tài)on相關(guān)的轉(zhuǎn)換也有兩個,如果“水開了”就執(zhí)行turnOff,關(guān)掉開關(guān);如果燒壞了,就進入了終態(tài)了監(jiān)護條件監(jiān)護條件是觸發(fā)轉(zhuǎn)換必須滿足的條件,它是一個布爾表達式。監(jiān)護條件只能在觸發(fā)事件發(fā)生時被賦值一次,如果在轉(zhuǎn)換發(fā)生后監(jiān)護條件才由假變?yōu)檎妫敲崔D(zhuǎn)換也不會被觸發(fā)。從一個狀態(tài)引出的多個轉(zhuǎn)換可以有同樣的觸發(fā)器事件,但是每個轉(zhuǎn)換必須具有不同的監(jiān)護條件。動作動作(action)通常是一個簡短的計算處理過程或一組可執(zhí)行語句。動作也可以是一個動作序列,即一系列簡單的動作。動作可以給另一個對象發(fā)送消息、調(diào)用一個操作、設(shè)置返回值、創(chuàng)建和銷毀對象。動作是原子性的,所以動作是不可中斷的,動作和動作序列的執(zhí)行不會被同時發(fā)生的其他動作影響或終止。動作的執(zhí)行時間非常短,所以動作的執(zhí)行過程不能再插入其他事件。如果在動作的執(zhí)行期間接收到事件,那么這些事件都會被保存,直到動作結(jié)束,這時事件一般已經(jīng)得到值。9.2.4同步

同步條是為了說明并發(fā)工作流的分支與匯合。狀態(tài)圖和活動圖中都可能用到同步。在UML中,同步用一條線段來表示。

9.2.5事件在狀態(tài)機中,一個事件的出現(xiàn)可以觸發(fā)狀態(tài)的改變。它發(fā)生在時間和空間上的一點,沒有持續(xù)時間。如接受到從一個對象到另一個對象的調(diào)用或信號、某些值的改變或一個時間段的終結(jié)。事件可以分成明確或隱含的幾種,主要包括:信號事件、調(diào)用事件、改變事件和時間事件等。案例:Account對象的狀態(tài)圖9.3.6組成狀態(tài)組成狀態(tài)是可以包含一些嵌套的子狀態(tài)的狀態(tài)。組成狀態(tài)可以使用“與”關(guān)系分解為并發(fā)子狀態(tài),或者通過“或”關(guān)系分解為互相排斥的順序子狀態(tài)。組成狀態(tài)的一個入轉(zhuǎn)換代表對其嵌套子狀態(tài)區(qū)域內(nèi)的初始狀態(tài)的入轉(zhuǎn)換;對嵌套子狀態(tài)區(qū)域內(nèi)的終結(jié)狀態(tài)的轉(zhuǎn)換代表包含它的終止狀態(tài)的相應(yīng)活動的完成。9.3.6組成狀態(tài)(P179)嵌套的子狀態(tài)的分類1.順序子狀態(tài)2.并發(fā)子狀態(tài)1.順序子狀態(tài)如果一個組成狀態(tài)的子狀態(tài)對應(yīng)的對象在其生命期內(nèi)的任何時刻都只能處于一個子狀態(tài),即多個子狀態(tài)之間是互斥的,不能同時存在,這種子狀態(tài)稱為順序子狀態(tài)。當狀態(tài)機通過轉(zhuǎn)換從某種狀態(tài)轉(zhuǎn)入組成狀態(tài)時,此轉(zhuǎn)換的目的可能是這個組成狀態(tài)本身,也可能是這個組成狀態(tài)的子狀態(tài)。例:2.并發(fā)子狀態(tài)有時組合狀態(tài)有兩個或者多個并發(fā)的子狀態(tài)機,此時稱組成狀態(tài)的子狀態(tài)為并發(fā)子狀態(tài)。順序子狀態(tài)與并發(fā)子狀態(tài)的區(qū)別在于后者在同一層次給出兩個或多個順序子狀態(tài),對象處于同一層次中來自每個并發(fā)子狀態(tài)的一個時序狀態(tài)中。例:見書9.3.7歷史狀態(tài)歷史狀態(tài)代表上次離開組成狀態(tài)時的最后一個活動子狀態(tài),它用一個包含字母“H”的小圓圈表示。每當轉(zhuǎn)換到組成狀態(tài)的歷史狀態(tài)時,對象便恢復到上次離開該組成狀態(tài)時的最后一個活動子狀態(tài),并執(zhí)行入口動作。例:見書

思考與練習手機開機時,處于空閑狀態(tài);當用戶開始呼叫某人時,手機進入撥號狀態(tài);如果呼叫成功,進入通話狀態(tài);如果呼叫不成功,重新進入空閑狀態(tài)。在空閑狀態(tài)被呼叫,進入響鈴狀態(tài);如果用戶接聽,進入通話狀態(tài);如果一分鐘不接聽,重新進入空閑狀態(tài)。

Answer:idledialingworkingringingfinishconnection9.6狀態(tài)圖建模技術(shù)建模步驟:尋找主要的狀態(tài)確定狀態(tài)之間的轉(zhuǎn)換細化狀態(tài)內(nèi)的活動與轉(zhuǎn)換,可用復合狀態(tài)來展開細節(jié)繪制狀態(tài)機圖--航班機票預訂系統(tǒng)尋找主要狀態(tài):對于航班機票預訂系統(tǒng)而言,顯然包括的狀態(tài)主要有

--在剛確定飛機計劃時,顯然是沒有任何預訂的,并且在有人預訂機票之前都將處于這種“無預訂”狀態(tài)

--對訂座而言顯然有“部分預訂”和“預訂完”兩種狀態(tài)

--而當航班快要起飛時,顯然要“預訂關(guān)閉”

總結(jié)一下,主要有四種狀態(tài):無預訂、部分預訂、預訂完以及預訂關(guān)閉繪制狀態(tài)機圖確定狀態(tài)間轉(zhuǎn)換繪制狀態(tài)機圖細化狀態(tài)內(nèi)的活動與轉(zhuǎn)換繪制狀態(tài)機圖使用復合狀態(tài)使用Rose創(chuàng)建狀態(tài)圖1.創(chuàng)建狀態(tài)圖在RationalRose中,可以為每個類創(chuàng)建一個或者多個狀態(tài)圖類的轉(zhuǎn)換和狀態(tài)都可以在狀態(tài)圖中體現(xiàn)。首先,展開“LogicView”菜單項,然后在“LogicView”圖標上單擊鼠標右鍵,在彈出的菜單中選擇“New”下的“StatechartDiagram”選項建立新的狀態(tài)圖。使用Rose創(chuàng)建狀態(tài)圖2.創(chuàng)建初始和終止狀態(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)圖中用含有實心圓的空心圓表示。鼠標左鍵點擊狀態(tài)圖工具欄中的“”圖標,然后在繪制區(qū)域要繪制的地方單擊鼠標左鍵就可以創(chuàng)建初始狀態(tài)。終止狀態(tài)的創(chuàng)建方法和初始狀態(tài)相同。使用Rose創(chuàng)建狀態(tài)圖3.創(chuàng)建狀態(tài)首先用鼠標左鍵單擊狀態(tài)圖工具欄中對應(yīng)圖標,然后在繪制區(qū)域要創(chuàng)建狀態(tài)的地方單擊鼠標左鍵。創(chuàng)建新的狀態(tài)后,我們可以修改狀態(tài)的屬性信息。雙擊狀態(tài)圖標,在彈出的對話框“General”選項卡里進行如名稱“Name”和文檔說明“Documentation”等屬性的設(shè)置。

使用Rose創(chuàng)建狀態(tài)圖4.創(chuàng)建狀態(tài)間的轉(zhuǎn)換轉(zhuǎn)換是兩個狀態(tài)之間的一種關(guān)系,代表了一種狀態(tài)到另一種狀態(tài)的過度,在UML中轉(zhuǎn)換用一條帶箭頭的直線表示。要增加轉(zhuǎn)換,首先用鼠標左鍵單擊狀態(tài)工具欄中的圖標,然后再用鼠標左鍵單擊轉(zhuǎn)換的源狀態(tài),接著向目標狀態(tài)拖動一條直線。使用Rose創(chuàng)建狀態(tài)圖5.創(chuàng)建事件一個事件可以觸發(fā)狀態(tài)的轉(zhuǎn)換。要增加事件,先雙擊轉(zhuǎn)換圖標,在出現(xiàn)的對話框的“General”選項卡里增加事件,接下來,在“Event”選項中添加觸發(fā)轉(zhuǎn)換的事件,在“Argument”選項中添加事件的參數(shù),還可以在“Documentation”選項中添加對事件的描述。使用Rose創(chuàng)建狀態(tài)圖6.創(chuàng)建監(jiān)護條件監(jiān)護條件是一個布爾表達式,它控制轉(zhuǎn)換是否能夠發(fā)生。要添加監(jiān)護條件,先雙擊轉(zhuǎn)換的圖標,選擇出現(xiàn)的對話框中的“Detail”選項卡的“GuardCondition”選項,然后填入監(jiān)護條件??梢詤⒖继砑觿幼鞯姆椒ㄌ砑颖O(jiān)護條件。創(chuàng)建項目中的狀態(tài)圖1.確定狀態(tài)圖的實體要創(chuàng)建狀態(tài)圖,首先要標識出哪些實體需要使用狀態(tài)圖進一步建模。雖然我們可以為每一個類、操作、包或用例創(chuàng)建狀態(tài)圖,但是這樣做勢必浪費很多的精力。一般來說,不需要給所有的類都創(chuàng)建狀態(tài)圖,只有具有重要動態(tài)行為的類才需要。從另一個角度看,狀態(tài)圖應(yīng)該用于復雜的實體,而不必用于具有復雜行為的實體。使用活動圖可能會更加適合那些有復雜行為的實體。具有清晰、有序的狀態(tài)實體最適合使用狀態(tài)圖進一步建模。對于學生選課來說,需要建模的實體就是學生賬號。創(chuàng)建項目中的狀態(tài)圖2.確定狀態(tài)圖中實體的狀態(tài)對于一個學生賬號來說,它的狀態(tài)主要包括:初始狀態(tài)終止狀態(tài)可選課狀態(tài)不可選課狀態(tài)賬號被刪除狀態(tài)創(chuàng)建項目中的狀態(tài)圖3.創(chuàng)建相關(guān)事件完成狀態(tài)圖當確定了需要建模的實體,并找出了實體的初始狀態(tài)和終止狀態(tài)以及其他相關(guān)狀

溫馨提示

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

評論

0/150

提交評論