活動圖是UML用于對系統(tǒng)的動態(tài)行為建模的另一種常用工具,它描述活動的順序,展
現(xiàn)從一個活動到另一個活動的控制流.活動圖在本質(zhì)上是一種流程圖。
-------------------------------
什么是活動?活動圖與狀態(tài)圖的區(qū)別是什么?
活動是某件事情正在進(jìn)行的狀態(tài),既可以是現(xiàn)實生活中正在進(jìn)行的某 項工作,也可以是軟
件系統(tǒng)某個類對象的一個操作。活動在狀態(tài)機(jī)中表現(xiàn)為由一系列動作組成的非原子的執(zhí)行過程。
雖然活動圖與狀態(tài)圖都是狀態(tài)機(jī)的表現(xiàn)形式,但是兩者還是有本質(zhì)區(qū)別·活動圖著重表
現(xiàn)從一個活動到另一個活動的控制流,是內(nèi)部處理驅(qū)動的流程:而狀態(tài)圖著重描述從一個狀
態(tài)到另一個狀態(tài)的流程, 主要有外部事件的參與。
-------------------------------
活動圖的圖形表示
在UML中,活動圖表示成圓角矩形,與狀態(tài)圖的圓角矩形相比,活動圖的矩形的圓角
更柔和,看上去接近橢圓。活動圖的圖標(biāo)包含對活動的描述(如活動名)。如果一個活動引發(fā)
下一個活動,兩個活動的圖標(biāo)之間用帶箭頭的直線連接。 與狀態(tài)圖類似,活動圈也有起點和
終點,表示法和狀態(tài)圖相同。
活動圖中還包括分支與合并、分叉與匯合等模型元素。 分支與合并的圖標(biāo)和狀態(tài)圖中判定
的圖標(biāo)相同,而分叉與匯合則用一條加粗的線段表示。
-------------------------------
活動圖與流程圖的區(qū)別
雖然活動圖描述系統(tǒng)使用的活動、判定點和分支,看起來和流程圖沒什么兩樣,并且傳
統(tǒng)的流程圖所能表示的內(nèi)容,大多數(shù)情況下也可以使用活動圖表示,但是兩者是有區(qū)別的,
不能將兩個概念混淆。
活動圖與流程圖的區(qū)別如下。
(1)流程閣著重描述處理過程,它的主要控制結(jié)構(gòu)是順序、分支和循環(huán),各個處理過程
之間有嚴(yán)格的順序和時間關(guān)系;而活動圖描述的是對象活動的順序關(guān)系所遵循的規(guī)則,它著
重表現(xiàn)的是系統(tǒng)的行為,而非系統(tǒng)的處理過程。
(2) 活動圖能夠表示并發(fā)活動的情形,而流程圖不能。
(3) 活動圖是面向?qū)ο蟮模鞒虉D是面向過程的.
-------------------------------
活動圖的組成元素
UML的活動圖中包含的圖形元素有動作狀態(tài)、 活動狀態(tài)、動作流、分支與合并、分叉與
匯合、泳道和對象流等。
4 分支與合并
動作流一般會自動進(jìn)行控制轉(zhuǎn)換,直到遇到分支.分支在軟件系統(tǒng)流程中很常見,它
般用于表示對象類所具有的條件行為。一個無條件的動作流可以在一個動作狀態(tài)的動作完成
后自動觸發(fā)動作狀態(tài)的轉(zhuǎn)換以激發(fā)下一個動作狀態(tài),而有條件的動作流則需要根據(jù)條件,即
一個布爾表達(dá)式的真假來判定動作的流向.條件行為用分支和合并表達(dá)。
在活動圖中分支與合并用空心小菱形表示。分支包括一個入轉(zhuǎn)換和兩個帶條件的出轉(zhuǎn)
換,出轉(zhuǎn)換的條件應(yīng)當(dāng)是互斥的,這樣可以保證只有一條出轉(zhuǎn)換能夠被觸發(fā)。合并包括兩個
帶條件的入轉(zhuǎn)換和一個出轉(zhuǎn)換,合并表示從對應(yīng)的分支開始的條件行為的結(jié)束。
5 分支與匯合
對象在運行時可能會存在兩個或者多個并發(fā)運行的控制流,為了對并發(fā)的控制流建饃,
在UML中尋|入了分叉與匯合的概念,分叉用于將動作流分為兩個或者多個并發(fā)運行的分支,
而匯合則用于同步這些并發(fā)分支,以達(dá)到共同完成一項事務(wù)的目的。
分叉可以用來描述并發(fā)線程,每個分叉可以有一個輸入轉(zhuǎn)換和兩個或多個輸出轉(zhuǎn)換,每
個轉(zhuǎn)換都可以是獨立的控制流。
匯合代表兩個或多個并發(fā)控制流同步發(fā)生,當(dāng)所有的控制流都達(dá)到匯合點后,控制才能
繼續(xù)往下進(jìn)行。每個匯合可以有兩個或多個輸入轉(zhuǎn)換和一個輸出轉(zhuǎn)換。
分叉和匯合都使用加粗的水平線段表示。
6 泳道
泳道將活動圖中的活動化分為若干組,并把每一組指定給負(fù)責(zé)這組活動的業(yè)務(wù)組織.&P
對象。 在活動圖中,泳道區(qū)分了負(fù)責(zé)活動的對象,它明確地表示了哪些活動是由哪些對象進(jìn)
行的。 在包含泳道的活動圖中,每個活動只能明確地屬于一個泳道。
在活動圖中,泳道用垂直實線繪出,垂直線分隔的區(qū)域就是泳道。在泳道上方可以給出
泳道的名字或?qū)ο?對象類〕的名字,該對象(對象類〉負(fù)責(zé)泳道內(nèi)的全部活動。泳道沒有
順序,不同泳道中的活動既可以順序進(jìn)行也可以并發(fā)進(jìn)行,動作流和對象流允許穿越分隔線。
7 對象流
對象流是動作狀態(tài)或者活動狀態(tài)與對象之間的依賴關(guān)系,表示動作使用對象或者動作對
對象的影響。 用活動圖描述某個對象時,可以把涉及到的對象放置在活動圖中并用一個依賴
將其連接到進(jìn)行創(chuàng)建;修改和撤銷的動作狀態(tài)或者活動狀態(tài)上,對象的這種使用方法就構(gòu)成
了對象流。
對象流中的對象有如下特點·
(1) 個對象可以由多個動作操縱,
2)一個動作輸出的對象可以作為另一個動作輸入的對象:
(3)在活動圖中,同一個對象可以多次出現(xiàn),它的每-次出現(xiàn)表明該對象正處于對象生
存期的不同時間點.
在活動圖中,對象流用帶有箭頭的虛線表示。如果箭頭從動作狀態(tài)出發(fā)指向?qū)ο螅瑒t表
示動作對對象施加了一定的影響。施加的影響包括創(chuàng)建、修改和撤銷等。如果箭頭從對象指
向動作狀態(tài),則表示該動作使用對象流所指向的對象。
-------------------------------
活動的分解
一個活動可以分為若干個動作或子活動,這些動作和子活動本身又可以組成一個活動
圖。不含內(nèi)嵌活動或動作的活動稱之為簡單活動:嵌套了若干活動或動作的活動稱之為組合
活動,組合活動有自己的名字和相應(yīng)的子活動圖。
-------------------------------
活動圖建模技術(shù)
在系統(tǒng)建模的過程中,活動圖能夠附加到任何建模元素中以描述其行為,這些元素包括
用例、類、接口、節(jié)點、協(xié)作、操作和方法等。通常來說,用活動圖對工作流建模可遵循如
下步驟:
(1)識別要對工作流描述的類或?qū)ο骯 找出負(fù)責(zé)工作流實現(xiàn)的業(yè)務(wù)對象,這些對象可以
是顯示業(yè)務(wù)領(lǐng)域的實體,也可以是一種抽象的概念和事物。找出業(yè)務(wù)對象的目的是為每一個
重要的業(yè)務(wù)對象建立泳道。
(2) 確定工作流的初始狀態(tài)和終止?fàn)顟B(tài),明確工作流的邊界。
(3)對動作狀態(tài)或活動狀態(tài)建模。找出隨時間發(fā)生的動作和活動,將它們表示為動作狀
態(tài)或活動狀態(tài)。
(4) 對動作流建模。對動作流建模時可以首先處理順序動作,接著處理分支與合并等條
件行為,然后處理分叉與匯合等并發(fā)行為。
(5) 對對象流建模。找出與工作流相關(guān)的重要對象,并將其連接到相應(yīng)的動作狀態(tài)和活
動狀態(tài)。
(6) 對建立的模型進(jìn)行精化和細(xì)化。