第10章:UML系統(tǒng)分析與設(shè)計(jì)-狀態(tài)圖_第1頁(yè)
第10章:UML系統(tǒng)分析與設(shè)計(jì)-狀態(tài)圖_第2頁(yè)
第10章:UML系統(tǒng)分析與設(shè)計(jì)-狀態(tài)圖_第3頁(yè)
第10章:UML系統(tǒng)分析與設(shè)計(jì)-狀態(tài)圖_第4頁(yè)
第10章:UML系統(tǒng)分析與設(shè)計(jì)-狀態(tài)圖_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 UML系統(tǒng)分析與設(shè)計(jì)系統(tǒng)分析與設(shè)計(jì)n狀態(tài)圖的概念狀態(tài)圖的概念n構(gòu)成狀態(tài)圖的元素構(gòu)成狀態(tài)圖的元素n狀態(tài)圖的組成狀態(tài)圖的組成n創(chuàng)建狀態(tài)圖創(chuàng)建狀態(tài)圖n創(chuàng)建狀態(tài)圖實(shí)例分析創(chuàng)建狀態(tài)圖實(shí)例分析n狀態(tài)圖由、和5部分組成: 1. 狀態(tài)指的是對(duì)象在其生命周期中的一種狀況狀態(tài)指的是對(duì)象在其生命周期中的一種狀況,處于某個(gè)特定狀態(tài)中的對(duì)象必然會(huì)滿足某些條件、執(zhí)行某些動(dòng)作或者是等待某些事件。一個(gè)狀態(tài)的生命周期是一個(gè)有限的時(shí)間階段。 2. 轉(zhuǎn)換指的是兩個(gè)不同狀態(tài)之間的一種關(guān)系轉(zhuǎn)換指的是兩個(gè)不同狀態(tài)之間的一種關(guān)系,表明對(duì)象將在第一個(gè)狀態(tài)中執(zhí)行一定的動(dòng)作,并且在滿足某個(gè)特定條件下由某個(gè)事件觸發(fā)進(jìn)入第二個(gè)狀態(tài)。 3. 事件指

2、的是發(fā)生在時(shí)間和空間上的對(duì)狀態(tài)機(jī)來(lái)講有意義的那些事情事件指的是發(fā)生在時(shí)間和空間上的對(duì)狀態(tài)機(jī)來(lái)講有意義的那些事情。事件通常會(huì)引起狀態(tài)的變遷,促使?fàn)顟B(tài)機(jī)從一種狀態(tài)切換到另一種狀態(tài),如信號(hào)、對(duì)象額度創(chuàng)建和銷毀等。 4. 活動(dòng)指的是狀態(tài)機(jī)中進(jìn)行的非原子操作活動(dòng)指的是狀態(tài)機(jī)中進(jìn)行的非原子操作。 5. 動(dòng)作指的是狀態(tài)機(jī)中可以執(zhí)行的那些原子操作動(dòng)作指的是狀態(tài)機(jī)中可以執(zhí)行的那些原子操作,所謂原子操作指的是它們?cè)谶\(yùn)行的過(guò)程中不能被其他消息所中斷,必須一直執(zhí)行下去,最終導(dǎo)致?tīng)顟B(tài)的變更或者返回一個(gè)值。n狀態(tài)用于對(duì)實(shí)體在其生命周期中的各種狀況進(jìn)行建模,一個(gè)實(shí)體總是在有限的一段時(shí)間內(nèi)保持一個(gè)狀態(tài)。狀態(tài)由一個(gè)帶圓角的矩形

3、表示,狀態(tài)的描述應(yīng)該包括:名稱、入口和出口動(dòng)作、內(nèi)部轉(zhuǎn)換和嵌套狀態(tài)。 在UML的狀態(tài)建模機(jī)制中,轉(zhuǎn)換用帶箭頭的直線表示,一端連接源狀態(tài),箭頭指向目標(biāo)狀態(tài)。轉(zhuǎn)換還可以標(biāo)注與此轉(zhuǎn)換相關(guān)的選項(xiàng),如事件、監(jiān)護(hù)條件和動(dòng)作等,如果轉(zhuǎn)換上沒(méi)有標(biāo)注觸發(fā)轉(zhuǎn)換的事件,則表示此轉(zhuǎn)換自動(dòng)進(jìn)行。n每個(gè)狀態(tài)圖都應(yīng)該有一個(gè)初始狀態(tài),它代表狀態(tài)圖的起始位置。初始狀態(tài)是一個(gè)偽狀態(tài)(一個(gè)和普通狀態(tài)有連接的假狀態(tài)),對(duì)象不可能保持在初始狀態(tài),必須要有一個(gè)輸出的無(wú)觸發(fā)轉(zhuǎn)換(沒(méi)有事件觸發(fā)器的轉(zhuǎn)換)。通常初始狀態(tài)上的轉(zhuǎn)換是無(wú)監(jiān)護(hù)條件的,并且初始狀態(tài)只能作為轉(zhuǎn)換的源,而不能作為轉(zhuǎn)換的目標(biāo)。n一個(gè)狀態(tài)圖只能有一個(gè)初始狀態(tài),用一個(gè)實(shí)心的圓表示

