UML中的幾種其他圖_第1頁(yè)
UML中的幾種其他圖_第2頁(yè)
UML中的幾種其他圖_第3頁(yè)
UML中的幾種其他圖_第4頁(yè)
UML中的幾種其他圖_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章建立輔助模型一、概念與表示法1、概述

順序圖(SequenceDiagram)是一種詳細(xì)表示對(duì)象之間以及對(duì)象與參與者實(shí)例之間交互的圖,它由一組協(xié)作的對(duì)象(或參與者實(shí)例)以及它們之間可發(fā)送的消息組成,它強(qiáng)調(diào)消息之間的順序。

[對(duì)象名]:類(lèi)名圖中含有對(duì)象(參與者)、消息、生命線(xiàn)和執(zhí)行規(guī)約。5.1順序圖類(lèi)圖對(duì)對(duì)象之間的消息(交互情況)表達(dá)不夠詳細(xì);詳細(xì)說(shuō)明對(duì)消息的表達(dá)雖然詳細(xì),但不夠直觀;順序圖是二維的:垂直方向表示時(shí)間,水平方向表示不同的對(duì)象或參與者。通常時(shí)間維由上到下(根據(jù)需要,也可以由下到上)。通常只有時(shí)間順序是重要的,但在實(shí)時(shí)應(yīng)用中時(shí)間軸是能度量的。對(duì)象的水平順序并不重要,順序可以是任意的。

t02、對(duì)象生命線(xiàn)把對(duì)象表示成稱(chēng)之為“生命線(xiàn)”的垂直虛線(xiàn)。生命線(xiàn)代表一個(gè)對(duì)象在特定時(shí)間內(nèi)的存在。

在圖的頂部(第一個(gè)箭頭之上)放置在交互開(kāi)始時(shí)就存在的對(duì)象,而在整個(gè)交互完成時(shí)仍然存在的對(duì)象的生命線(xiàn),要延伸超出最后一個(gè)箭頭。

如果一個(gè)對(duì)象在圖中所規(guī)定的時(shí)間段被創(chuàng)建,那么就把創(chuàng)建對(duì)象的箭頭的頭部畫(huà)在對(duì)象符號(hào)上。如果對(duì)象在圖中被銷(xiāo)毀,那么用一個(gè)大的“X”標(biāo)記它的析構(gòu),該標(biāo)記或者放在引起析構(gòu)的箭頭處,或者放在從被銷(xiāo)毀的對(duì)象最終返回的箭頭處(在自析構(gòu)的情況下)。生命線(xiàn)可以分裂成兩條或更多條并發(fā)的生命線(xiàn),以表示條件性。這樣的每一個(gè)生命線(xiàn)對(duì)應(yīng)于交互中的一個(gè)條件分支。生命線(xiàn)可以在某個(gè)后續(xù)點(diǎn)處合并。

執(zhí)行規(guī)約表示一個(gè)對(duì)象直接或者通過(guò)從屬例程執(zhí)行一個(gè)行為的時(shí)期。它既表示了行為執(zhí)行的持續(xù)時(shí)間,也表示了調(diào)用者與被調(diào)用者之間的控制關(guān)系。

用一個(gè)窄長(zhǎng)的矩形表示執(zhí)行規(guī)約,矩形頂端和它的開(kāi)始時(shí)刻對(duì)齊,末端和它的結(jié)束時(shí)刻對(duì)齊。執(zhí)行規(guī)約符號(hào)的頂端畫(huà)在進(jìn)入的箭頭的尖端(開(kāi)始該動(dòng)作的那個(gè)箭頭),底端畫(huà)在返回的箭頭的尾部。當(dāng)一個(gè)對(duì)象處于執(zhí)行規(guī)約期時(shí),該對(duì)象能夠響應(yīng)或發(fā)送消息,執(zhí)行對(duì)象或活動(dòng)。當(dāng)一個(gè)對(duì)象不處于執(zhí)行規(guī)約期時(shí),該對(duì)象不做什么事情,但它是存在的,等待新的消息執(zhí)行規(guī)約它。若調(diào)用一個(gè)對(duì)象的另一個(gè)操作,第二個(gè)執(zhí)行規(guī)約符號(hào)畫(huà)在第一個(gè)符號(hào)稍微靠右的位置。遞歸?3、執(zhí)行規(guī)約

消息是對(duì)象之間的通訊的規(guī)格說(shuō)明,這樣的通訊用于傳輸將發(fā)生的活動(dòng)所需要的信息——控制信息(如調(diào)用)和所使用的數(shù)據(jù)的規(guī)格說(shuō)明。

一個(gè)消息會(huì)調(diào)用另一個(gè)對(duì)象的操作,調(diào)用本對(duì)象的操作,向另一個(gè)對(duì)象發(fā)送一個(gè)信號(hào),創(chuàng)建或者撤消一個(gè)對(duì)象(可以自己銷(xiāo)毀自己),還可能向調(diào)用者返回一個(gè)結(jié)果。把消息表示為從一個(gè)對(duì)象生命線(xiàn)到另一個(gè)對(duì)象生命線(xiàn)的一個(gè)水平實(shí)線(xiàn)箭頭,即從源對(duì)象指向目標(biāo)對(duì)象,以觸發(fā)目標(biāo)對(duì)象中的特定操作。對(duì)于對(duì)象到自身的消息,箭頭就從同一個(gè)對(duì)象符號(hào)開(kāi)始和結(jié)束。用消息(操作或信號(hào))的名字及其參數(shù)值或者參數(shù)表達(dá)式標(biāo)示箭頭。

4、消息用如下種類(lèi)的箭頭表示不同種類(lèi)的通訊:

同步消息一般把它用于普通的過(guò)程調(diào)用。在外層控制恢復(fù)之前,要完成整個(gè)嵌套序列。通常把它用于普通的過(guò)程調(diào)用。同步消息返回

用它顯式地表示從過(guò)程調(diào)用的返回。在控制的過(guò)程流中,可以省略返回箭頭(暗示執(zhí)行規(guī)約結(jié)束),這是要假設(shè)每個(gè)調(diào)用在任何消息后都有一個(gè)配對(duì)的返回。若需要標(biāo)識(shí)返回值,則要顯式地把它標(biāo)示在返回的箭頭上。

對(duì)象的創(chuàng)建與銷(xiāo)毀:客戶(hù)機(jī):JDBC代理服務(wù)器:事務(wù)創(chuàng)建setAction(a,d,o)Setvalue(d,3.9)Setvalue(a,”pm”)已提交銷(xiāo)毀在過(guò)程性代碼的情況下,一個(gè)執(zhí)行規(guī)約表示在一個(gè)對(duì)象中一個(gè)過(guò)程是活動(dòng)的,或者它的從屬過(guò)程(可能在其它的對(duì)象中)是活動(dòng)的持續(xù)時(shí)間。換句話(huà)說(shuō),可以在一個(gè)特定的時(shí)間看到所有活動(dòng)著的嵌套過(guò)程執(zhí)行規(guī)約。異步消息

用它表示異步通訊,即發(fā)送者發(fā)出消息后,立即繼續(xù)執(zhí)行中的下一步,不進(jìn)行等待。

