UML動態(tài)建模機制中合作圖和活動圖用法解析
本文和大家重點討論一下UML動態(tài)建模機制中的合作圖和活動圖,合作圖(CollaborationDiagram)用于描述相互合作的對象間的交互關(guān)系和鏈接關(guān)系,而活動圖的應(yīng)用非常廣泛,它既可用來描述操作(類的方法)的行為,也可以描述用例和對象內(nèi)部的工作過程。
1.合作圖
UML動態(tài)建模中合作圖(CollaborationDiagram)用于描述相互合作的對象間的交互關(guān)系和鏈接關(guān)系。雖然順序圖和合作圖都用來描述對象間的交互關(guān)系,但側(cè)重點不一樣。順序圖著重體現(xiàn)交互的時間順序,合作圖則著重體現(xiàn)交互對象間的靜態(tài)鏈接關(guān)系。
合作圖中對象的外觀與順序圖中的一樣。如果一個對象在消息的交互中被創(chuàng)建,則可在對象名稱之后標以{new}。類似地,如果一個對象在交互期間被刪除,則可在對象名稱之后標以{destroy}。對象間的鏈接關(guān)系類似于類圖中的聯(lián)系(但無多重性標志)。通過在對象間的鏈接上標志帶有消息串的消息(簡單、異步或同步消息)來表達對象間的消息傳遞。
(1)鏈接 鏈接用于表示對象間的各種關(guān)系,包括組成關(guān)系的鏈接(CompositionLink)、聚集關(guān)系的鏈接(AggregationLink)、限定關(guān)系的鏈接(QualifiedLink)以及導(dǎo)航鏈接(NavigationLink)。各種鏈接關(guān)系與類圖中的定義相同,在鏈接的端點位置可以顯示對象的角色名和模板信息。
(2)消息流 在合作圖的鏈接線上,可以用帶有消息串的消息來描述對象間的交互。消息的箭頭指明消息的流動方向。消息串說明要發(fā)送的消息、消息的參數(shù)、消息的返回值以及消息的序列號等信息。
2.活動圖(ActivityDiagram)
活動圖的應(yīng)用非常廣泛,它既可用來描述操作(類的方法)的行為,也可以描述用例和對象內(nèi)部的工作過程。UML動態(tài)建模中活動圖是由狀態(tài)圖變化而來的,它們各自用于不同的目的?;顒訄D依據(jù)對象狀態(tài)的變化來捕獲動作(將要執(zhí)行的工作或活動)與動作的結(jié)果。活動圖中一個活動結(jié)束后將立即進入下一個活動(在狀態(tài)圖中狀態(tài)的變遷可能需要事件的觸發(fā))。圖1給出了一個活動圖的例子。
活動和轉(zhuǎn)移
一項操作可以描述為一系列相關(guān)的活動。活動僅有一個起始點,但可以有多個結(jié)束點。UML動態(tài)建模中活動間的轉(zhuǎn)移允許帶有g(shù)uard-condition、send-clause和action-expression,其語法與狀態(tài)圖中定義的相同。一個活動可以順序地跟在另一個活動之后,這是簡單的順序關(guān)系。如果在活動圖中使用一個菱形的判斷標志,則可以表達條件關(guān)系(見圖1),判斷標志可以有多個輸入和輸出轉(zhuǎn)移,但在活動的運作中僅觸發(fā)其中的一個輸出轉(zhuǎn)移。
活動圖對表示并發(fā)行為也很有用。在活動圖中,使用一個稱為同步條的水平粗線可以將一條轉(zhuǎn)移分為多個并發(fā)執(zhí)行的分支,或?qū)⒍鄠€轉(zhuǎn)移合為一條轉(zhuǎn)移。此時,只有輸入的轉(zhuǎn)移全部有效,同步條才會觸發(fā)轉(zhuǎn)移,進而執(zhí)行后面的活動,如圖2所示。
泳道
UML動態(tài)建模中活動圖告訴你發(fā)生了什么,但沒有告訴你該項活動由誰來完成。在程序設(shè)計中,這意味著活動圖沒有描述出各個活動由哪個類來完成。泳道解決了這一問題。它將活動圖的邏輯描述與順序圖、合作圖的責(zé)任描述結(jié)合起來。如圖2所示,泳道用矩形框來表示,屬于某個泳道的活動放在該矩形框內(nèi),將對象名放在矩形框的頂部,表示泳道中的活動由該對象負責(zé)。
對象
在活動圖中可以出現(xiàn)對象。對象可以作為活動的輸入或輸出,對象與活動間的輸入/輸出關(guān)系由虛線箭頭來表示。如果僅表示對象受到某一活動的影響,則可用不帶箭頭的虛線來連接對象與活動,如圖2所示。
信號
如圖3所示,在活動圖中可以表示信號的發(fā)送與接收,分別用發(fā)送和接收標志來表示。發(fā)送和接收標志也可與對象相連,用于表示消息的發(fā)送者和接收者。
3.UML動態(tài)建模中四種圖的運用
上面對UML中用于描述系統(tǒng)動態(tài)行為的四個圖(狀態(tài)圖、順序圖、合作圖和活動圖)做了簡單地介紹。這四個圖均可用于系統(tǒng)的動態(tài)建模,但它們各自的側(cè)重點不同,分別用于不同的目的。下面對如何正確使用這幾個圖做一簡單的總結(jié),在實際的建模過程中要根據(jù)具體情況靈活運用這些建議。
首先,不要對系統(tǒng)中的每個類都畫狀態(tài)圖。盡管這樣做很***,但太浪費精力,其實你可能只關(guān)心某些類的行為。正確的做法是:為幫助理解類而畫它的狀態(tài)圖。狀態(tài)圖描述跨越多個用例的單個對象的行為,而不適合描述多個對象間的行為合作。為此,常將狀態(tài)圖與其它技術(shù)(如順序圖、合作圖和活動圖)組合使用。
順序圖和合作圖適合描述單個用例中幾個對象的行為。其中順序圖突出對象間交互的順序,而合作圖的布局方法能更清楚地表示出對象之間靜態(tài)的連接關(guān)系。當行為較為簡單時,順序圖和合作圖是***的選擇。但當行為比變復(fù)雜時,這兩個圖將失去其清晰度。因此,如果想顯示跨越多用例或多線程的復(fù)雜行為,可考慮使用活動圖。另外,順序圖和合作圖僅適合描述對象之間的合作關(guān)系,而不適合對行為進行精確定義,如果想描述跨越多個用例的單個對象的行為,應(yīng)當使用狀態(tài)圖。
【編輯推薦】