4、。 n終止?fàn)顟B(tài)是一個(gè)狀態(tài)圖的終點(diǎn),一個(gè)狀態(tài)圖可以擁有一個(gè)或者多個(gè)終止?fàn)顟B(tài)。n對(duì)象可以保持在終止?fàn)顟B(tài),但是終止?fàn)顟B(tài)不可能有任何形式的觸發(fā)轉(zhuǎn)換,它的目的就是為了激發(fā)封裝狀態(tài)上的完成轉(zhuǎn)換。n活動(dòng)圖和狀態(tài)圖中都有需要根據(jù)給定條件進(jìn)行判斷,然后根據(jù)不同的判斷結(jié)果進(jìn)行不同的轉(zhuǎn)換情況。n實(shí)際就是工作流在此處按監(jiān)護(hù)條件的取值發(fā)生分支,在UML中判定用空心菱形表示。 (1)狀態(tài)圖清晰的描述了狀態(tài)之間的轉(zhuǎn)換順序,通過(guò)狀態(tài)的轉(zhuǎn)換順序也就可以清晰的看出事件的執(zhí)行順序。如果沒(méi)有狀態(tài)圖我們就不可避免的要使用大量的文字來(lái)描述外部事件的合法順序。 (2)清晰的事件順序有利于程序員在開(kāi)發(fā)程序時(shí)避免出現(xiàn)事件錯(cuò)序的情況。 (3)狀

5、態(tài)圖清晰的描述了狀態(tài)轉(zhuǎn)換時(shí)所必須的觸發(fā)事件、監(jiān)護(hù)條件和動(dòng)作等影響轉(zhuǎn)換的因素,有利于程序員避免程序中非法事件的進(jìn)入。 (4)狀態(tài)圖通過(guò)判定可以更好的描述工作流因?yàn)椴煌臈l件發(fā)生的分支。n狀態(tài)名:在實(shí)際使用中,狀態(tài)名通常是直觀、易懂、能充分表達(dá)語(yǔ)義的名詞短語(yǔ),其中每個(gè)單詞的首字母要大寫(xiě)。n內(nèi)部活動(dòng):狀態(tài)可以包含描述為表達(dá)式的內(nèi)部活動(dòng)。當(dāng)狀態(tài)進(jìn)入時(shí),活動(dòng)在進(jìn)入動(dòng)作完成后就開(kāi)始。如果活動(dòng)結(jié)束,狀態(tài)就完成,然后一個(gè)從這個(gè)狀態(tài)出發(fā)的轉(zhuǎn)換被觸發(fā)。n內(nèi)部轉(zhuǎn)換:狀態(tài)可能包含一系列的內(nèi)部轉(zhuǎn)換,內(nèi)部轉(zhuǎn)換因?yàn)橹挥性礌顟B(tài)而沒(méi)有目標(biāo)狀態(tài),所以內(nèi)部轉(zhuǎn)換的結(jié)果并不改變狀態(tài)本身。如果對(duì)象的事件在對(duì)象正處在擁有轉(zhuǎn)換的狀態(tài)時(shí)發(fā)生,

6、那內(nèi)部轉(zhuǎn)換上的動(dòng)作也被執(zhí)行。n入口和出口動(dòng)作:狀態(tài)可能具有入口和出口動(dòng)作。這些動(dòng)作的目的是封裝這個(gè)狀態(tài),這樣就可以不必知道狀態(tài)的內(nèi)部狀態(tài)而在外部使用它。入口動(dòng)作和出口動(dòng)作原則上依附于進(jìn)入和出去的轉(zhuǎn)換,但是將它們聲明為特殊的動(dòng)作可以使?fàn)顟B(tài)的定義不依賴狀態(tài)的轉(zhuǎn)換,因此起到封裝的作用。n歷史狀態(tài):組成狀態(tài)可能包含歷史狀態(tài)(History stete)。 n轉(zhuǎn)換用于表示一個(gè)狀態(tài)機(jī)的兩個(gè)狀態(tài)之間的一種關(guān)系,即一個(gè)在某初始狀態(tài)的對(duì)象通過(guò)執(zhí)行指定的動(dòng)作并符合一定的條件下進(jìn)入第二種狀態(tài)。n在這個(gè)狀態(tài)的變化中,轉(zhuǎn)換被稱作激發(fā)。在激發(fā)之前的狀態(tài)叫做源狀態(tài),在激發(fā)之后的狀態(tài)叫做目標(biāo)狀態(tài)。簡(jiǎn)單轉(zhuǎn)換只有一個(gè)源狀態(tài)和一個(gè)