異步消息返回若請(qǐng)求方發(fā)了一個(gè)異步消息,且接收方響應(yīng)它后要返回信息,則使用另一個(gè)異步消息。

注意:消息與對(duì)消息的響應(yīng)。

在多數(shù)情況下,收發(fā)消息的時(shí)間是可以忽略的。通常消息箭頭都畫(huà)成水平的。這表示發(fā)送消息所需要的持續(xù)時(shí)間是“原子的”(即,它與交互的粒度相比是短暫的,并且在傳送消息的中間不能發(fā)生任何事情)。這在很多計(jì)算機(jī)中都被假設(shè)是正確的。如果需要表示收發(fā)消息間的時(shí)間差,有三種方法:(1)可以在圖中使用約束,用于指示時(shí)間間隔。可以用消息名和經(jīng)過(guò)規(guī)定的函數(shù)書(shū)寫(xiě)計(jì)時(shí)表達(dá)式,如下圖的“b.receiveTime–a.sendTime<1分鐘”。(2)若要在圖中顯式地表示時(shí)間差的數(shù)值,還可以通過(guò)構(gòu)造標(biāo)記來(lái)指明,如下圖右下角所示。(3)如果需要表示發(fā)送消息是需要時(shí)間的,還可把消息箭線(xiàn)向下傾斜,使箭線(xiàn)頭部在尾部下方,表示消息需要一段時(shí)間到達(dá)。消息分支把分支畫(huà)成從一個(gè)點(diǎn)出發(fā)的多個(gè)箭頭,每個(gè)箭頭由監(jiān)護(hù)條件標(biāo)示。依據(jù)監(jiān)護(hù)條件是否互斥,這個(gè)結(jié)構(gòu)可以表達(dá)條件或者并發(fā)。消息循環(huán)標(biāo)以持續(xù)的條件:*[條件]方框圍起來(lái)的區(qū)域?yàn)橹貜?fù)的。通過(guò)使用預(yù)定的接口或消息設(shè)施(如分布式系統(tǒng)中的中間件)來(lái)實(shí)現(xiàn)和管理各軟件部件間的請(qǐng)求通信。例題:打電話(huà)問(wèn)題:時(shí)間超過(guò)30秒的情況沒(méi)說(shuō)明會(huì)話(huà)對(duì)象沒(méi)有說(shuō)明計(jì)費(fèi)等情況把電話(huà)機(jī)換為打電話(huà)的人如何?s:電話(huà)c:會(huì)話(huà):交換機(jī)a:拿起話(huà)筒b:發(fā)撥號(hào)聲邏輯連通連接s與rr:電話(huà)c:*撥號(hào){時(shí)間少于30秒}創(chuàng)建陣鈴拿起話(huà)筒接通接通{b.receiveTime-a.sendTime<1分鐘}{c.receiveTime-c.sendTime<1秒}<5秒{30秒}例題銀行系統(tǒng)的交易驗(yàn)證:交易信用:交易檢查器:交易協(xié)調(diào)器創(chuàng)建返回有效性創(chuàng)建創(chuàng)建擔(dān)保:交易檢查器創(chuàng)建成功全部做完?全部做完?成功[]回調(diào)機(jī)制:申請(qǐng)對(duì)象在服務(wù)對(duì)象處事先登記所關(guān)心的事件,然后繼續(xù)從事自己的工作;當(dāng)服務(wù)對(duì)象監(jiān)控到這樣的事件發(fā)生時(shí),再通知申請(qǐng)對(duì)象,由申請(qǐng)對(duì)象進(jìn)行處理。

5、信號(hào)

信號(hào)是對(duì)象之間的異步通訊的規(guī)格說(shuō)明。*

信號(hào)名 ‘(‘用逗號(hào)分隔的參數(shù)列表‘)’《signal》abca1a2a3QWmoveto()xyz《send》abc(a1,a2,a3)在類(lèi)圖中,在類(lèi)符號(hào)上用關(guān)鍵字<<signal>>聲明信號(hào)。把參數(shù)說(shuō)明為屬性。信號(hào)沒(méi)有操作。在類(lèi)的描述模板中,要指定所能接收的信號(hào)。發(fā)送者在發(fā)送信號(hào)時(shí),要實(shí)例化其參數(shù)。對(duì)于接收者來(lái)說(shuō),它收到的是一個(gè)事件。通常用信號(hào)向另一個(gè)(組)對(duì)象發(fā)送一組數(shù)據(jù)或信號(hào)量建模,也可對(duì)異常情況建模。從一個(gè)對(duì)象可以向另一個(gè)對(duì)象或?qū)ο蟮募习l(fā)送信號(hào)。例如消息廣播?!秙ignal》abca1a2a3QWmoveto()《send》abcxyz發(fā)送者在發(fā)送信號(hào)時(shí),要實(shí)例化其參數(shù)。二、順序圖中的結(jié)構(gòu)化控制

序列性的消息能很好地說(shuō)明單一的線(xiàn)性的序列,但是我們通常需要展示條件和循環(huán)。有時(shí)候我們想要展示多個(gè)序列的并行執(zhí)行。在順序圖中用結(jié)構(gòu)化控制操作符能展示這種高層控制。

為了表示順序圖的邊界,可以把順序圖用一個(gè)封閉的矩形包圍起來(lái),并在矩形的左上角放一個(gè)小五邊形。在這個(gè)小五邊形內(nèi)先寫(xiě)上sd,再后面寫(xiě)出圖的名字。對(duì)每個(gè)子順序圖加上一個(gè)矩形區(qū)域作為外框,再在其左上角放一個(gè)小五邊形,在這個(gè)小五邊形內(nèi)寫(xiě)上用來(lái)表明控制操作符的類(lèi)型的文字。delivercash可選執(zhí)行標(biāo)簽是opt。如果控制進(jìn)入該操作符標(biāo)識(shí)的交互區(qū)域時(shí)監(jiān)護(hù)條件成立,那么執(zhí)行該交互區(qū)域。監(jiān)護(hù)條件是一個(gè)用方括號(hào)括起來(lái)的布爾表達(dá)式,它要出現(xiàn)在交互區(qū)域內(nèi)部第一條生命線(xiàn)的頂端,在其中可以引用該對(duì)象的屬性。

