UML及其應用之通信圖

目錄

 

7.2 通信圖

7.2.1 通信圖的概念

1、定義

2、通信圖的作用

3、通信圖的組成元素

7.2.2 通信圖的表示

1.對象:

2.鏈:

3.消息

4.消息編號:

5.迭代標記和監護條件

7.2.3 表示循環和分支

7.2.4 閱讀通信圖

7.2.5 通信圖與順序圖的區別和聯繫

1、打印操作通信圖

2、乘坐電梯的通信圖


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、乘坐電梯的通信圖

圖中存在的事物有:

    • 參與者
    • 按鈕對象
    • 電梯控制對象
    • 命令對象
    • 工作隊列
    • 電梯對象

圖中存在的關係有

  • 鏈接

解釋:

參與者需要乘坐電梯,他從系統外部按下按鈕,讓電梯到達他想去的樓層。此時,電梯系統的操作被啓動,電梯控制對象以循環的方式檢查所有的電梯,從中選擇一個工作隊列長度最短的。然後,它創建一個作業命令,並將該命令放入對應電梯的工作隊列,接着激活隊列。電梯對象併發運行,從它的隊列中選擇一個作業並執行。電梯是一個活動對象,它與它的控制線程併發執行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章