UML超新手入門(9)合作圖型 by Michael | CodeData
top
技術文章 / Tags: uml

UML超新手入門(9)合作圖型

分享:

UML超新手入門(8)循序圖型 << 前情

「合作圖型、Collaboration Diagrams」與循序圖型所顯示的資訊,有部份是重複的,都是用來呈現物件在時間上的互動。但是循序圖型以時間順序來顯示物件的互動,而合作圖型則把焦點又拉回物件,以物件來顯示互動的順序。當你想要瞭解軟體系統中的關鍵物件,與其它物件一起完成一件任務的順序時,就要使用合作圖型。

下列是開飲機模擬程式中,將冷水燒為開水的循序圖型:

umlandjava_09_01

使用合作圖型來顯示的話,會像這樣:

umlandjava_09_02

元素

合作圖型由下列的基本元素構成:

  • 物件節點(Object node)
  • 連結(Link)
  • 訊息(Message)

物件節點

與循序圖型一樣,當你決定建立某一項任務的合作圖型之後,要先將參與這項任務的物件找出來。以下列的範例程式來說:

public class TestHeater {
    public static void main(String args[]) {
        CoolWaterContainer c = new CoolWaterContainer(50);
        HotWaterContainer h = new HotWaterContainer(2);
        int water = c.useWater(1);
        h.addWater(water);
    }
}

要使用合作圖型來顯示這個程式物件的互動,需要下列的元素:

umlandjava_09_03

連結

找出合作圖型中需要的物件節點後,將有互動的物件使用線條連結起來:

umlandjava_09_04

訊息

在物件之間的訊息傳遞,使用的宣告語法與循序圖型中的訊息一樣:

umlandjava_09_05

在上列的語法中:

  • 條件:可選擇性的宣告。表示必需滿足指定的條件才會送出這個訊息,如果要填入指定的條件,必須放在「[]」裡面。
  • 重複:可選擇性的宣告。表示送出訊息的次數。
  • 序號:表示在任務中傳送訊息的順序編號,在順序編號的後面加上冒號「:」。
  • 回傳值:可選擇性的宣告。表示接收操作的回傳值。
  • 操作名稱:通常是方法的名稱。
  • 參數:可選擇性的宣告。傳遞給操作的參數,有多個參數時,使用逗號分開。

下列是加上訊息後的合作圖型:

umlandjava_09_06

在上列的圖型中,第三個步驟的使用冷水和第四個步驟的從冷水燒成開水,這兩個互動都具有回傳值,可是在圖型裡並沒有顯示出來。你可以使用虛線箭頭來在合作圖型裡表示互動以後的回傳值:

umlandjava_09_07

上列的討論都是不同物件之間的互動,在很多情況下也會呼叫同一個物件內的方法,這在合作圖型裡稱為「內部訊息」。例如下列的敘述:

umlandjava_09_08

合作圖型使用下列的表示方法來顯示這類的實作:

umlandjava_09_09

上列的圖型顯示將開水加入開水的容器時,重新計算溫度的合作圖型。

物件狀態的改變

在開飲機模擬程式中,提供了開水重新加熱的功能,如果使用這個功能,開飲機的狀態會設定為「加熱中」,而且開水在加熱中時不能使用。例如下列的程式敘述:

umlandjava_09_10

你可以使用下列的表示方法,來表示從開始加熱到加熱結束的合作圖型:

umlandjava_09_11

解構物件

一般來說,使用Java程式語言,並不會特別去處理物件的「解構、deconstruct」;你可在合作圖型裡使用訊息的傳遞來表示物件的解構,這對其它的程式語言可能很重要,從圖型裡可以讓程式設計師知道什麼時候該把物件給釋放掉。

Java程式語言裡雖然不會特別去使用這個特性,可是你可以把這個特性應用在資源的釋放,例如串流或網路連線的關閉,這對Java程式設計師來說,與其它的程式語言相對於物件解構是一樣重要的:

umlandjava_09_12

上列圖型對應的程式碼會像這樣:

Socket s = new Socket(remoteHost, 8000);
// do something
s.close();

迴圈

在程式的實作上,反覆執行某一些工作的情形非常多,以下列的敘述來說:

umlandjava_09_13

上列的範例程式,包含了一組重複執行的訊息,所以不適合使用訊息宣告語法中的重複選項。不過你可以使用下列的表示方法:

umlandjava_09_14

多執行緒

多執行緒的應用程式一向是最難以理解的,尤其是在發生錯誤的時候,想要從程式碼去排除錯誤會是比較困難的。除了在靜態圖型中可以看出誰是具有多執行緒特性的物件以外,合作圖型使用「主動物件、Active objects」來加入圖型中,讓執行緒與其它物件的互動可以更清楚。在開飲機的模擬程式裡,使用了好幾個多執行緒物件來模擬真實的開飲機。例如開水容器中的溫度會隨著時間慢慢降低(每秒中降低一度),當溫度降到80度以下時,開飲機會自動將開水加溫到100度,這些動作都是使用執行緒在背景中偵測和執行:

umlandjava_09_15

你可以使用下列的圖型來表現上列圖中的動作:

umlandjava_09_16

上列圖形中的「DropTemperature」和「ReBrew」都是實作「Runnable」的類別,由「HotWaterContainer」物件來建立它們,一旦它們建立起來以後,就由自己控制執行緒。

umlandjava_09_17

相關的檔案都可以GitHub瀏覽與下載。

http://github.com/macdidi5/UMLTutorial

後續 >> UML超新手入門(9)狀態圖型

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

熱門論壇文章

熱門技術文章