條件執(zhí)行標(biāo)簽為alt。用水平虛線(xiàn)把交互區(qū)域分割成幾個(gè)分區(qū),每個(gè)分區(qū)表示一個(gè)條件分支并有一個(gè)監(jiān)護(hù)條件。如果一個(gè)分區(qū)的監(jiān)護(hù)條件為真,就執(zhí)行這個(gè)分區(qū),但最多只能執(zhí)行一個(gè)分區(qū)。如果有多于一個(gè)監(jiān)護(hù)條件為真,那么選擇哪個(gè)分區(qū)是不確定的。若沒(méi)有應(yīng)對(duì)措施,在模型中要避免這種情況。如果所有的監(jiān)護(hù)條件都不為真,那么控制流將跨過(guò)這個(gè)交互區(qū)域而繼續(xù)執(zhí)行。其中的一個(gè)分區(qū)可以用特殊的監(jiān)護(hù)條件[else],這意味著如果其他所有區(qū)域的監(jiān)護(hù)條件都為假,就執(zhí)行該分區(qū)。并行執(zhí)行標(biāo)簽是par。用水平虛線(xiàn)把交互區(qū)域分割為幾個(gè)分區(qū)。每個(gè)分區(qū)表示一個(gè)并發(fā)計(jì)算。當(dāng)控制進(jìn)入交互區(qū)域時(shí)并發(fā)地執(zhí)行所有的分區(qū);在并行分區(qū)都執(zhí)行完后,那么該并行操作符標(biāo)識(shí)的交互區(qū)域也就執(zhí)行完畢。每個(gè)分區(qū)內(nèi)的消息是順序執(zhí)行的。需要指出的是,并發(fā)并不總是意味著物理上的同時(shí)執(zhí)行。并發(fā)其實(shí)是說(shuō)兩個(gè)動(dòng)作沒(méi)有協(xié)作關(guān)系,而且可按任意次序發(fā)生。如果它們確實(shí)是獨(dú)立的動(dòng)作,那么它們還可以交疊。

循環(huán)(迭代)執(zhí)行標(biāo)簽是loop。在交互區(qū)域內(nèi)的頂端給出一個(gè)監(jiān)護(hù)條件。只要在每次迭代之前監(jiān)護(hù)條件成立,那么循環(huán)主體就會(huì)重復(fù)執(zhí)行。一旦在交互區(qū)域頂部的監(jiān)護(hù)條件為假,控制就會(huì)跳出該交互區(qū)域。三、建立順序圖步驟:■按照當(dāng)前交互的意圖,如系統(tǒng)的一次執(zhí)行,或者一組對(duì)象(包括參與者實(shí)例,以下不再明確地提及參與者實(shí)例)之間的協(xié)作,詳細(xì)地審閱有關(guān)材料(如有關(guān)的用況),*設(shè)置交互的語(yǔ)境,其中包括可能需要的那些對(duì)象?!鐾ㄟ^(guò)識(shí)別對(duì)象在交互中扮演的角色,在順序圖的上部列出所選定的一組對(duì)象(應(yīng)該給出其類(lèi)名),并為每個(gè)對(duì)象設(shè)置生命線(xiàn)。通常把發(fā)起交互的對(duì)象放在左邊?!鰧?duì)于那些在交互期間要被創(chuàng)建和撤銷(xiāo)的對(duì)象,在適當(dāng)?shù)臅r(shí)刻,用消息箭線(xiàn)顯式地予以指明。■決定消息將怎樣或以什么樣的序列在對(duì)象之間傳遞。通過(guò)首先發(fā)出消息的對(duì)象,看它需要哪些對(duì)象為它提供操作,它向那些對(duì)象提供操作。追蹤相關(guān)的對(duì)象,進(jìn)一步做這種模擬,直到分析完與當(dāng)前語(yǔ)境有關(guān)的全部對(duì)象。如果一個(gè)對(duì)象的操作在某個(gè)執(zhí)行點(diǎn)上應(yīng)該向另一個(gè)對(duì)象發(fā)消息,則從這一點(diǎn)向后者畫(huà)一條帶箭頭的直線(xiàn),并在其上注明消息名。用適當(dāng)?shù)募^線(xiàn)區(qū)別各種消息。

按需在各對(duì)象下方的生命線(xiàn)上,按使用該對(duì)象操作的先后次序排列各個(gè)代表操作執(zhí)行的棒形條(執(zhí)行規(guī)約)。若出于某種目的要簡(jiǎn)化順序圖,可不畫(huà)棒型條,或者針對(duì)一個(gè)對(duì)象只用一個(gè)棒型條代表其上的所有操作的執(zhí)行。兩個(gè)對(duì)象的操作執(zhí)行如果屬于同一個(gè)控制線(xiàn)程,則接收者操作的執(zhí)行應(yīng)在發(fā)送者發(fā)出消息之后開(kāi)始,并在發(fā)送者結(jié)束之前結(jié)束。不同控制線(xiàn)程之間的消息有可能在接收者的某個(gè)操作的執(zhí)行過(guò)程中到達(dá)。如果需要,也可以對(duì)對(duì)象所執(zhí)行的操作的功能以及時(shí)間或空間約束進(jìn)行描述。如果需要,可使用結(jié)構(gòu)化控制。用途幫助分析員對(duì)照檢查每個(gè)用況中描述的用戶(hù)需求,是否已經(jīng)落實(shí)到一些對(duì)象中去實(shí)現(xiàn)。提醒分析員去補(bǔ)充遺漏的對(duì)象類(lèi)或操作。通過(guò)對(duì)一個(gè)特定的對(duì)象群體的動(dòng)態(tài)方面建模,深刻地理解對(duì)象之間的交互。

幫助分析員發(fā)現(xiàn)哪些對(duì)象是主動(dòng)對(duì)象5.2通訊圖

簡(jiǎn)言之,通訊圖表示圍繞著對(duì)象角色以及對(duì)象角色之間的鏈所組織的交互。

與順序圖不同:1)通訊圖著重扮演不同角色的對(duì)象之間的關(guān)系。2)通訊圖不表示作為單獨(dú)維度的時(shí)間,所以交互的順序和并發(fā)進(jìn)程必須用順序數(shù)決定。順序圖表示執(zhí)行消息的顯式順序,最好用于描述實(shí)時(shí)系統(tǒng)和復(fù)雜的場(chǎng)景。

一、概念與表示法

通信圖是一種強(qiáng)調(diào)發(fā)送和接收消息的對(duì)象結(jié)構(gòu)組織的交互圖,展示圍繞對(duì)象以及它們之間的連接器而組織的交互。

連接器是由關(guān)聯(lián)實(shí)例化的鏈以及通過(guò)過(guò)程參數(shù)、局部變量或全局變量而產(chǎn)生的對(duì)象之間的臨時(shí)連接。通訊圖由對(duì)象(參與者)、連接器以及連接器上的消息構(gòu)成。這些概念及表示法與前述中的都完全相同。

為表示一個(gè)消息的時(shí)間順序,給消息加一個(gè)數(shù)字前綴(從1號(hào)消息開(kāi)始),在控制流中,每個(gè)新的消息的順序號(hào)單調(diào)增加(如2,3等等)。為了顯示嵌套,可使用帶小數(shù)點(diǎn)的號(hào)碼(1表示第一個(gè)消息;1.1表示嵌套在消息1中的第一個(gè)消息;1.2表示嵌套在消息1中的第二個(gè)消息;等等)。

嵌套可為任意深度。要注意的是,沿同一個(gè)鏈,可以顯示多個(gè)消息(可能發(fā)自不同的方向),并且每個(gè)消息都有唯一的一個(gè)順序號(hào)。

C:Clientt:Transactionp:ODBCProxysactioncreateSetActions(a,d,o)》SetValue(d,3.4)SetValue(a,”CO”).4){transient}c:Clientt:Transactionp:ODBCProxysaction1:create2:setAction(a,d,o)2.1:setValues(d,3.4)2.2:setValues(a,”CO”)順序圖和通訊圖在語(yǔ)義上是等價(jià)的,它們可以從一種形式的圖轉(zhuǎn)換為另一種。destroy3:destroy二、建立通訊圖應(yīng)遵循如下策略建立通訊圖: n

