概念
協作圖是動態圖的另一種表現形式,強調參加交互的各對象結構的信息。協作圖是一種類圖,包含類元角色和關聯角色,而不僅僅是類元和關聯。協作圖強調參加交互的各對象的組織。
內容
圖形上,協作圖的對象用矩形表示,矩形內是此對象的名字,連接用對象間相連的只限表示,連線可以有名字,它標注於表示連接的直線上。如果對象間的連接有消息傳遞,則把消息的圖標沿直線方向繪制,消息的箭頭指向接受消息的對象。由於從圖形上繪制的協作圖無法表達對象間消息發送的順序,因此需要在消息上保留對應時序圖的消息順序號,如下圖所示:
- 對象(Object)
對象代表協作圖交互中所扮演的角色,和時序圖中對象的概念類似。只不過在協作圖中,無法表示對象的創建和撤銷,所以對象在協作圖中的位置沒有限制。 - 鏈(Link)
協作圖中鏈的符號和對象圖中鏈所用的符號是一樣的,即一條連接兩個類角色的實線。
協作圖中常用的鏈符號如下圖所示: - 消息(Message)
消息代表協作圖中對象間通過鏈接發送的消息。消息流上標有消息的序列號和對象間發送的消息。一條消息會觸發接收對象中的一項操作。
協作圖中的消息類型與時序圖中的相同,只不過為了說明交互過程中消息的時間順序,需要給消息添加順序號。順序號是消息的一個數字前綴,是一個整數,由 1 開始遞增,每個消息都必須有唯一的順序號。可以通過點表示法代表控制的嵌套關系,也就是說在消息 1 中,消息 1.1 是嵌套在消息1中的第一個消息,它在消息 1.2 之前;消息 1.2 是嵌套在消息 1 中的第 2 個消息,依此類推。嵌套可以具有任意深度。與時序圖相比,協作圖可以顯示更為復雜的分支。
建模策略
使用協作圖對系統建模時,可以遵循以下策略:
(1)設置交互的語境,語境可以是系統、子系統、操作、類、用例或用例的腳本。
(2)通過識別對象在交互中所扮演的角色,開始繪協作圖,把這些對象作為圖的頂點放在協作圖中。
(3)在識別了協作圖對象后,為每個對象設置初始值。如果某對象的屬性值、標記值、狀態或角色在交互期發生變化,則在圖電放置一個復制對象,並用變化后的值更新它,然后通過構造型<>或<>的消息將兩者連接。
(4)設置了對象的初始值后,根據對象間的關系開始確定對象間鏈接。一般先確定關聯的鏈接,因為這是最主要的,它代表了結構的鏈接。然后需要確定的是其他的鏈接,用合適的路徑構造型修飾它們,這表達了對象間是如何互相聯系的。
(5)從引起交互的消息開始,按消息的順序,把隨后的消息附到適當的鏈接上,這描述了對象間的消息傳遞,可以用帶小數點的編號來表達嵌套。
(6)如果需要說明時間或空間的約束,可以用適當的時間或空間約束來修飾每個消息。
(7)在建模中,如果想更詳細地描述這個控制流,可以為交互過程中的每個消息都附上前置條件和后置條件。
協作圖與時序圖比較
相同點
(1)規定責任。兩種圖都直觀地規定了發送對象和接收對象的責任。將對象確定為接收對象,意味着為此對象添加一個接口。而消息描述成為接收對象的操作特征標記,由發送對象觸發該操作。
(2)支持消息。兩種圖都支持所有的消息類型。
(3)衡量工具。兩種圖還是衡量耦合性的工具。耦合性被用來衡量模型之間的依賴性,通過檢查兩個元素之間的通信,可以很容易地判斷出它們的依賴關系。如果查看對象的交互圖,就可以看見兩個對象之間消息的數量以及類型,從而簡化或減少消息的交互,以提高系統的設計性能。
不同點
(1)協作圖的重點是將對象的交互映射到它們之間的鏈上,即協作圖以對象圖的方式繪制各個參與對象,並且將消息和鏈平行放置。這種表示方法有助於通過查看消息來驗證類圖中的關聯或者發現添加新的關聯的必要性。但是時序圖卻不把鏈表示出來,在時序圖的對象之間,盡管沒有相應的鏈存在,但也可以隨意繪制消息,不過這樣做的結果是有些邏輯交互根本就不可能實際發生。
(2)時序圖可以描述對象的創建和撤銷的情況。新創建的對象可以被放在對象生命線上對應的時間點,而在生命線結束的地方放置一個大寫的X以表示該對象在系統中不能再繼續使用。而在協作圖中,對象要么存在要么不存在,除了通過消息描述或約束,沒有其他的方法可以表示對象的創建或結束。但是由於協作圖所表現的結構被置於靜止的對象圖中,所以很難判斷約束什么時候有效。
(3)時序圖還可以表現對象的激活和去激活情況,但對於協作圖來說,由於沒有對時間的描述,所以除了通過對消息進行解釋,它無法清晰地表示對象的激活和去激活情況。