目錄
7.2 通信圖
- 協作圖是一種交互圖,強調的是發送和接收消息的對象之間的組織結構,使用協作圖來說明系統的動態情況。
- 協作圖主要描述協作對象間的交互和鏈接,顯示對象、對象間的鏈接以及對象間如何發送消息。
- 協作圖可以表示類操作的實現。
7.2.1 通信圖的概念
1、定義
- 通信圖也稱爲協作圖,它描述了系統中,對象間通過消息進行的交互,強調了對象在交互行爲中承擔的角色。圖7-18是一個典型的通信圖。
- 通信圖和順序圖之間的語義是等價的,只是他們的關注點有所不同而已,可以很容易的完成從順序圖到通信圖的轉換,在Rose中這個轉換還可以自動完成。圖7-18所示的通信圖就是在Rose中通過對圖7-5進行自動轉換所產生的結果。
- 從圖7-18中不難發現,對象和消息都與圖7-5中的對象和消息一樣,在這幅圖上除了“對象”之間的鏈(連接線)之外,所有的元素在交互圖中都已經標識過。
圖7-18從訂單生成訂貨單的通信圖
2、通信圖的作用
- 通信圖常用來描述業務或軟件系統中,每個對象在交互發生時承擔的角色,即強調了交互發生時,每個對象承擔的職責。
- 使用協作圖可以顯示對象相互協作時充當的角色。如果需要強調時間和序列,最好選擇順序圖建模;如果需要強調上下文相關,最好選擇協作圖建模。
- 協作圖用於顯示對象之間如何進行交互,以實現特定用例或用例中特定部分的行爲。設計員使用協作圖和順序圖確定並闡明對象的角色,這些對象執行用例的特定事件流。這些圖提供的信息主要用來確定類的職責和接口。
3、通信圖的組成元素
- 通信圖的組成元素包括對象、消息、鏈(連接器)。消息表示了對象間的通信,對象通過鏈連接在一起。
(1)通信圖中的事物及解釋
(2)通信圖中的關係及解釋
消息標籤:
消息標籤的Format:[前綴] [守衛條件] 序列表達式 [返回值 :=] 消息名
- 前綴的語法規則:序列號,序列號,…,序列號 ‘/’
(前綴用來同步線程,意思是在發送當前消息之前指定序列號的消息被處理.例:1.1a, 1.1b/)
- 守衛條件的語法規則:[條件短句]
說明:條件短句通常用僞代碼或真正的程序語言來表示。例:[x>=0]
- 返回值和消息名:返回值表示一個消息的返回結果,消息名指出了消息的名字和所需參數。例:x:=calc ( n )
- 下面是一個完整的消息標籤:
7.2.2 通信圖的表示
- UML中,表示一個通信圖,主要是標識系統中的對象、對象間交互的消息、對象間的鏈。如圖7-19所示,是系統管理員添加書籍的協作圖。
- 第一個消息(Additem())表示,管理員要求維護窗口添加書籍;第二個消息(find(String))表示,維護窗口要求:Title對象根據書名獲得書的目錄;第三個消息(update())表示修改書目下書的數量。
圖7-19
1.對象:
- 通信圖與順序圖中的對象的概念是一樣,只不過在通信圖中,無法表示對象的創建和撤銷,所以對於對象在圖中的位置沒有限制。
2.鏈:
- 表示對象之間的語義關係,鏈是關聯的一個實例。通信圖中鏈的符號和對象圖中鏈所用的符號是一樣的,即一條連接兩個對象的實線。
3.消息
- 通信圖中的消息類型與時序圖中的相同,只不過爲了說明交互過程中消息的時間順序,需要給消息添加順序號。順序號是在消息的前面加一個整數。每個消息都必須有唯一的順序號。
4.消息編號:
- 消息的編號有兩種,一種是無層次編號(按順序編號),它簡單直觀;另一種是嵌套的編號,它更易於表示消息的包含關係.
5.迭代標記和監護條件
(1) 迭代標記
- 迭代標記用*號表示,表示循環,通常還有迭代表達式,用來說明循環規則。
- 雖然在UML2.0中順序圖已不採用迭代標記(用交互片段代替迭代標記的功能),但在通信圖中仍然使用迭代標記。
- 迭代是通過在順序編號前加上一個迭代符“*”和一個可選的迭代表達式來表示。對於迭代表達式,UML沒有強制規定什麼語法,因此可以使用任何可讀的、有意義的表達式來表示。常用的迭代表達式如表7-3所示。
迭代表達式 |
語義 |
[i:=1..n] |
迭代n次 |
[I=1..10] |
I迭代10次 |
[while(表達式)] |
表達式爲true時才進行迭代 |
[until(表達式)] |
迭代到表達識爲true時,才停止迭代 |
[for each(對象集合)] |
在對象集合上迭代 |
(2) 監護條件
- 監護條件通常是用來表示分支的,也就是表示“如果條件爲true,猜發送消息”的語義,在UML中,監護條件是以“【條件表達式】”的格式表示的。
7.2.3 表示循環和分支
- 通信圖中,用迭代表示循環,用監護條件表示分支。下面分別講述迭代標記和監護條件。
- 監護條件通常是用來表示分支的,也就是表示“如果條件爲true,就發送消息”的語義,在UML中,監護條件是以“【條件表達式】”的格式表示的。現在來看一下它在交互圖中的應用。
- 例如,在圖7-18中,消息“1.3:create(prddleryid)”的前面就添加了一個監護條件【peddleryid not exist】,它說明只有當peddleryid不存在時,才調用create方法來創建新的送貨單。如果已經存在,那就不必創建,直接調用1.4方法,將訂單項中的產品添加到相應的送貨單即可。
- 在通信圖中使用監護條件一定要有所限制,通常應只列出主要的監護條件,否則會影響其閱讀。
- 在圖7-20中,coutse類實例c中還用到了構造型《local》,這是因爲這個對象是由CourseList 的find方法創建的,是一個局部的對象。而在這張圖中,共有五處使用了監護條件,它們的含義如表7-4所示.
圖7-20 註冊課程
表7-4
監護表達式與消息 |
語義解釋 |
[s&c]1.3register(s) |
當s和c都不是空對象時,才執行register方法 |
[(!s)&c]1:studentNotFound |
如果s是空對象,則說明沒有指定的學生,返 回studentNotFound消息 |
[s&(!c)]1:courseNotFound |
如果c是空對象,則表示沒有找到指定課程, 返回courseNotFound消息 |
[(!s)&(!c)]1:allNotFound |
如果s和c都是空對象,表示都沒有找到,返回allNotFound消息 |
[s&c]1:ok |
如果s和c都不是空對象,則返回ok,表示註冊成功 |
7.2.4 閱讀通信圖
下圖是圖書管理員登錄系統的協作圖。
圖7-21
- (1)由Librarian角色向Login發送UserLogin信息,要求登錄系統;
- (2)登錄界面(Login)向Maintenance發送發送Input Maintenance的信息,做一些維護工作;
- (3)登錄界面(Login)向Query角色發送inputQuery消息,做一些查詢工作;
- (4)登錄界面(Login向Operation發送inputOperation信息,進行一些輸入操作。
7.2.5 通信圖與順序圖的區別和聯繫
協作圖和順序圖都表示出了對象間的交互作用,但是它們側重點不同。
- 順序圖清楚地表示了交互作用中的時間順序(強調時間),但沒有明確表示對象間的關係。
- 協作圖清楚地表示了對象間的關係(強調空間),但時間順序必須從順序號獲得。
- 協作圖和順序圖可以相互轉化。
(進行協作圖和順序圖的比較,請參考後續練習題2)
1、打印操作通信圖
actor發送Print消息給Computer,Computer發送Print消息給PrintServer,如果打印機空閒,PrintServer發送Print消息給printer
2、乘坐電梯的通信圖
圖中存在的事物有:
-
- 參與者
- 按鈕對象
- 電梯控制對象
- 命令對象
- 工作隊列
- 電梯對象
圖中存在的關係有:
- 鏈接
解釋:
參與者需要乘坐電梯,他從系統外部按下按鈕,讓電梯到達他想去的樓層。此時,電梯系統的操作被啓動,電梯控制對象以循環的方式檢查所有的電梯,從中選擇一個工作隊列長度最短的。然後,它創建一個作業命令,並將該命令放入對應電梯的工作隊列,接着激活隊列。電梯對象併發運行,從它的隊列中選擇一個作業並執行。電梯是一個活動對象,它與它的控制線程併發執行。