設(shè)置交互的語(yǔ)境,不管它是一個(gè)系統(tǒng)、子系統(tǒng)、類(lèi),還是用況的腳本。 n

通過(guò)識(shí)別對(duì)象在交互中扮演的角色,設(shè)置交互的場(chǎng)所。將它們作為圖的頂點(diǎn)放在通訊圖中,較重要的對(duì)象放在圖的中央,然后放置鄰近的對(duì)象。 n

若對(duì)象之間可能要傳遞消息,說(shuō)明對(duì)象之間的連接器。

從引起這個(gè)交互的消息開(kāi)始,然后將隨后的每個(gè)消息附到適當(dāng)?shù)倪B接器上,設(shè)置順序號(hào)。用帶小數(shù)點(diǎn)的編號(hào)來(lái)顯示嵌套。如果需要展示消息的循環(huán)或分支,就是使用相應(yīng)的表示法。

如果需要說(shuō)明時(shí)間或空間約束,則用時(shí)間標(biāo)記修飾每個(gè)消息,并附上合適的時(shí)間和空間約束。

像順序圖一樣,建議一個(gè)單獨(dú)的通訊圖只描述一個(gè)控制流。一般來(lái)說(shuō),可能要建立許多通訊圖,其中一些是基本的,另一些描述的是可選擇的路徑或例外情況??梢允褂冒鼇?lái)組織一組通訊圖,并給每個(gè)圖起一個(gè)合適的名稱(chēng),以便與包中其它圖的相區(qū)別。5.3活動(dòng)圖活動(dòng)圖可用于對(duì)業(yè)務(wù)過(guò)程和操作的算法建模一、概念與表示法

活動(dòng)圖顯示從活動(dòng)到活動(dòng)的流。1、動(dòng)作和活動(dòng)

動(dòng)作(action)是行為規(guī)約的基礎(chǔ)單元,用以描述系統(tǒng)中的活動(dòng),它是原子的和即時(shí)的。動(dòng)作是原子的,是指在與狀態(tài)相關(guān)的抽象層次上,動(dòng)作是不可間斷的;動(dòng)作時(shí)即時(shí)的,是指動(dòng)作執(zhí)行的時(shí)間是可忽略不計(jì)的。如調(diào)用另一個(gè)操作,發(fā)送一個(gè)信號(hào),創(chuàng)建或撤銷(xiāo)一個(gè)對(duì)象,或者某些純計(jì)算(例如對(duì)一個(gè)表達(dá)式求值),都是一個(gè)動(dòng)作。

活動(dòng)(activity)是由一系列的動(dòng)作構(gòu)成的(也稱(chēng)為動(dòng)作表達(dá)式),用于描述系統(tǒng)的一項(xiàng)行為,它由動(dòng)作和其他活動(dòng)組成。在活動(dòng)圖中,動(dòng)作和活動(dòng)具有相同的圖形表示法發(fā)送郵件審批發(fā)票活動(dòng)名前置條件,后置條件………活動(dòng)表示法2、控制流

當(dāng)動(dòng)作或活動(dòng)結(jié)束時(shí),馬上進(jìn)入下一個(gè)動(dòng)作或活動(dòng)。一系列的動(dòng)作和活動(dòng)的執(zhí)行構(gòu)成了一個(gè)控制流。在圖形上,用一個(gè)箭頭表示從一個(gè)動(dòng)作或活動(dòng)到下一個(gè)動(dòng)作或活動(dòng)的轉(zhuǎn)移開(kāi)幕式比賽閉幕式控制流的分支與合并分支合并活動(dòng)流控制流也可以是并發(fā)的。用同步條表示并發(fā)控制流的分岔和匯合。3、對(duì)象流定購(gòu)銷(xiāo)售訂單分岔匯合4、泳道在對(duì)業(yè)務(wù)過(guò)程建模時(shí),可以把活動(dòng)或動(dòng)作分成組,每組由特定的履行者來(lái)執(zhí)行。履行者可為人員、組織或其他業(yè)務(wù)實(shí)體。把每個(gè)組分別稱(chēng)為一個(gè)泳道。5、活動(dòng)圖活動(dòng)圖是展示從動(dòng)作或活動(dòng)間的控制流和對(duì)象流的圖,其中的結(jié)點(diǎn)描述動(dòng)作、活動(dòng)或?qū)ο螅吤枋隹刂屏骰驅(qū)ο罅?。一般用它?duì)計(jì)算過(guò)程中的步驟建模,也可用它對(duì)步驟間的數(shù)值的流動(dòng)建模。上述的計(jì)算過(guò)程可為業(yè)務(wù)過(guò)程,也可為操作的算法。對(duì)于活動(dòng)圖中一個(gè)活動(dòng)結(jié)點(diǎn),可用另一張活動(dòng)圖(子活動(dòng)圖)進(jìn)行詳述。順序圖強(qiáng)調(diào)對(duì)象間的控制流,活動(dòng)圖強(qiáng)調(diào)的是活動(dòng)間的控制流。二、建立活動(dòng)圖對(duì)業(yè)務(wù)過(guò)程建模,要遵循如下的策略:設(shè)置業(yè)務(wù)過(guò)程的語(yǔ)境。即要考慮在特定的語(yǔ)境中要對(duì)哪些業(yè)務(wù)的履行者和業(yè)務(wù)實(shí)體建模??紤]為每個(gè)重要的業(yè)務(wù)的履行者建立一個(gè)泳道。建立初始狀態(tài)和終止?fàn)顟B(tài),并識(shí)別該業(yè)務(wù)過(guò)程的前置條件和后置條件。從初始狀態(tài)開(kāi)始,說(shuō)明隨著時(shí)間發(fā)生的動(dòng)作或活動(dòng),并在活動(dòng)圖中表示它們。如果涉及到重要的對(duì)象,則把它們也加入到活動(dòng)圖中。如果有必要,可展示對(duì)象的屬性值和狀態(tài)。連接這些動(dòng)作和活動(dòng)結(jié)點(diǎn)的流。如果需要,使用分支和合并來(lái)描述條件路徑和迭代,使用分岔和匯合來(lái)描述并發(fā)的動(dòng)作或活動(dòng)流。針對(duì)活動(dòng)建立子活動(dòng)圖??勺鳛橛脹r文字描述的補(bǔ)充對(duì)一個(gè)操作建模時(shí),應(yīng)遵循如下策略:收集該操作所涉及的事物,包括操作的參數(shù)、可能的返回類(lèi)型、它所屬于的類(lèi)以及某些鄰近的類(lèi)的特征。識(shí)別操作的前置條件和后置條件以及操作所屬的類(lèi)在操作執(zhí)行期間必須保持的不變式。從該操作的初始狀態(tài)開(kāi)始,按照時(shí)間順序設(shè)立活動(dòng)或動(dòng)作,并在活動(dòng)圖中將它們表示出來(lái)。如果需要,使用分支和合并來(lái)描述條件路徑和迭代。僅當(dāng)這個(gè)操作屬于一個(gè)主動(dòng)類(lèi)時(shí),才在必要時(shí)用分岔和匯合來(lái)描述并發(fā)的控制流。在OOA階段,僅用活動(dòng)圖對(duì)關(guān)鍵的復(fù)雜操作進(jìn)行建模,用以展示關(guān)于算法的一些信息。除非想直接從模型生成代碼,即使在OOD階段并也不要求用活動(dòng)圖對(duì)每個(gè)操作的算法都建立模型。5.4狀態(tài)機(jī)圖

對(duì)在不同的狀態(tài)下發(fā)揮不同作用的復(fù)雜對(duì)象,可建立狀態(tài)機(jī)圖。對(duì)象a操作1操作2操作3操作4…操作n-1操作n對(duì)象a操作1操作2操作3操作4…操作n-1操作n對(duì)象a操作1操作2操作3操作4…操作n-1操作n……狀態(tài)1狀態(tài)2狀態(tài)m

可具有狀態(tài)機(jī)圖的事物:人員、系統(tǒng)、控制器、事務(wù)、設(shè)備等。

對(duì)事物所處的狀態(tài)及其變遷建模需要考慮:事物在其生命周期中經(jīng)歷了不同的狀態(tài);在特定的時(shí)間,一個(gè)事物精確地位于一個(gè)狀態(tài),發(fā)揮特定的作用;在現(xiàn)實(shí)世界存在著引起事物的狀態(tài)發(fā)生變化的事件;事物在其狀態(tài)間按次序轉(zhuǎn)化;事物從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)化通常是即時(shí)的。當(dāng)事件發(fā)生時(shí),事物可能需要采取一些動(dòng)作。

事物的一般生命周期形式

目前主要有兩種對(duì)生命周期進(jìn)行建模的形式:■周期性生命周期 如:飛機(jī)、微波爐■出生-死亡生命周期

若一個(gè)對(duì)象具有明確的生命期階段(狀態(tài)),且需要通過(guò)狀態(tài)分析對(duì)其復(fù)雜性進(jìn)行深刻地認(rèn)識(shí),就可為它建立一個(gè)狀態(tài)機(jī)圖。對(duì)象1…….對(duì)象n狀態(tài)機(jī)圖1狀態(tài)機(jī)圖n類(lèi)狀態(tài)機(jī)圖在實(shí)際系統(tǒng)中,無(wú)法建立全系統(tǒng)的狀態(tài)機(jī)圖。什么是對(duì)象的狀態(tài)?《對(duì)象技術(shù)詞典》的定義:對(duì)象或者類(lèi)的整體行為(例如響應(yīng)消息)的某些規(guī)則所能適應(yīng)的(對(duì)象或類(lèi)的)狀況、情況、條件、形式或生存周期階段?!茨撤N規(guī)定,按對(duì)象的屬性值劃分等價(jià)類(lèi)例1:為“設(shè)備”對(duì)象設(shè)立一個(gè)屬性,名為“狀態(tài)”屬性值:關(guān)閉、待命、運(yùn)行、故障等。在這里,“狀態(tài)”是一個(gè)專(zhuān)門(mén)設(shè)置的屬性,它的值反映了實(shí)際事物的狀態(tài)。例2:一個(gè)容量為1000的棧,需要區(qū)分幾種狀態(tài)*?空半滿(mǎn)滿(mǎn)壓入彈出可執(zhí)行可執(zhí)行可執(zhí)行可執(zhí)行不可執(zhí)行不可執(zhí)行服務(wù)狀態(tài)在此例中,每一種狀態(tài)是一組使對(duì)象呈現(xiàn)共同行為規(guī)則的屬性值組合。彈出<報(bào)錯(cuò)>狀態(tài)轉(zhuǎn)換示意圖空半滿(mǎn)滿(mǎn)創(chuàng)建彈出(已空)壓入壓入(未滿(mǎn))彈出(未空)壓入(已滿(mǎn))彈出壓入<報(bào)錯(cuò)>狀態(tài)機(jī)圖示例一、概念與表示法1、事件從一般意義上講,事件是指在時(shí)間和空間上可以定位并具有實(shí)際意義、值得注意的所發(fā)生的事情。在OO中,事件是對(duì)一個(gè)可觀察的事情的規(guī)格說(shuō)明,這種事情的發(fā)生可以引發(fā)狀態(tài)的轉(zhuǎn)換。

事件可以分為多種:

1)信號(hào)事件一個(gè)對(duì)象對(duì)一個(gè)信號(hào)實(shí)例(在不引起混淆的情況下,以下簡(jiǎn)稱(chēng)信號(hào))的接收,導(dǎo)致一個(gè)信號(hào)事件。在一個(gè)類(lèi)的符號(hào)中加一個(gè)附件的信號(hào)欄,列出其能接收的信號(hào)。信號(hào)可以作為狀態(tài)機(jī)中的狀態(tài)轉(zhuǎn)換上的動(dòng)作被發(fā)送,或者作為交互中的一個(gè)消息被發(fā)送。2)調(diào)用事件對(duì)操作的調(diào)用的接收(這樣的操作由接收事件的對(duì)象實(shí)現(xiàn))調(diào)用事件一般來(lái)說(shuō)是同步的3)時(shí)間事件

在指定事件(經(jīng)常是當(dāng)前狀態(tài)的入口)后,經(jīng)過(guò)了一定的時(shí)間或到了指定日期/時(shí)間,導(dǎo)致一個(gè)時(shí)間事件。時(shí)間經(jīng)歷事件用后跟有計(jì)算時(shí)間量的表達(dá)式的關(guān)鍵詞“after”表示,比如”after(從狀態(tài)A退出后經(jīng)歷了10秒)”或者“after(5秒)”。如果沒(méi)指明時(shí)間起始點(diǎn),那么從進(jìn)入當(dāng)前狀態(tài)開(kāi)始計(jì)時(shí)。

使用關(guān)鍵字at來(lái)指出在某個(gè)絕對(duì)時(shí)間點(diǎn)上發(fā)生的時(shí)間事件。例如,時(shí)間事件at(1Jan2005,12:00UT)指出該事件發(fā)生在格林尼治時(shí)間2005年1月1日的中午12點(diǎn)。4)改變事件(條件變?yōu)檎媸录┯貌紶柋磉_(dá)式描述的指派條件變?yōu)檎?,就?dǎo)致了一個(gè)改變事件。無(wú)論表達(dá)式的值何時(shí)由假變成真,事件都發(fā)生。與改變事件關(guān)聯(lián)的布爾表達(dá)式的值變成真時(shí)事件發(fā)生一次,即使之后布爾表達(dá)式的值變?yōu)榧?,產(chǎn)生的事件仍將保持,直到它被處理為止。用后有跟布爾表達(dá)式的關(guān)鍵詞“when”表示變?yōu)檎娴臈l件,例如

when(altitude<1000)

可以把其看作是連續(xù)測(cè)試條件,直到它為真。事件的格式:事件名 ‘(‘用逗號(hào)分隔的參數(shù)列表‘)’參數(shù)的格式如下:參數(shù)名 ‘:’類(lèi)型表達(dá)式參數(shù)值由監(jiān)護(hù)條件和動(dòng)作表達(dá)式使用.

