原文鏈接:UML之通信圖——博客園
原文鏈接:淺析UML之通信圖(協作圖,合作圖)——CSDN
原文鏈接:UML及其應用之通信圖——CSDN
原文鏈接:軟件工程專題:UML通信圖——知乎
概念
通信圖(協作圖)是表現對象交互關系的圖,它展現了多個對象在協同工作達成共同目標的過程中互相通信的情況,通過對象和對象之間的鏈、發送的消息來顯示參與交互的對象。
- 首先通信圖一樣是一種交互圖,它描述的是對象和對象之間的關系,即一個類操作的實現。簡而言之就是,對象和對象之間的調用關系,體現的是一種組織關系。
- 通信圖中的元素主要有對象、消息和鏈三種。對象和鏈分別作為通信圖中的類元角色和關聯角色出現,鏈上可以有消息在對象間傳遞。
- 從結構方面來看,通信圖包含了一個對象的集合並且定義了它們之間的行為方面的關系,表達了一些系統的靜態內容。
- 從行為方面來看,通信圖包含了在各個對象之間進行傳遞交換的一系列的消息集合,以完成協作的目的。
在視頻中的協作圖collaboration diagram描述的是與對象結構相關的信息。現在逐漸的被“通信圖”這一種說法取代。百度上說是:“UML2.0以后不再用協作圖說法,而是明確定義為“通信圖”,即Communication Diagram,而“協作”作為一個結構事物用於表達靜態結構和動態行為的概念組合,表達不同事物相互協作完成一個復雜功能。故UML 2.0以后通信圖不再是協作圖,沒有專門的“協作圖”,只有“協作”。
通信圖是一種描述協作在某一語境下的空間組織結構的圖形化方式,在使用其進行建模時,主要具有以下三個作用:
- 通過描繪對象之間消息的傳遞情況來反映具體使用語境的邏輯表達。
- 顯示對象及其交互關系的空間組織結構。
- 表達一個操作的實現。
組成元素
通信圖的組成元素包括對象、消息、鏈(連接器)。消息表示了對象間的通信,對象通過鏈連接在一起。
對象
- 通信圖中的對象與順序圖中對象的概念相同,都是表示類的實例。
- 通信圖只關注相互有交互作用的對象和對象關系,而忽略其他對象。
- 由於通信圖中不表示對象的創建與銷毀,因此,對象在通信圖中的位置沒有限制。
- 與順序圖中對象的表示法不同的是,通信圖中的無法顯示對象的生命線。
鏈
通信圖中的鏈與對象圖中的鏈在語義以及表示法上都相同,都是兩個(或多個)對象之間的獨立連接,是關聯的實例。鏈同時也是通信圖中關聯角色的實例,其生命受限於協作的生命。
鏈連接的兩個對象之間允許在交互執行過程中進行消息傳遞和交互。UML也允許對象自身與自身之間建立一條鏈。鏈可以通過對自己命名來進行區分和說明,也可以僅僅做連接而不進行命名。
消息
通信圖的消息需要附加在對象之間的鏈上,鏈用於傳輸或實現消息的傳遞。
通信圖中的消息通過在鏈的上方或下方添加一個短箭頭來表示(箭頭指示消息的流向,從消息的發出者指向接收者),通常需要使用阿拉伯數字作為序號來表示通信圖中發送消息的順序。
標簽對消息作說明,其中,順序號指出消息的發生順序,並且指明了消息的嵌套關系;冒號后面是消息的名字。
消息分類
通信圖是通過一系列的消息來描述系統的動態行為。消息可以分為四種類型:
- 簡單消息:指示消息類型未知或不重要的消息,可默認都使用簡單消息替代。
- 同步消息:表示前一個消息處理完成后才能處理下一個消息。
- 異步消息:表示處理流不需要等到消息完成或傳遞反饋后才繼續執行。
- 反身消息:對象自身內部的消息處理。
消息編號
消息的編號有兩種,一種是無層次編號(按順序編號),它簡單直觀;另一種是嵌套的編號,它更易於表示消息的包含關系.
消息標簽
消息標簽的Format:[前綴] [守衛條件] 序列表達式 [返回值 :=] 消息名
-
前綴的語法規則:序列號,序列號,…,序列號 ‘/’
(前綴用來同步線程,意思是在發送當前消息之前指定序列號的消息被處理.例:1.1a, 1.1b/) -
守衛條件的語法規則:[條件短句]
說明:條件短句通常用偽代碼或真正的程序語言來表示。例:[x>=0] -
返回值和消息名:返回值表示一個消息的返回結果,消息名指出了消息的名字和所需參數。例:x:=calc ( n )
下面是一個完整的消息標簽:
迭代標記
- 迭代標記用*號表示,表示循環,通常還有迭代表達式,用來說明循環規則。
- 雖然在UML2.0中順序圖已不采用迭代標記(用交互片段代替迭代標記的功能),但在通信圖中仍然使用迭代標記。
- 迭代是通過在順序編號前加上一個迭代符“*”和一個可選的迭代表達式來表示。對於迭代表達式,UML沒有強制規定什么語法,因此可以使用任何可讀的、有意義的表達式來表示。
常用的迭代表達式如表所示:
迭代表達式 | 語義 |
---|---|
[i:=1..n] | 迭代n次 |
[I=1..10] | I迭代10次 |
[while(表達式)] | 表達式為true時才進行迭代 |
[until(表達式)] | 迭代到表達識為true時,才停止迭代 |
[foreach(對象集合)] | 在對象集合上迭代 |
監護條件
監護條件通常是用來表示分支的,也就是表示“如果條件為true,猜發送消息”的語義,在UML中,監護條件是以“【條件表達式】”的格式表示的。
下圖中,消息“1.3:create(prddleryid)”的前面就添加了一個監護條件【peddleryid not exist】,它說明只有當peddleryid不存在時,才調用create方法來創建新的送貨單。如果已經存在,那就不必創建,直接調用1.4方法,將訂單項中的產品添加到相應的送貨單即可。
原文鏈接:https://blog.csdn.net/qq494370/article/details/106081539
在通信圖中使用監護條件一定要有所限制,通常應只列出主要的監護條件,否則會影響其閱讀。
通信圖與順序圖的異同點
通信圖與順序圖的共同點主要有如下3點:
- 主要元素相同。兩種圖中的主要元素都是對象與消息,且都支持所有的消息類型。
- 表達語義相同。兩種圖都是對系統中的交互建模,描述了系統中某個用例或操作的執行過程,二者的語義是等價的。
- 對象責任相同。兩種圖中的對象都擔任了發送者與接收者的角色並承擔了發送與接收消息的責任。通過對象之間消息的傳遞來實現系統的功能。
兩種圖之間的不同點也有如下3點:
- 通信圖偏重於將對象的交互映射到連接它們的鏈上,這有助於驗證類圖中對應的類之間關聯關系的正確性或建立新的關聯關系的必要性。然而順序圖偏重描述交互中消息傳遞的邏輯順序。因此通信圖更適用於展示系統中的對象結構,而順序圖則擅長表現交互中消息的順序。
- 順序圖可以顯式地表現出對象創建與撤銷的過程,而在通信圖中,只能通過消息的描述隱式地表現這一點。
- 順序圖還可以表示對象的激活情況,而對於通信圖來說,由於缺少表示時間的信息,除了對消息進行解釋,無法清晰地表示對象的激活情況。
通信圖與順序圖對比
通信圖建模技術
按組織對控制流建模:
- 識別交互的語境,即交互所處的環境。
- 識別出圖中應該存在的對象。
- 識別可能有消息傳遞的對象並設置鏈。
- 設置對象間的消息。
- 如果需要更多約束,如時間或空間的約束,可以使用其他的約束來修飾這些消息。
案例(1)添加新書
案例(2)學位初評
教務人員通過學號在學位初評系統查詢學生的初評情況。學位初評系統分別在成績管理系統、獎罰管理系統、畢業設計管理系統查詢成績、獎罰、畢業設計情況。並根據情況生成學位初評結果,通過信息打印模塊打印初評情況。