7、目標(biāo)狀態(tài)。復(fù)雜轉(zhuǎn)換有不止一個(gè)源狀態(tài)和(或)有不止一個(gè)目標(biāo)狀態(tài)。n外部轉(zhuǎn)換是一種改變狀態(tài)的轉(zhuǎn)換,也是最普通最常見(jiàn)的一種轉(zhuǎn)換。在UML中,它用從源狀態(tài)到目標(biāo)狀態(tài)的帶箭頭的線段表示,其他屬性以文字串附加在箭頭旁。n內(nèi)部轉(zhuǎn)換只有源狀態(tài),沒(méi)有目標(biāo)狀態(tài),不會(huì)激發(fā)入口和出口動(dòng)作,因此內(nèi)部轉(zhuǎn)換激發(fā)的結(jié)果不改變本來(lái)的狀態(tài)。如果一個(gè)內(nèi)部轉(zhuǎn)換帶有動(dòng)作,它也要被執(zhí)行。內(nèi)部轉(zhuǎn)換常用于對(duì)不改變狀態(tài)的插入動(dòng)作建立模型。要注意的是內(nèi)部轉(zhuǎn)換的激發(fā)可能會(huì)掩蓋使用相同事件的外部轉(zhuǎn)換。n內(nèi)部轉(zhuǎn)換的表示法與入口動(dòng)作和出口動(dòng)作的表示法很相似。他們的區(qū)別主要在于入口和出口動(dòng)作使用了保留字“entry”和“exit”,其它部分兩者的表示法相

8、同。 n完成轉(zhuǎn)換沒(méi)有明確標(biāo)明觸發(fā)器事件的轉(zhuǎn)換是由狀態(tài)中活動(dòng)的完成引起的。完成轉(zhuǎn)換也可以帶一個(gè)監(jiān)護(hù)條件,這個(gè)監(jiān)護(hù)條件在狀態(tài)中的活動(dòng)完成時(shí)被賦值,而不是活動(dòng)完成后被賦值。n轉(zhuǎn)換可能具有一個(gè)監(jiān)護(hù)條件,監(jiān)護(hù)條件是一個(gè)布爾表達(dá)式,它是觸發(fā)轉(zhuǎn)換必須滿足的條件。當(dāng)一個(gè)觸發(fā)器事件被觸發(fā)時(shí),監(jiān)護(hù)條件被賦值。如果表達(dá)式的值為真,轉(zhuǎn)換可以激發(fā);如果表達(dá)式的值為假,轉(zhuǎn)換不能激發(fā);如果沒(méi)有轉(zhuǎn)換適合激發(fā),事件會(huì)被忽略,這種情況并非錯(cuò)誤。如果轉(zhuǎn)換沒(méi)有監(jiān)護(hù)條件,監(jiān)護(hù)條件就被認(rèn)為是真,而且一旦觸發(fā)器事件發(fā)生,轉(zhuǎn)換就激活。n從一個(gè)狀態(tài)引出的多個(gè)轉(zhuǎn)換可以有同樣的觸發(fā)器事件。若此事件發(fā)生,所有監(jiān)護(hù)條件都被測(cè)試,測(cè)試的結(jié)果如果有超過(guò)一