事件出現(xiàn)的位置:狀態(tài)內(nèi),轉(zhuǎn)換上。通常事件后面還跟有一個(gè)監(jiān)護(hù)條件(布爾表達(dá)式),當(dāng)事件出現(xiàn)要觸發(fā)轉(zhuǎn)換時(shí),對(duì)它求值:——如果表達(dá)式取值為真,則觸發(fā)轉(zhuǎn)換;——如果為假,則不觸發(fā)轉(zhuǎn)換,而且如果沒(méi)有其他的轉(zhuǎn)換被此事件所觸發(fā),則該事件丟失。2、狀態(tài)

狀態(tài)是一個(gè)對(duì)象的生命期的一個(gè)階段,在該階段中該對(duì)象要滿(mǎn)足一些特定的條件、執(zhí)行特定的活動(dòng)或等待某個(gè)(些)事件。

把狀態(tài)表示成四角均為圓角的矩形,并把狀態(tài)的名稱(chēng)放在其中。

a)

名稱(chēng)分欄在該分欄中放置狀態(tài)名。沒(méi)有名稱(chēng)的狀態(tài)是匿名的,但同一張圖中的匿名狀態(tài)是各不相同的。b)內(nèi)部轉(zhuǎn)換分欄用該分欄給出對(duì)象在這個(gè)狀態(tài)中所執(zhí)行的內(nèi)部動(dòng)作或活動(dòng)的列表。各表項(xiàng)的表示法的基本格式為:事件名[‘(’用逗號(hào)分隔的參數(shù)表‘)’][監(jiān)護(hù)條件][‘/’動(dòng)作表達(dá)式]

用戶(hù)可以自己對(duì)對(duì)事件進(jìn)行命名,只是entry、exit和do這三個(gè)保留字外,因?yàn)閁ML已經(jīng)為它們規(guī)定了特定含義

?內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換分欄中的事件的發(fā)生不會(huì)導(dǎo)致?tīng)顟B(tài)的改變,也就是說(shuō),即使發(fā)生了事件且執(zhí)行了相應(yīng)的動(dòng)作,對(duì)象仍然處于原來(lái)的狀態(tài),故把這樣的事件觸發(fā)的轉(zhuǎn)換稱(chēng)為內(nèi)部轉(zhuǎn)換。?偽狀態(tài)

初始狀態(tài)是狀態(tài)機(jī)圖的缺省開(kāi)始狀態(tài),終止?fàn)顟B(tài)是狀態(tài)機(jī)圖執(zhí)行已經(jīng)畢后的結(jié)束狀態(tài)。?延遲事件延遲事件是指在當(dāng)前狀態(tài)下暫不處理,但將推遲到該對(duì)象的另一個(gè)狀態(tài)下排隊(duì)處理的事件。也就是說(shuō),在某些建模情況下,可能想要識(shí)別某些事件,但延遲對(duì)它們的響應(yīng),直到以后才執(zhí)行。用特殊的動(dòng)作defer表明一個(gè)事件被延遲:

事件/defer事件1,事件2,事件3/defer事件2,事件3/defer事件1/………事件3/………事件2,事件4/defer3、動(dòng)作動(dòng)作是在狀態(tài)內(nèi)或在狀態(tài)轉(zhuǎn)化時(shí)所執(zhí)行的操作,是原子的和即時(shí)的。動(dòng)作可為:設(shè)置或修改本對(duì)象的屬性操作;向一個(gè)對(duì)象發(fā)送信號(hào);調(diào)用另一個(gè)對(duì)象的一個(gè)可見(jiàn)性為公共操作;創(chuàng)建或撤消對(duì)象;返回一個(gè)值或值集;

……

動(dòng)作是原子的,是指在與狀態(tài)相關(guān)的抽象層次上,動(dòng)作是不可間斷的;動(dòng)作是即時(shí)的,是指動(dòng)作執(zhí)行的時(shí)間是可忽略不計(jì)的。

在轉(zhuǎn)換中、在狀態(tài)的入口、在一個(gè)對(duì)象處于一個(gè)狀態(tài)的整個(gè)期間或在狀態(tài)的出口,都是執(zhí)行動(dòng)作的時(shí)機(jī)。

?動(dòng)作表達(dá)式是由一些動(dòng)作組成的動(dòng)作序列。UML的三個(gè)保留字:1)entry/進(jìn)入動(dòng)作表達(dá)式

entry這個(gè)標(biāo)號(hào)標(biāo)識(shí)由相應(yīng)的動(dòng)作表達(dá)式規(guī)定的動(dòng)作,在進(jìn)入狀態(tài)時(shí)首先執(zhí)行該動(dòng)作。它不能有參數(shù)或監(jiān)護(hù)條件。

2)exit/退出動(dòng)作表達(dá)式

exit這個(gè)標(biāo)號(hào)標(biāo)識(shí)由相應(yīng)的動(dòng)作表達(dá)式規(guī)定的動(dòng)作,在退出狀態(tài)時(shí)最后執(zhí)行該動(dòng)作。它不能有參數(shù)或監(jiān)護(hù)條件。

3)do/活動(dòng)

活動(dòng)是在對(duì)象處于一個(gè)狀態(tài)中的整個(gè)階段執(zhí)行的一個(gè)動(dòng)作或動(dòng)作的集合。如:op1(a);op2(b);op3(c)

活動(dòng)不是原子的,在執(zhí)行中可以被事件打斷。動(dòng)作是從不中斷的,但動(dòng)作序列是會(huì)中斷的。也即,在每?jī)蓚€(gè)動(dòng)作之間(由分號(hào)分開(kāi)),由于事件的出現(xiàn),導(dǎo)致一個(gè)離開(kāi)此狀態(tài)的轉(zhuǎn)換。對(duì)象“電影院”do/放映影片

do這個(gè)標(biāo)號(hào)標(biāo)識(shí)正在進(jìn)行的活動(dòng)(“do活動(dòng)”)?;顒?dòng)是一個(gè)動(dòng)作表達(dá)式,它在執(zhí)行中可以被事件中斷。

do活動(dòng)在狀態(tài)的入口動(dòng)作執(zhí)行后開(kāi)始執(zhí)行,并且它與其他的動(dòng)作或活動(dòng)是并發(fā)的。——只要被建模的對(duì)象是在當(dāng)前的狀態(tài)中,就執(zhí)行這個(gè)活動(dòng),直到對(duì)象離開(kāi)該狀態(tài)為止?!鬱o活動(dòng)執(zhí)行完畢后對(duì)象仍處于當(dāng)前狀態(tài),這時(shí)會(huì)導(dǎo)致一個(gè)完成事件,如果存在一條外出的完成轉(zhuǎn)移,若滿(mǎn)足監(jiān)護(hù)條件就退出當(dāng)前狀態(tài)?!绻诨顒?dòng)沒(méi)未完成之前,由于外出轉(zhuǎn)換的激發(fā)(滿(mǎn)足監(jiān)護(hù)條件)而導(dǎo)致了狀態(tài)的退出,就中斷活動(dòng)。EnterPasswordentry/password.reset()exit/password.test()digit/handlecharacterclear/password.reset()help/displayhelpprint/deferdo/suppressecho內(nèi)部轉(zhuǎn)換延遲事件內(nèi)部活動(dòng)入口和出口動(dòng)作“打印機(jī)管理器”的待機(jī)恢復(fù)狀態(tài)4、狀態(tài)轉(zhuǎn)換

