名師講解UML動(dòng)態(tài)建模機(jī)制中消息,狀態(tài)圖和順序圖用法
本節(jié)和大家簡(jiǎn)單學(xué)習(xí)一下UML動(dòng)態(tài)建模機(jī)制,UML中共有四種動(dòng)態(tài)模型,這里簡(jiǎn)單介紹一下UML動(dòng)態(tài)建模機(jī)制中消息,狀態(tài)圖好和順序圖,相信通過本節(jié)的學(xué)習(xí)你對(duì)UML建模有更深入的了解。
UML動(dòng)態(tài)建模機(jī)制
1.消息
在面向?qū)ο蠹夹g(shù)中,對(duì)象間的交互是通過對(duì)象間消息的傳遞來完成的。在UML的四個(gè)動(dòng)態(tài)模型中均用到消息這個(gè)概念。通常,當(dāng)一個(gè)對(duì)象調(diào)用另一個(gè)對(duì)象中的操作時(shí),即完成了一次消息傳遞。當(dāng)操作執(zhí)行后,控制便返回到調(diào)用者。UML動(dòng)態(tài)建模機(jī)制中對(duì)象通過相互間的通信(消息傳遞)進(jìn)行合作,并在其生命周期中根據(jù)通信的結(jié)果不斷改變自身的狀態(tài)。
在UML中,消息的圖形表示是用帶有箭頭的線段將消息的發(fā)送者和接收者聯(lián)系起來,箭頭的類型表示消息的類型,如圖2所示。
UML定義的消息類型有三種:
簡(jiǎn)單消息(SimpleMessage)表示簡(jiǎn)單的控制流。用于描述控制如何在對(duì)象間進(jìn)行傳遞,而不考慮通信的細(xì)節(jié)。
同步消息(SynchronousMessage)表示嵌套的控制流。操作的調(diào)用是一種典型的同步消息。調(diào)用者發(fā)出消息后必須等待消息返回,只有當(dāng)處理消息的操作執(zhí)行完畢后,調(diào)用者才可繼續(xù)執(zhí)行自己的操作。
異步消息(AsynchronousMessage)表示異步控制流。當(dāng)調(diào)用者發(fā)出消息后不用等待消息的返回即可繼續(xù)執(zhí)行自己的操作。異步消息主要用于描述實(shí)時(shí)系統(tǒng)中的并發(fā)行為。
2.狀態(tài)圖
狀態(tài)圖(StateDiagram)用來描述一個(gè)特定對(duì)象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。大多數(shù)面向?qū)ο蠹夹g(shù)都用狀態(tài)圖表示單個(gè)對(duì)象在其生命周期中的行為。UML動(dòng)態(tài)建模機(jī)制中一個(gè)狀態(tài)圖包括一系列的狀態(tài)以及狀態(tài)之間的轉(zhuǎn)移。
(1)狀態(tài) 所有對(duì)象都具有狀態(tài),狀態(tài)是對(duì)象執(zhí)行了一系列活動(dòng)的結(jié)果。當(dāng)某個(gè)事件發(fā)生后,對(duì)象的狀態(tài)將發(fā)生變化。狀態(tài)圖中定義的狀態(tài)有:初態(tài)、終態(tài)、中間狀態(tài)、復(fù)合狀態(tài)。其中,初態(tài)是狀態(tài)圖的起始點(diǎn),而終態(tài)則是狀態(tài)圖的終點(diǎn)。一個(gè)狀態(tài)圖只能有一個(gè)初態(tài),而終態(tài)則可以有多個(gè)。
中間狀態(tài)包括兩個(gè)區(qū)域:名字域和內(nèi)部轉(zhuǎn)移域,如圖3所示。圖中內(nèi)部轉(zhuǎn)移域是可選的,其中所列的動(dòng)作將在對(duì)象處于該狀態(tài)時(shí)執(zhí)行,且該動(dòng)作的執(zhí)行并不改變對(duì)象的狀態(tài)。
一個(gè)狀態(tài)可以進(jìn)一步地細(xì)化為多個(gè)子狀態(tài),我們將可以進(jìn)一步細(xì)化的狀態(tài)稱作復(fù)合狀態(tài)。子狀態(tài)之間有"或關(guān)系"和"與關(guān)系"兩種關(guān)系?;蜿P(guān)系(如圖4)說明在某一時(shí)刻僅可到達(dá)一個(gè)子狀態(tài)。例如,一個(gè)處于行駛狀態(tài)的汽車,在"行駛"這個(gè)復(fù)合狀態(tài)中有向前和向后兩個(gè)不同的子狀態(tài),在某一時(shí)刻汽車要么向前,要么向后。與關(guān)系(如圖5)說明復(fù)合狀態(tài)中在某一時(shí)刻可同時(shí)到達(dá)多個(gè)子狀態(tài)(稱為并發(fā)子狀態(tài))。具有并發(fā)子狀態(tài)的狀態(tài)圖稱為并發(fā)狀態(tài)圖。
(2)轉(zhuǎn)移 狀態(tài)圖中狀態(tài)之間帶箭頭的連線被稱為轉(zhuǎn)移。狀態(tài)的變遷通常是由事件觸發(fā)的,此時(shí)應(yīng)在轉(zhuǎn)移上標(biāo)出觸發(fā)轉(zhuǎn)移的事件表達(dá)式。如果轉(zhuǎn)移上未標(biāo)明事件,則表示在源狀態(tài)的內(nèi)部活動(dòng)執(zhí)行完畢后自動(dòng)觸發(fā)轉(zhuǎn)移。
3.順序圖
UML動(dòng)態(tài)建模機(jī)制中順序圖(SequenceDiagram)用來描述對(duì)象之間動(dòng)態(tài)的交互關(guān)系,著重體現(xiàn)對(duì)象間消息傳遞的時(shí)間順序。順序圖存在兩個(gè)軸:水平軸表示不同的對(duì)象,垂直軸表示時(shí)間。順序圖中的對(duì)象用一個(gè)帶有垂直虛線的矩形框表示,并標(biāo)有對(duì)象名和類名。垂直虛線是對(duì)象的生命線,用于表示在某段時(shí)間內(nèi)對(duì)象是存在的。對(duì)象間的通信通過在對(duì)象的生命線間畫消息來表示。消息的箭頭指明消息的類型。
順序圖中的消息可以是信號(hào)(Signal)、操作調(diào)用或類似于C++中的RPC(RemoteProcedureCalls)和Java中的RMI(RemoteMethodInvocation)。當(dāng)收到消息時(shí),接收對(duì)象立即開始執(zhí)行活動(dòng),即對(duì)象被激活了。通過在對(duì)象生命線上顯示一個(gè)細(xì)長(zhǎng)矩形框來表示激活。
消息可以用消息名及參數(shù)來標(biāo)識(shí)。消息也可帶有順序號(hào),但較少使用。消息還可帶有條件表達(dá)式,表示分支或決定是否發(fā)送消息。如果用于表示分支,則每個(gè)分支是相互排斥的,即在某一時(shí)刻僅可發(fā)送分支中的一個(gè)消息。
在順序圖的左邊可以有說明信息,用于說明消息發(fā)送的時(shí)刻、描述動(dòng)作的執(zhí)行情況以及約束信息等。一個(gè)典型的例子就是用于說明一個(gè)消息是重復(fù)發(fā)送的。另外,可以定義兩個(gè)消息間的時(shí)間限制。
一個(gè)對(duì)象可以通過發(fā)送消息來創(chuàng)建另一個(gè)對(duì)象,當(dāng)一個(gè)對(duì)象被刪除或自我刪除時(shí),該對(duì)象用"X"標(biāo)識(shí)。
另外,在很多算法中,遞歸是一種很重要的技術(shù)。當(dāng)一個(gè)操作直接或間接調(diào)用自身時(shí),即發(fā)生了遞歸。產(chǎn)生遞歸的消息總是同步消息,返回消息應(yīng)是一個(gè)簡(jiǎn)單消息。
【編輯推薦】