UML超新手入門(9)合作圖型
「合作圖型、Collaboration Diagrams」與循序圖型所顯示的資訊,有部份是重複的,都是用來呈現物件在時間上的互動。但是循序圖型以時間順序來顯示物件的互動,而合作圖型則把焦點又拉回物件,以物件來顯示互動的順序。當你想要瞭解軟體系統中的關鍵物件,與其它物件一起完成一件任務的順序時,就要使用合作圖型。 下列是開飲機模擬程式中,將冷水燒為開水的循序圖型: 使用合作圖型來顯示的話,會像這樣: 元素合作圖型由下列的基本元素構成:
物件節點與循序圖型一樣,當你決定建立某一項任務的合作圖型之後,要先將參與這項任務的物件找出來。以下列的範例程式來說:
要使用合作圖型來顯示這個程式物件的互動,需要下列的元素: 連結找出合作圖型中需要的物件節點後,將有互動的物件使用線條連結起來: 訊息在物件之間的訊息傳遞,使用的宣告語法與循序圖型中的訊息一樣: 在上列的語法中:
下列是加上訊息後的合作圖型: 在上列的圖型中,第三個步驟的使用冷水和第四個步驟的從冷水燒成開水,這兩個互動都具有回傳值,可是在圖型裡並沒有顯示出來。你可以使用虛線箭頭來在合作圖型裡表示互動以後的回傳值: 上列的討論都是不同物件之間的互動,在很多情況下也會呼叫同一個物件內的方法,這在合作圖型裡稱為「內部訊息」。例如下列的敘述: 合作圖型使用下列的表示方法來顯示這類的實作: 上列的圖型顯示將開水加入開水的容器時,重新計算溫度的合作圖型。 物件狀態的改變在開飲機模擬程式中,提供了開水重新加熱的功能,如果使用這個功能,開飲機的狀態會設定為「加熱中」,而且開水在加熱中時不能使用。例如下列的程式敘述: 你可以使用下列的表示方法,來表示從開始加熱到加熱結束的合作圖型: 解構物件一般來說,使用Java程式語言,並不會特別去處理物件的「解構、deconstruct」;你可在合作圖型裡使用訊息的傳遞來表示物件的解構,這對其它的程式語言可能很重要,從圖型裡可以讓程式設計師知道什麼時候該把物件給釋放掉。 Java程式語言裡雖然不會特別去使用這個特性,可是你可以把這個特性應用在資源的釋放,例如串流或網路連線的關閉,這對Java程式設計師來說,與其它的程式語言相對於物件解構是一樣重要的: 上列圖型對應的程式碼會像這樣:
迴圈在程式的實作上,反覆執行某一些工作的情形非常多,以下列的敘述來說: 上列的範例程式,包含了一組重複執行的訊息,所以不適合使用訊息宣告語法中的重複選項。不過你可以使用下列的表示方法: 多執行緒多執行緒的應用程式一向是最難以理解的,尤其是在發生錯誤的時候,想要從程式碼去排除錯誤會是比較困難的。除了在靜態圖型中可以看出誰是具有多執行緒特性的物件以外,合作圖型使用「主動物件、Active objects」來加入圖型中,讓執行緒與其它物件的互動可以更清楚。在開飲機的模擬程式裡,使用了好幾個多執行緒物件來模擬真實的開飲機。例如開水容器中的溫度會隨著時間慢慢降低(每秒中降低一度),當溫度降到80度以下時,開飲機會自動將開水加溫到100度,這些動作都是使用執行緒在背景中偵測和執行: 你可以使用下列的圖型來表現上列圖中的動作: 上列圖形中的「DropTemperature」和「ReBrew」都是實作「Runnable」的類別,由「HotWaterContainer」物件來建立它們,一旦它們建立起來以後,就由自己控制執行緒。 相關的檔案都可以GitHub瀏覽與下載。 |