狀態(tài)轉(zhuǎn)換是兩個(gè)狀態(tài)之間的一種關(guān)系,表示當(dāng)一個(gè)特定事件出現(xiàn)時(shí),如果滿(mǎn)足一定的條件,對(duì)象就從第一個(gè)狀態(tài)(源狀態(tài))進(jìn)入第二個(gè)狀態(tài)(目標(biāo)狀態(tài)),并執(zhí)行一定的動(dòng)作。轉(zhuǎn)換本身也是原子的。源狀態(tài)目標(biāo)狀態(tài)事件名[‘(’用逗號(hào)分隔的參數(shù)表‘)’][監(jiān)護(hù)條件][‘/’動(dòng)作表達(dá)式]事件可能有參數(shù),這樣的參數(shù)可由轉(zhuǎn)換中的監(jiān)護(hù)條件和動(dòng)作使用,也可由與源狀態(tài)和目標(biāo)狀態(tài)相關(guān)的退出和進(jìn)入動(dòng)作分別使用。觸發(fā)自身轉(zhuǎn)換,要先退出當(dāng)前狀態(tài),再進(jìn)入該狀態(tài),這樣要執(zhí)行退出動(dòng)作和進(jìn)入動(dòng)作。觸發(fā)內(nèi)部轉(zhuǎn)換,不需要退出當(dāng)前狀態(tài)。5、狀態(tài)機(jī)圖

一個(gè)狀態(tài)機(jī)圖描述一個(gè)對(duì)象在其生命期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列,以及對(duì)這些事件所做出的反應(yīng)。

通常用狀態(tài)機(jī)圖描述類(lèi)的行為,也可以用它描述其它模型實(shí)體(如用況、參與者、子系統(tǒng))的行為。

initializingActiveidleCommandafter(10秒)/selfTestattentionclearingattentionalarm(s)例題1下圖描述了一個(gè)負(fù)責(zé)監(jiān)視某些傳感器的控制器的狀態(tài)機(jī)。clearing如果事件有參數(shù),可以把參數(shù)用在動(dòng)作表達(dá)式中。例題2繪制一個(gè)狀態(tài)機(jī)圖,它能分析如下格式的字符流:

‘<’標(biāo)記串‘>’字母串;如deFC<ejb-name>Account;WaitingGettingTokenGettingBodyPut(c)[c/=‘<‘]/returnfalsePut(c)[c==‘<“]Put(c)[c/=‘>’]/token.append(c);returnfalsePut(c)[c/=‘;’]/body.append(c);returnfalsePut(c)[c==‘;‘]/returntruePut(c)[c==‘>“]根據(jù)觸發(fā)事件的參數(shù)和擁有這個(gè)狀態(tài)機(jī)的對(duì)象的屬性和鏈來(lái)書(shū)寫(xiě)監(jiān)護(hù)條件和動(dòng)作。如果監(jiān)護(hù)條件不同,相同的事件名可以出現(xiàn)多次,當(dāng)該事件發(fā)生時(shí),根據(jù)監(jiān)護(hù)條件決定觸發(fā)那個(gè)轉(zhuǎn)換。analyzerPutreturntokenappendbodyappend空閑、門(mén)開(kāi)entry/開(kāi)燈烹飪完成entry/關(guān)燈entry/關(guān)功率管entry/發(fā)滴滴聲空閑、門(mén)關(guān)entry/關(guān)燈烹飪中斷entry/關(guān)功率管entry/清除計(jì)時(shí)器延長(zhǎng)烹飪entry/計(jì)時(shí)器增1分鐘初始烹飪entry/設(shè)置定時(shí)器entry/開(kāi)功率管entry/開(kāi)燈開(kāi)門(mén)關(guān)門(mén)開(kāi)門(mén)關(guān)門(mén)按按紐開(kāi)門(mén)按按紐開(kāi)門(mén)按按紐定時(shí)器時(shí)間到定時(shí)器時(shí)間到例題3為簡(jiǎn)易微波爐(只有一個(gè)按鈕)建模6、組合狀態(tài)上面講述的狀態(tài)機(jī)圖中的狀態(tài)都是簡(jiǎn)單狀態(tài)。例如,下圖中的狀態(tài)Active是一個(gè)組合狀態(tài)。其中DialTone和Timeout等狀態(tài)均為Active的子狀態(tài)。(1)語(yǔ)義

組合狀態(tài)是由兩個(gè)或多個(gè)子狀態(tài)構(gòu)成的狀態(tài),其中的子狀態(tài)是順序的或并發(fā)的,而且子狀態(tài)還可以是組合狀態(tài)。新創(chuàng)建的對(duì)象,從最外層的初始偽狀態(tài)開(kāi)始,執(zhí)行其最外層的缺省轉(zhuǎn)換。若對(duì)象轉(zhuǎn)換到了最外層的終結(jié)狀態(tài),則對(duì)象的生命期終止?!粋€(gè)狀態(tài)內(nèi)的各區(qū)域可以有初始偽狀態(tài)和終止?fàn)顟B(tài)。到封閉狀態(tài)的轉(zhuǎn)換表示到其初始偽狀態(tài)的轉(zhuǎn)換。到最終狀態(tài)的轉(zhuǎn)換表示封閉區(qū)域中的活動(dòng)的完成。在所有并發(fā)區(qū)域中的活動(dòng)的完成,表示經(jīng)由封閉狀態(tài)的活動(dòng)的完成,并觸發(fā)封閉狀態(tài)上的完成事件。(2)表示法把組合狀態(tài)展開(kāi)是為了表示它的內(nèi)部狀態(tài)機(jī)結(jié)構(gòu)。除了(可選的)名稱(chēng)和內(nèi)部轉(zhuǎn)換分欄外,狀態(tài)可以包含容納嵌套圖的附加分欄。通過(guò)在圖形區(qū)域里顯示嵌套狀態(tài)機(jī)圖,把狀態(tài)展開(kāi),表示其不相交(順序)的子狀態(tài)。順序子狀態(tài)示意圖

并發(fā)子狀態(tài)示意圖從帶有并發(fā)組合狀態(tài)內(nèi)的任一狀態(tài)離開(kāi)的轉(zhuǎn)移導(dǎo)致離開(kāi)所有的其他并發(fā)區(qū)域。這種轉(zhuǎn)移通常表示有錯(cuò)誤發(fā)生或例外發(fā)生,從而迫使所有并發(fā)計(jì)算都被中斷。用虛線(xiàn)劃分圖形區(qū)域,每個(gè)區(qū)域都是一個(gè)并發(fā)的子狀態(tài)。每個(gè)區(qū)域有一個(gè)可選的名稱(chēng),但必須包含一張具有不相交狀態(tài)的狀態(tài)機(jī)圖。用實(shí)線(xiàn)把整個(gè)狀態(tài)的名稱(chēng)分欄和內(nèi)部轉(zhuǎn)換分欄與并發(fā)的子狀態(tài)相分離。5.3.2建立狀態(tài)機(jī)圖對(duì)對(duì)象的狀態(tài)變遷建模,應(yīng)遵循如下策略:n