9、個(gè)的值為真,也只有一個(gè)轉(zhuǎn)換會(huì)激發(fā)。如果沒(méi)有給定優(yōu)先權(quán),則選擇哪個(gè)轉(zhuǎn)換來(lái)激發(fā)是不確定的。n觸發(fā)器事件就是能夠引起狀態(tài)轉(zhuǎn)換的事件。如果此事件有參數(shù),這些參數(shù)可以被轉(zhuǎn)換所用,也可以被監(jiān)護(hù)條件和動(dòng)作的表達(dá)式所用。觸發(fā)器事件可以是信號(hào)、調(diào)用和時(shí)間段等。n對(duì)應(yīng)與觸發(fā)器事件,沒(méi)有明確的觸發(fā)器事件的轉(zhuǎn)換稱作結(jié)束轉(zhuǎn)換(或無(wú)觸發(fā)器轉(zhuǎn)換),是在結(jié)束時(shí)被狀態(tài)中的任一內(nèi)部活動(dòng)隱式觸發(fā)的。n動(dòng)作(action)通常是一個(gè)簡(jiǎn)短的計(jì)算處理過(guò)程或一組可執(zhí)行語(yǔ)句。動(dòng)作也可以是一個(gè)動(dòng)作序列,即一系列簡(jiǎn)單的動(dòng)作。動(dòng)作可以給另一個(gè)對(duì)象發(fā)送消息、調(diào)用一個(gè)操作、設(shè)置返回值、創(chuàng)建和銷毀對(duì)象。n動(dòng)作是原子性的,所以動(dòng)作是不可中斷的動(dòng)作是原子性

10、的,所以動(dòng)作是不可中斷的,動(dòng)作和動(dòng)作序列的執(zhí)行不會(huì)被同時(shí)發(fā)生的其他動(dòng)作影響或終止。動(dòng)作的執(zhí)行時(shí)間非常短,所以動(dòng)作的執(zhí)行過(guò)程不能再插入其他事件。如果在動(dòng)作的執(zhí)行期間接收到事件,那么這些事件都會(huì)被保存,直到動(dòng)作結(jié)束,這時(shí)事件一般已經(jīng)得到值。n判定用來(lái)表示一個(gè)事件依據(jù)不同的監(jiān)護(hù)條件有不同的影響。在實(shí)際建模的過(guò)程中,如果遇到需要使用判定的情況,通常用監(jiān)護(hù)條件來(lái)覆蓋每種可能,使得一個(gè)事件的發(fā)生能保證觸發(fā)一個(gè)轉(zhuǎn)換。n判定在活動(dòng)圖和狀態(tài)圖中都有很重要的作用。轉(zhuǎn)換路徑因?yàn)榕卸ǘ譃槎鄠€(gè)分支,可以將一個(gè)分支的輸出部分與另外一個(gè)分支的輸入部分連接而組成一棵樹(shù),樹(shù)的每個(gè)路徑代表一個(gè)不同的轉(zhuǎn)換。樹(shù)為建模提供了很大的方

11、便。n在活動(dòng)圖中,判定可以覆蓋所有的可能,保證一些轉(zhuǎn)換被激發(fā)。否則,活動(dòng)圖就會(huì)因?yàn)檩敵鲛D(zhuǎn)換不再重新激發(fā)而被凍結(jié)。 同步條是為了說(shuō)明并發(fā)工作流的分支與匯合。狀態(tài)圖和活動(dòng)圖中都可能用到同步。在UML中,同步用一條線段來(lái)表示。n在狀態(tài)機(jī)中,一個(gè)事件的出現(xiàn)可以觸發(fā)狀態(tài)的改變?cè)跔顟B(tài)機(jī)中,一個(gè)事件的出現(xiàn)可以觸發(fā)狀態(tài)的改變。它發(fā)生在時(shí)間和空間上的一點(diǎn),沒(méi)有持續(xù)時(shí)間。如接受到從一個(gè)對(duì)象到另一個(gè)對(duì)象的調(diào)用或信號(hào)、某些值的改變或一個(gè)時(shí)間段的終結(jié)。n事件可以分成明確或隱含的幾種,主要包括:信號(hào)事件、調(diào)用事件、改變事件和時(shí)間事件等。n如果一個(gè)組成狀態(tài)的多個(gè)子狀態(tài)之間是互斥的,不能同時(shí)存在的,這種組成狀態(tài)稱為順序組成狀

12、態(tài)。n一個(gè)順序組成狀態(tài)最多可以有一個(gè)初始狀態(tài)和一個(gè)終態(tài),同時(shí)也最多可以由一個(gè)淺(shallow)歷史狀態(tài)和一個(gè)深(deep)歷史狀態(tài)。n在一個(gè)組成狀態(tài)中,可能有兩個(gè)或者多個(gè)并發(fā)的子狀態(tài)機(jī),我們稱這樣的組成狀態(tài)為并發(fā)組成狀態(tài)。每個(gè)并發(fā)子狀態(tài)還可以進(jìn)一步分解為順序組成狀態(tài)。n一個(gè)并發(fā)組成狀態(tài)可能沒(méi)有初始狀態(tài),終態(tài),或者歷史狀態(tài)。但是嵌套在它們里的任何順序組成狀態(tài)可包含這些偽狀態(tài)。 在Rational Rose中,可以為每個(gè)類創(chuàng)建一個(gè)或者多個(gè)狀態(tài)圖,類的轉(zhuǎn)換和狀態(tài)都可以在狀態(tài)圖中體現(xiàn)。首先,展開(kāi)“Logic View”菜單項(xiàng),然后在“Logic View”圖標(biāo)上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“Ne

