{UML 2.0} 關聯類別(association class)

一般 UML 書籍對 “關聯類別(assocation class)” 的定義及說明如下:

  • An association class connection is a UML construct that allows an association connector to have attributes and operations (features).

「UML Distilled」一書提及:關聯類別(assocation class)允許你在關聯上面增加屬性、操作和其它(類別)特性。

書中所舉參考範例如下圖:


圖一 關聯類別 — 摘錄自 "UML Distilled 3rd edition"

文中說明為:從圖一,我們可以看見 Person(個人)可能會參加很多會議。我們必須保有這個人對這些會議的出席情況:藉由新增一個 attentiveness(出席意願)屬性到關聯上,我們可以達到這個目的。

說真的,我對以上對於關聯類別(assocation class) 的定義及說明並不盡滿意!

也有些說法是從 E-R(Entity-Relationship)的角度來說明 association class 是為了保存及紀錄額外的資訊(additional information)而衍生。因為在多對多的情況下,資訊儲存在任一個 class 下均不甚理想。 例如下圖二。


圖二 學生與科目的關聯

若需要記錄關於學生選擇了哪些課程的訊息,該記錄儲存在 "學生" 或是 "科目" 類別內均不太適合。所以為了記錄關於選課的資訊,於是衍生出關聯類別 "Student-Course" 或稱之為 "選課"。如下圖三。


圖三 學生與科目的關聯類別 — 選課

我仍覺得,因為要記錄額外的資訊而衍生出 "選課" 這樣的關聯類別,還是很不自然,"人工化" 的意味很重,而非從 Domain 的概念觀點來解釋。

我覺得,稱之為 "關聯類別(association class)" 實在挺不自然的,怎麼解釋說明都感覺不是那麼的合理化。

但,若從商業交易(Transaction)的角度來看時,那麼,反而會先看到 "事件(Event)" 的發生。例如上圖一的 "出席" 與圖三的 "選課"。然後,再找出相關聯於該事件的 "人" 與 "物"。

例如圖三,"選課" 這個事件的發起者為 "學生",而"學生" 所選課的 "物" 即為 "課程"。

所以,若從 "交易" 的角度來切入,關聯類別消失了,取而代之的是 "事件(Event)",而且,從 Domain 概念的層次來解釋也比較合理。

最後,再舉一個例子。

"教授" 與 "班級" 這兩個類別,是屬於多對多的關係。一個教授會在多個班級授課;相對地,一個班級會有好幾個教授來授課。顯然,一個很明顯的交易事件:授課,自然而然就會出現了,而且,在學校教務系統上,這樣的詞彙是合情合理的。


圖四 授課成為主要的類別

文章導覽

   

共有 4 則迴響

  1. hi milkyway:

    我們可以把問題轉移到 http://www.hsdc.com.tw 來討論。
    關於技術面的文章,我在那邊也同時放了一篇。

    說真的,就是因為我之前也不知道關聯類別是啥,我才去思考這問題。

    建立軟體概念模型時,找出關聯類別並不是一件自然的事情。所以,我才會用另一個角度先找出 “event”。但,交易物件與關聯類別是兩回事,可不是等號。

  2. 小子駑鈍,照您的意思是說,我們可以從event的角度,去找到關聯類別(交易物件)囉!?

    我還是不太了解關聯類別到底是啥!? 🙁

  3. Hi milkyway:

    不是這樣看待的。
    從 Domain 的觀點,我已經不將之稱為「關聯類別」,而是從 “Event” 的角度來看待,來捕捉其交易物件。

    關聯類別仍是關聯類別,與事件是沒有直接的關係。

發佈回覆給「Kenming Wang」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *