UML動態(tài)建模機(jī)制詳解
UML動態(tài)建模機(jī)制你是否熟悉,這里和大家分享一下UML動態(tài)建模機(jī)制方面的知識,相信通過本節(jié)的介紹你對UML動態(tài)建模機(jī)制一定會有全面的認(rèn)識。下面就是詳細(xì)介紹。
UML動態(tài)建模機(jī)制軟件工程
UML動態(tài)模型包括狀態(tài)模型、順序模型、協(xié)作模型和活動模型,通常以狀態(tài)圖、順序圖、協(xié)作圖和活動圖來表示。其中,順序圖和協(xié)作圖通常合起來稱為交互圖。狀態(tài)模型關(guān)注一個對象的生命周期內(nèi)的狀態(tài)及狀態(tài)變遷,以及引起狀態(tài)變遷的事件和對象在狀態(tài)中的動作等。順序模型和協(xié)作模型強(qiáng)調(diào)對象間的合作關(guān)系,通過對象間的消息傳遞以完成系統(tǒng)的用例。活動圖用于描述多個對象在交互時采取的活動,它關(guān)注對象如何相互活動以完成一個事務(wù)。
一、消息
在面向?qū)ο蠹夹g(shù)中,對象間的交互是通過對象間消息的傳遞來完成的。在UML的4個動態(tài)模型中均用到消息這個概念。通常,當(dāng)一個對象調(diào)用另一個對象中的操作時,即完成了一次消息傳遞。當(dāng)操作執(zhí)行后,控制便返回到調(diào)用者。對象通過相互間的通信(消息傳遞)進(jìn)行合作,并在其生命周期中根據(jù)通信的結(jié)果不斷改變自身的狀態(tài)。在UML中,消息的圖形表示是用帶有箭頭的線段將消息的發(fā)送者和接收者聯(lián)系起來,箭頭的類型表示消息的類型。
UML定義的消息類型有三種:
(1)簡單消息(simplemessage)表示簡單的控制流。用于描述控制如何在對象間進(jìn)行傳遞,而不考慮通信的細(xì)節(jié)。
(2)同步消息(synchronousmessage)表示嵌套的控制流。操作的調(diào)用是一種典型的同步消息。調(diào)用者發(fā)出消息后必須等待消息返回,只有當(dāng)處理消息的操作執(zhí)行完畢后,調(diào)用者才可繼續(xù)執(zhí)行自己的操作。
(3)異步消息(asynchronousmessage)表示異步控制流。調(diào)用者發(fā)出消息后不用等待消當(dāng)息的返回即可繼續(xù)執(zhí)行自己的操作。異步消息主要用于描述實(shí)時系統(tǒng)中的并發(fā)行為。
可以將一個簡單消息和一個同步消息合并成一個消息,原同步消息的箭頭和簡單消息的箭頭分別放在合并后的消息兩端。這樣的消息意味著操作調(diào)用一旦完成就立即返回。
二、順序圖
UML動態(tài)建模機(jī)制中順序圖用來描述對象之間動態(tài)的交互關(guān)系,著重體現(xiàn)對象間消息傳遞的時間順序。順序圖存在兩個軸:水平軸表示不同的對象,垂直軸表示時間。在順序圖中,對象用一個帶有垂直虛線的矩形框表示,在矩形框內(nèi)標(biāo)有對象名和類名。垂直虛線稱為對象的生命線,代表在對象之間的交互作用中該對象的生命期。在生命線上的窄矩形條被稱作激活(activation),表示該對象正在執(zhí)行某個操作。激活矩形的長度表示計(jì)劃的持續(xù)時間,既可以直接執(zhí)行,也可以通過下級過程執(zhí)行。矩形條的頂部表示動作的開始,底部表示動作的結(jié)束。兩根對象的生命線之間的箭頭表示消息。消息的箭頭形狀指明消息的類型是發(fā)送還是返回。消息按發(fā)生的時間順序從上到下排列。每個消息旁標(biāo)注消息名,也可加上參數(shù)并標(biāo)注一些控制信息。返回自身生命線的消息箭頭叫回授(selfcall),表示對象發(fā)送消息給自己。
控制信息由兩種。***種是條件控制信息,說明在什么情況下才會發(fā)送信息(例如,在[needsToReorder()=true]的條件下),消息僅當(dāng)條件為真時才會被發(fā)送。第二種是重復(fù)控制信息,表示消息多次發(fā)送給多個作為接收者的對象。這種控制信息通常在當(dāng)一個對象向某個對象集合中的每一個對象逐個地發(fā)送消息時使用(例如*prepare())。
交互圖是一種非常簡單扼要的可視化圖解,這也正是交互圖的優(yōu)勢。同時也可看到,順序圖比較適合交互規(guī)模較小的可視化圖解,如果對象很多,交互又很頻繁,則會使順序圖變得復(fù)雜起來,這是順序圖的一個弱點(diǎn)。在順序圖中可以使用返回(return)消息,表示從消息處理中返回,而不是一個新消息。為了畫圖清晰,經(jīng)常將返回消息省略掉。一般的對象放在圖的頂部,但還有一種特殊的消息new是創(chuàng)建一個對象消息,由于該消息而創(chuàng)建的對象放在圖中中間位置合適的地方。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,總體的控制流程往往是難以理解的。一個好的設(shè)計(jì)應(yīng)當(dāng)將很多小方法放入不同的類中,并且隨時能巧妙地指出總體的行為順序,這樣可以十分有效地幫助你加速了解代碼。對于***接觸面向?qū)ο蟪绦蛟O(shè)計(jì)的人來說尤其是如此,順序圖可以幫助你看清行為的次序。
三、協(xié)作圖
UML動態(tài)建模機(jī)制中交互圖的第二種形式是協(xié)作圖。協(xié)作圖也是用來描述對象與對象之間的消息連接關(guān)系的,但是它更側(cè)重于說明哪些對象之間有消息傳遞,而不像順序圖那樣側(cè)于在某種特定的情形下對象之間傳遞消息的時序性。在協(xié)作圖中,對象同樣是用一個對象圖符號來表示,箭頭表示消息發(fā)送的方向,而消息的執(zhí)行順序則由消息的編號來標(biāo)明。
與順序圖中從上而下的生命線相比,通過編號來看消息執(zhí)行的時間順序顯然要困難得多。但是,協(xié)作圖中對象間靈活的空間布局使我們可以更方便地展示另外一些有用信息,不同的軟件工程師可能偏好不同形式的交互圖。例如,有些人喜歡使用順序圖,因?yàn)轫樞驁D突出使用執(zhí)行的時序,能更方便地看出事情發(fā)生的次序;有些人更喜歡協(xié)作圖,因?yàn)閰f(xié)作圖的布局方法能更清楚的表示出對象之間靜態(tài)的連接關(guān)系。那么如何選擇呢?一個最基本的原則是用哪種圖更簡明清楚,則選用哪種圖。
四、狀態(tài)圖
UML動態(tài)建模機(jī)制中狀態(tài)圖(StateDiagram)用來描述一個特定對象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。大多數(shù)面向?qū)ο蠹夹g(shù)都用狀態(tài)圖表示單個對象在其生命周期中的行為。一個狀態(tài)圖包括一系列的狀態(tài)以及狀態(tài)之間的轉(zhuǎn)移。所有對象都具有狀態(tài),狀態(tài)是對象執(zhí)行了一系列活動的結(jié)果。當(dāng)某些事情發(fā)生后,對象的狀態(tài)將發(fā)生變化,稱改變對象狀態(tài)的事情為“事件”,狀態(tài)圖用來顯示對象對事件的反應(yīng)以及對象狀態(tài)的改變。狀態(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)。一個狀態(tài)圖只能有一個初態(tài),而終態(tài)則可以有多個。初態(tài)用一個黑圓點(diǎn)表示,終態(tài)用黑圓點(diǎn)外加一個圓表示(很像一只牛眼)。狀態(tài)圖中的狀態(tài)用一個圓角四邊形表示。狀態(tài)之間為狀態(tài)轉(zhuǎn)換,用一條帶箭頭的線表示。引起狀態(tài)轉(zhuǎn)換的事件可以用狀態(tài)轉(zhuǎn)換線旁邊的標(biāo)簽表示。當(dāng)事件發(fā)生時,狀態(tài)轉(zhuǎn)換開始。
一個狀態(tài)一般包含三個部分,***部分為狀態(tài)的名稱;第二部分為可選的狀態(tài)變量的變量名和變量值,這部分是可選的;第三部分為可選的活動表,列出有關(guān)事件和活動。在活動表中,常常使用下面三種標(biāo)準(zhǔn)事件即entry(進(jìn)入)、exit(退出)和do(做)。entry事件用來指定一個狀態(tài)的活動,exit事件用來指定退出一個狀態(tài)的活動,do事件用來指定在該狀態(tài)下的活動。
活動部分的語法如下:
事件參數(shù)表“/”活動表達(dá)式
事件可以是任何事件,包括上述3種標(biāo)準(zhǔn)事件。活動表達(dá)式用來指定應(yīng)該進(jìn)行何種活動。有時還需要為事件指定一些參數(shù)。
狀態(tài)圖中狀態(tài)之間帶箭頭的連線被稱為轉(zhuǎn)移。狀態(tài)的變遷通常是由事件觸發(fā)的,此時應(yīng)在轉(zhuǎn)移上標(biāo)出觸發(fā)轉(zhuǎn)移的事件表達(dá)式。如果轉(zhuǎn)移上未標(biāo)明事件,則表示在源狀態(tài)的內(nèi)部活動執(zhí)行完畢后自動觸發(fā)轉(zhuǎn)移。
轉(zhuǎn)移的語法表示如下:
事件說明[守衛(wèi)條件]/動作表達(dá)式
其中,事件說明的語法為:事件名{參數(shù)}
守衛(wèi)條件是狀態(tài)轉(zhuǎn)移的一個布爾表達(dá)式。如果將守衛(wèi)條件和事件說明放在一起使用,則當(dāng)且僅當(dāng)事件發(fā)生且布爾表達(dá)式成立時狀態(tài)才發(fā)生轉(zhuǎn)移。如果狀態(tài)轉(zhuǎn)移只有守衛(wèi)條件這一個條件,則只要守衛(wèi)條件為真,狀態(tài)就發(fā)生轉(zhuǎn)移。動作表達(dá)式是一個過程表達(dá)式,當(dāng)狀態(tài)轉(zhuǎn)移開始時執(zhí)行。轉(zhuǎn)移中使用的術(shù)語是“動作”,而在狀態(tài)中使用的術(shù)語是“活動”。盡管它們都是一種過程,都是由對象中的方法實(shí)現(xiàn),但是處理它們的方式有所不同。動作與轉(zhuǎn)移關(guān)聯(lián),能被極快處理且不會被中斷。活動和狀態(tài)關(guān)聯(lián),持續(xù)時間長且可以被一些事件中斷。
轉(zhuǎn)移中的事件表示輸入,當(dāng)狀態(tài)中的活動完成后,并且當(dāng)相應(yīng)的輸入事件發(fā)生時,轉(zhuǎn)移才會發(fā)生。有的轉(zhuǎn)移上沒有標(biāo)明引發(fā)轉(zhuǎn)移的條件的事件,則表示狀態(tài)中的活動一旦完成,轉(zhuǎn)移不需要等待任何輸入,便立即發(fā)生轉(zhuǎn)移。
“空閑”狀態(tài),把狀態(tài)變量timer的值置為0,然后遞增timer的值,直到“上行”或“下行”事件發(fā)生或守衛(wèi)條件“timer=超時值”為真,觸發(fā)狀態(tài)轉(zhuǎn)換。
狀態(tài)圖適合于描述跨越多個用例的單個對象的行為,而不適合于描述多個對象之間的狀態(tài)圖確實(shí)有用,但不要對系統(tǒng)中的每個類都畫出它的狀態(tài)圖。從理論上講,如果能刻畫每個類的狀態(tài)圖,就可以準(zhǔn)確描述每個類的動態(tài)行為。但是這樣要花費(fèi)大量精力,而且也沒有必要。事實(shí)上,我們關(guān)心的是某些關(guān)鍵類的行為,為此為這些類建立狀態(tài)圖可以
幫助我們理解所研究的問題,在這種情況下才有必要繪制狀態(tài)圖。
五、活動圖
UML動態(tài)建模機(jī)制中活動圖顯示動作及其結(jié)果,著重描述操作實(shí)現(xiàn)中所完成的工作以及用例實(shí)例或?qū)ο笾械幕顒印;顒訄D是狀態(tài)圖的一個變種,與狀態(tài)圖的目的有一些小的差別。活動圖的主要目的是描述動作(執(zhí)行的工作或活動)以及對象狀態(tài)改變的結(jié)果。當(dāng)狀態(tài)中的動作被執(zhí)行時(不象正常的狀態(tài)圖,它不需指定任何事件),活動圖中的狀態(tài)(稱作動作狀態(tài))直接轉(zhuǎn)移到下一階段。活動圖和狀態(tài)圖的另一個區(qū)別是活動途中的動作可以放到泳道中去。泳道聚合一組活動,并指定負(fù)責(zé)人和所屬組織。活動圖是另一種描述交互的方式,描述采取何種動作,做什么(對象狀態(tài)改變),何時發(fā)生(動作序列),以及在何處發(fā)生(泳道)。
活動圖可以用作下列目的:
(1)描述成操作執(zhí)行過程中(操作實(shí)現(xiàn)的實(shí)例化)所完成的工作(動作),這是活動圖最常用的用途。
(2)描述對象內(nèi)部工作。
(3)顯示如何執(zhí)行一組相關(guān)的動作,以及這些動作如何影響它們周圍的對象。
(4)顯示用例的實(shí)例是如何執(zhí)行動作以及改變對象狀態(tài)的。
泳道將一個活動圖中的活動狀態(tài)分組,每一組表示負(fù)責(zé)那些活動的業(yè)務(wù)組織。尤其當(dāng)你對業(yè)務(wù)過程的工作流建模時,泳道是很有用的。在UML中,每個組被稱為一個泳道,因?yàn)閺囊曈X上,每組用一條垂直實(shí)線把它與鄰居分開,一個泳道說明一個活動軌跡。
每個泳道在圖中都有一個唯一的名稱。泳道除了可能代表現(xiàn)實(shí)世界的某些實(shí)體之外,實(shí)際上沒有很深的語義。每個泳道代表一個活動圖的全部活動中部分活動的高層職責(zé),并且每個泳道最終可能由一個或多個類實(shí)施。在一個被劃分為泳道的活動圖中,每個活動都明確地屬于一個泳道,而轉(zhuǎn)移可以跨越泳道。
【編輯推薦】
- 深入剖析UML動態(tài)建模機(jī)制中的四種動態(tài)模型
- UML動態(tài)建模機(jī)制專家解析
- UML動態(tài)建模中合作圖和活動圖解析
- L建模過程中需要注意要點(diǎn)專家提醒
- 體驗(yàn)免費(fèi)UML建模工具