13、w”下的“Statechart Diagram”選項(xiàng)建立新的狀態(tài)圖。 n初始狀態(tài)和終止?fàn)顟B(tài)是狀態(tài)圖中的兩個(gè)特殊狀態(tài)。初始狀態(tài)代表著狀態(tài)圖的起點(diǎn),終止?fàn)顟B(tài)代表著狀態(tài)圖的終點(diǎn)。對(duì)象不可能保持在初始狀態(tài),但是可以保持在終止?fàn)顟B(tài)。n初始狀態(tài)在狀態(tài)圖中用實(shí)心圓表示,終止?fàn)顟B(tài)在狀態(tài)圖中用含有實(shí)心圓的空心圓表示。鼠標(biāo)左鍵點(diǎn)擊狀態(tài)圖工具欄中的對(duì)應(yīng)圖標(biāo),然后在繪制區(qū)域要繪制的地方單擊鼠標(biāo)左鍵就可以創(chuàng)建初始狀態(tài)。終止?fàn)顟B(tài)的創(chuàng)建方法和初始狀態(tài)相同。 n首先用鼠標(biāo)左鍵單擊狀態(tài)圖工具欄中對(duì)應(yīng)圖標(biāo),然后在繪制區(qū)域要?jiǎng)?chuàng)建狀態(tài)的地方單擊鼠標(biāo)左鍵。 n創(chuàng)建新的狀態(tài)后,我們可以修改狀態(tài)的屬性信息。雙擊狀態(tài)圖標(biāo),在彈出的對(duì)話框“G

14、eneral”選項(xiàng)卡里進(jìn)行如名稱“Name”和文檔說(shuō)明“Documentation”等屬性的設(shè)置。 n轉(zhuǎn)換是兩個(gè)狀態(tài)之間的一種關(guān)系,代表了一種狀態(tài)到另一種狀態(tài)的過(guò)度,在UML中轉(zhuǎn)換用一條帶箭頭的直線表示。n要增加轉(zhuǎn)換,首先用鼠標(biāo)左鍵單擊狀態(tài)工具欄中的圖標(biāo),然后再用鼠標(biāo)左鍵單擊轉(zhuǎn)換的源狀態(tài),接著向目標(biāo)狀態(tài)拖動(dòng)一條直線。 一個(gè)事件可以觸發(fā)狀態(tài)的轉(zhuǎn)換。要增加事件,先雙擊轉(zhuǎn)換圖標(biāo),在出現(xiàn)的對(duì)話框的“General”選項(xiàng)卡里增加事件, 接下來(lái),在“Event”選項(xiàng)中添加觸發(fā)轉(zhuǎn)換的事件,在“Argument”選項(xiàng)中添加事件的參數(shù),還可以在“Documentation”選項(xiàng)中添加對(duì)事件的描述。 n監(jiān)護(hù)條件是一個(gè)布爾表達(dá)式,它控制轉(zhuǎn)換是否能夠發(fā)生。n要添加監(jiān)護(hù)條件,先雙擊轉(zhuǎn)換的圖標(biāo),選擇出現(xiàn)的對(duì)話框中的“Detail”選項(xiàng)卡的“Guard Condition”選項(xiàng),然后填入監(jiān)護(hù)條件??梢詤⒖继砑觿?dòng)作的方法添加監(jiān)護(hù)條件。n要?jiǎng)?chuàng)建狀態(tài)圖,首先要標(biāo)識(shí)出哪些實(shí)體需要使用狀態(tài)圖進(jìn)一步建模。雖然我們可以為每一個(gè)類、操作、包或用例創(chuàng)建狀態(tài)圖,但是這樣做勢(shì)必浪費(fèi)很多的精力。n從另一個(gè)角度看,而不必用于具有復(fù)雜行為的實(shí)體。使用活動(dòng)圖可能會(huì)更加適合那些有復(fù)雜行為

溫馨提示

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

評(píng)論

0/150

提交評(píng)論