設(shè)置狀態(tài)機(jī)的語(yǔ)境

考慮在特定語(yǔ)境中哪些對(duì)象與該對(duì)象交互,包括這個(gè)對(duì)象的類(lèi)的所有的一般類(lèi)和通過(guò)依賴(lài)或關(guān)聯(lián)到達(dá)的所有類(lèi)。這些鄰居是動(dòng)作的侯選目標(biāo)或在監(jiān)護(hù)條件中包含的侯選項(xiàng)。n

建立初始狀態(tài)和終止?fàn)顟B(tài)。n

選定對(duì)象中的一組有意義的對(duì)對(duì)象狀態(tài)有影響的屬性,結(jié)合有關(guān)的事件和動(dòng)作,對(duì)象可能在其中存在各段時(shí)間的條件,以決定該對(duì)象所在的穩(wěn)定狀態(tài)。n

在對(duì)象的整個(gè)生命期中,決定穩(wěn)定狀態(tài)的有意義的偏序。從初態(tài)開(kāi)始到終態(tài),列出這個(gè)對(duì)象可能處于的頂層狀態(tài)n

決定這個(gè)對(duì)象可能響應(yīng)的事件??稍趯?duì)象的接口處發(fā)現(xiàn)事件,并給出一個(gè)唯一的名字。這些事件可能觸發(fā)從一個(gè)合法狀態(tài)到另一個(gè)合法狀態(tài)的轉(zhuǎn)換。n用被適當(dāng)?shù)氖录|發(fā)的轉(zhuǎn)換將這些狀態(tài)連接起來(lái),接著向這些轉(zhuǎn)換中添加事件、監(jiān)護(hù)條件或動(dòng)作。對(duì)于內(nèi)部轉(zhuǎn)換也是如此。n

識(shí)別各狀態(tài)的進(jìn)入或退出的動(dòng)作n如果需要,從這個(gè)對(duì)象的高層狀態(tài)開(kāi)始,然后考慮各自的可能子狀態(tài),用子狀態(tài)進(jìn)行擴(kuò)充。

n

檢查l

檢查在狀態(tài)機(jī)中提到的所有事件是否和該對(duì)象所期望的事件相匹配。類(lèi)似地,檢查該對(duì)象的所期望的所有事件,是否都被狀態(tài)機(jī)所處理。l

檢查在狀態(tài)機(jī)中提到的所有動(dòng)作是否被閉合對(duì)象的關(guān)系和操作所支持。l

通過(guò)狀態(tài)機(jī),跟蹤檢查事件的順序和它們的響應(yīng),尤其要努力地尋找那些未達(dá)到的狀態(tài)和導(dǎo)致?tīng)顟B(tài)機(jī)不能走通的狀態(tài)。l在重新安排狀態(tài)機(jī)后,按所期望的順序再一次檢查,以確保你沒(méi)有改變?cè)搶?duì)象的語(yǔ)義。

5.5包圖

對(duì)一個(gè)較為復(fù)雜的系統(tǒng)建模,要使用大量的模型元素,這時(shí)就必要把這些元素分組進(jìn)行組織。這樣把在語(yǔ)義上接近且傾向于一起變化的模型組織在一起,不但控制模型的復(fù)雜度,有助于理解,而且也有助于按組控制元素的可見(jiàn)性。7.3.1概念與表示法

包是對(duì)模型元素分組的機(jī)制。使用包的最常見(jiàn)目的是把建模元素組織成為組,作為一個(gè)集合進(jìn)行命名和處理。包可以擁有類(lèi)、接口、構(gòu)件、節(jié)點(diǎn)、用況和圖,甚至可以是其它包。擁有是一種組成關(guān)系,這意味著被擁有的元素被聲明在包中。如果包被撤消了,元素也要被撤消?!且粋€(gè)命名空間,一個(gè)元素只能被一個(gè)包所擁有。

設(shè)計(jì)良好的包,把在語(yǔ)義上接近并傾向于一起變化的元素組織在一起。因此結(jié)構(gòu)良好的包是松耦合、高內(nèi)聚的,而且對(duì)其內(nèi)容的訪(fǎng)問(wèn)具有嚴(yán)密的控制。

包的層次性因?yàn)榘羞€可以有包,這樣包之間可以有一個(gè)層次,且在組織結(jié)構(gòu)上是一棵嚴(yán)格的樹(shù)。在實(shí)際使用中,最好要避免過(guò)深地嵌套包,一般兩、三層即可。對(duì)過(guò)多的嵌套,要用“引入依賴(lài)”來(lái)組織包。

類(lèi)名類(lèi)名······類(lèi)名······包名包名包名對(duì)包中元素的命名一個(gè)包形成了一個(gè)命名空間,這意味著在一個(gè)包的語(yǔ)境中同一種元素的名字必須是唯一的。例如,同一個(gè)包不能擁有兩個(gè)名為Queue的類(lèi),但在P1包中可以有一個(gè)名為Queue的類(lèi),而在P2包中又有另一個(gè)(不同的)名為Queue的類(lèi)。實(shí)際上,類(lèi)P1::Queue和類(lèi)P2::Queue是不同的類(lèi),這可以由各自的路徑名區(qū)別開(kāi)來(lái)。如果一個(gè)包位于另一個(gè)包中,外層的包可作為里層包的前綴。例如,在包Vision中有一個(gè)名為Camera的類(lèi),而包Vision又在包Sensor中。類(lèi)Camera的全名為Sensor::Vision::camera。在一個(gè)包中不同種類(lèi)的元素可以有相同的名字。這樣,在同一個(gè)包中,對(duì)一個(gè)類(lèi)命名為T(mén)imer,對(duì)一個(gè)構(gòu)件也可以命名為T(mén)imer。為了不造成混亂,最好對(duì)一個(gè)包中所有元素也都唯一地命名。

如果包的內(nèi)容沒(méi)有被顯示在大矩形中,那么可以把該包的名字放在大矩形中。如果包的內(nèi)容被顯示在大矩形中,那么可以把該包的名字放在左上角的小矩形中。包中元素的可見(jiàn)性一個(gè)包中的元素在包外的可見(jiàn)性,通過(guò)在元素名字前加上一個(gè)可見(jiàn)性符號(hào)來(lái)指示。模型元素的可見(jiàn)性可為+(公共的)、-(私有的)、#(受保護(hù)的)或~(包范圍的),它們的含義為:+:標(biāo)有“+”號(hào)的模型元素對(duì)所有的引入包以及它們的后代是可見(jiàn)的。包的各公共部分一同構(gòu)成包的接口。-:標(biāo)有“-”號(hào)的模型元素只對(duì)包內(nèi)的元素是可見(jiàn)的。#:標(biāo)有“#”號(hào)的模型元素只對(duì)那些與包

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論