UML超新手入門(5)物件圖型 by Michael | CodeData
top

UML超新手入門(5)物件圖型

分享:

UML超新手入門(4)套件圖型 << 前情

「物件圖型、Object Diagrams」使用圖型的表示法來顯示軟體系統中「某一個時間點」的物件內容,還有物件彼此之間的關聯,一般會把它稱為「記憶體的快照、memory snapshot」。物件圖型所能夠顯示的資訊,有時在類別圖型裡是看不到的。

下列的類別圖型所呈現的應用程式,是一個可以讓多個用戶端同時進行聊天的程式:

umlandjava_05_01

「ChatServer」是一個簡單的GUI伺服器,它是一個可以接受多個用戶端連線的多執行緒程式。某一個用戶端發送訊息到「ChatServer」後,它會把這個訊息送到所有的用戶端:

umlandjava_05_1000

用戶端也是一個GUI程式,它在取得與「ChatServer」的連線後,就可以發送訊息給所有的用戶端:

umlandjava_05_1001

如果你想要瞭解多個用戶連線到「ChatServer」後的運作,從上列的類別圖型中,是比較不容易看出來的,尤其是具有多執行緒特性的應用程式。

所以類似這樣的需求,應該要從物件圖型來瞭解會是比較好的方法。雖然物件圖型對於Java程式設計師來說,不像類別圖型代表類別的宣告這麼有意義,但是就像之前所討論的,當類別圖型表達的軟體系統架構不夠清楚時,你應該使用物件圖型來補充不足的部份,這樣的話,不論是在驗證類別圖型的完整性,或是在內部的討論和教學上,效果會是比較好的。

下列的物件圖型顯示在「ChatServer」啟動以後,有兩個用戶端取得連線時的物件狀態,圖型中並沒有畫出所有的物件節點:

umlandjava_05_02

上列的物件圖型中,每一個方塊代表程式運作時的物件。你可以從這個圖型看出物件之間的關聯,這樣的資訊,對於驗證類別圖型的完整性和瞭解應用程式的運作,鞤助是很大的。

物件節點

「物件節點、Object node」用來表示一個在軟體系統中建立的物件,它是一種基礎的節點,在合作圖型和循序圖型中都會使用物件節點,表示目前軟體系統中正在活動的物件。物件節點可以表示:

  • 具名物件(Named object)
  • 匿名物件(Anonymous object)

樣式

一個物件節點分成上、下兩個區格,分別代表「物件名稱」和「屬性狀態」:

umlandjava_05_03

從上列的圖型中,你可以對應到Java建立物件的敘述:

umlandjava_05_04

物件節點也可以省略屬性狀態區格,只保留物件名稱區格,這樣可以在物件圖型中放入更多的物件節點:

umlandjava_05_05

如果省略物件變數的名稱,表示這個物件是一個「匿名物件」:

umlandjava_05_06

從上列的圖型中,對應到Java的敘述可能會像這樣:

umlandjava_05_07

一般在物件圖型裡使用物件節點時,可能不會加上物件名稱,這是為了方便建立物件圖型的原因,而不是所有的物件節點都是匿名物件。為物件取什麼名稱,或是判斷這個物件是不是匿名物件,就留給程式設計師自己來判斷。所以像下列這樣的圖型也是可以的:

umlandjava_05_08

屬性區格

物件節點是用來表示軟體系統中,某一個時間點的物件狀態,物件狀態指的是屬性的內容,下列的物件節點顯示這個物件在應用程式裡的物件狀態:

umlandjava_05_09

在屬性區格裡比較普遍的表示方法,是只有標示關鍵的屬性值,你可以省略掉比較不重要的屬性,只要標示出來的屬性可以分辨這些物件的差異就可以了。例如下列的物件節點:

umlandjava_05_10

結合關係

與類別圖型一樣,軟體系統裡的物件節點,彼此之間也會有許多不同的結合關係,讓你在物件圖型裡可以明顯的看出物件節點之間的關係。使用物件圖型來顯示某一個時間點的物件狀態,和這些物件彼此之間的相依性,不論是在應用在分析、設計或是程式設計師之間的討論,都會比直接使用原始程式碼來的容易。

實作

在物件圖型中,雖然可以藉由類別圖型得知某個物件節點的類別,是實作哪一個介面。但是通常會在物件圖型中加入物件節點與介面之間的實作關係,這樣的表示方法在物件多型的使用上,可以讓物件圖型呈現出來的資訊更加清楚:

umlandjava_05_11

上列的類別圖型也可以使用簡化的介面表示方法:

umlandjava_05_12

結合

物件節點的結合比類別節點相對來的單純,通常在物件圖型中,主要的目的是顯示物件節點之間的相依性。以下列的物件圖型來說,它可以很清楚的顯示老師、課程和學生物件之間的數量和相依性:

umlandjava_05_13

如果你需要瞭解軟體系統在某一個時間點,物件的相依性和確定的數量,這樣的表示方法非常有用。除了物件數量的呈現以外,上列的圖型還顯示每一個學生物件的狀態;但是如果學生的物件狀態對你來說並不重要的話,也可以使用下列的表示方法:

umlandjava_05_14

上列的圖型呈現的其實只有物件的相依性和數量的關係,在物件的「確定數量」對軟體系統很重要的情況下,你就可以使用上列的表示方法。在其它的情況下,從類別圖型中反而可以得到正確的資訊:

umlandjava_05_15

在類別圖型中其它的結合特性,例如聚合和組合,也會有跟上列討論同樣的情況,你可以根據軟體系統的特性來畫出物件圖型。一般來說,物件圖型的需求並不是那麼頻繁,與類別圖型相對之下,對於程式設計師的需求也不是那麼絕對,但是在需要的時候,卻也少不了它。

類別屬性

一般的類別屬性如果是應用在「公用變數」的時候,通常不會在物件圖型裡表現出來,因為它們通常會儲存一個固定的值,這些資訊在類別圖型就可以提供了。但是在某些情況下,類別屬性會是一種變動的值,例如使用下列的類別建立物件的話,它會為每一個物件編一個連續的號碼:

umlandjava_05_16

要呈現使用上列的類別建立三個物件以後的物件狀態,你可以結合類別節點和物件節點,讓物件圖型的資訊更容易瞭解:

umlandjava_05_17

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

https://github.com/macdidi5/UMLTutorial

後續 >> UML超新手入門(6)元件圖型

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

相關文章

留言

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

熱門論壇文章

熱門技術文章