類別圖:關聯 Class Diagram: Association Chapter 10 類別圖:關聯 Class Diagram: Association
學習目標 說明並以圖闡示所有關聯的基本記號 說明並以圖闡示關聯類別、反身關聯與限定關聯
什麼是關係? 關係(Relationship)是模型元件中具有語意(有意義)的連接線─它們是UML用來將連接物體的東西。 關係的類型 參與者與使用案例間的關係(Association); 使用案例之間的關係 (Generalization;<<include>>;<<extend>>); 參與者之間的關係 (Generalization)。 物件之間的連接關係是鏈結(Link);類別之間的連接關係是關聯(Association)。
什麼是鏈結? 鏈結(Link)是兩物件之間具有語意的連接,它可以讓訊息從一個物件傳遞到另外一個物件。 訊息是透過鏈結在這些物件之間相互傳遞,當物件收到訊息時,便會呼叫訊息所對應的動作起來執行。 Java語言是以參考(Reference)的方式來實現鏈結;而C++是用指標(Pointer)、參考或直接包含另一個物件來實現鏈結。 鏈結最基本的需求就是要讓物件能夠參考到另一個物件。
物件圖 物件圖用來表現在某個時間點上物件之間的關係。 物件是透過鏈結來連接彼此的,這樣的關係可以轉換成是物件之間彼此所扮演的各種角色。
鏈結的可通性 把可通性想像是城市裏的單行道,訊息只能朝箭頭所指的方向傳遞。 UML 2.0的規格書中允許3種可通性的表現方式: 十字表示不通; 雙向性的關聯不畫箭頭; 單向性的關聯有單一個箭頭。
什麼是關聯? 關聯(Association)是指類別之間的關係,就像是連接物件的鏈結一樣。 物件之間若存在鏈結,則表示物件各自所屬的類別之間也一定存在某種關聯。 鏈結是關聯的具體化表現,如同物件是類別的具體化表現是一樣的。
關聯
關聯的語法 關聯中有: 關聯名稱; 角色名稱; 多重性; 可通性。
關聯多重性(multiplicity) 多重性(Multiplicity)是UML中用來定義參與物件數量之規則的術語。在關聯中每個參與類別都必須指定多重性值。 指定多重性可用方法的摘要清單 : 由兩個點(..)所分隔的數值表示一個範圍。 由逗號分隔的數值表示多重性的列舉清單。 萬用符號(*)單獨使用時表示零或大於零,沒有上下限。 萬用符號(*)若使用在範圍(1..*)中,表示沒有上限-您至少必須有一個,但可以有無限個。
關聯多重性(multiplicity)
多重性範例與解說
關聯角色 有時關聯名稱很難決定。UML提供了一個方法,用來取代名稱或與其共用,以協助將該關聯的意義盡可能地說明清楚。這個替代方法稱之為「角色(Role) 」。
關聯限制 限制可以出現在關聯的兩側、單側或者都不出現。
塑模延伸關聯記號 關聯類別 反身關聯 限定關聯
反身關聯 「反身關聯(Reflexive association)」它指出在相同類別中的物件間彼此可以建立關係。它的關聯記號與您到目前為止所學到的完全相同,差別只在於關聯線的兩端都指向同個類別,這就是反身關聯命名的由來。
反身關聯 類別和自己有關聯相當常見,這種的關聯稱為反身關聯(Reflexive Associations)。
限定關聯 「限定關聯(Qualified association)」提供與索引幾乎相同的功能,不過它的記號有些變化。 限定關聯藉由提供代碼限制物件的選擇簡化複雜關聯中的搜尋工作 。 Page 135
限定關聯 我們可以使用一種名為限定關聯(Qualified Association)來降低n對多的關係而成為n對一的關係。 這種方式是從一組目標類別中找到一個特定的物件(或一組物件)。
可通性 可通性(Navigability)是表示訊息可以從來源類別的物件中轉移至目標類別一個以上的物件,而物件的數量取決於多重性的值。 可以把可通性當作是「訊息傳送的方向」。
UML 2 可通性方案
關聯與屬性 來源類別與目標類別間若存在關聯,一種方式則是把關聯視為是來源類別中的一個虛擬屬性(Pseudo attribute),而此虛擬屬性的型態是目標類別,來源類別的物件便可以透過此虛擬屬性參考到目標類別的物件。
UML模型自動產生程式碼, 需將1對1關聯轉成來源類別中的屬性. 若目標類別的多重性多於1時, [array, collection (ex java Vector)] 若關聯是多對多時, 就需拆解成 1..* & *..1 若目標類別的數量只有1, 可能表示目標類別只是來源類別的一部份, 可考慮使用屬性來取代關聯 若目標類別的數量是多於1, 表示目標類別對模型是重要的, 一般會用關聯來描述關係
關聯類別 關聯類別將與一個關聯有關的資訊封裝起來。 在物件導向系統中,所有的資料都必須裝在(封裝於)物件中。 將所有資料定義在類別中。為了顯示這些資料描述該關聯,我們使用虛線將新類別與關聯連接起來。 Page 134
關係類別 問題: 當兩類別是多對多關係時, 其中某些屬性難以歸納到其中的一個類別中. 如薪水屬性
關係類別
什麼是相依性關係 相依性是指兩個或多個模型元件間的關係,當一個元件(供應者, target)改變時可能會影響或提供資訊給所需的其他元件(使用者, source)。 UML 2.0定義了三種相依性關係:
相依性關係用法 有五種使用的相依性關係: <<use>> <<call>> <<parameter>> <<send>> <<instantiate>>
Person <<use>> Telephone 使用者 供應者 A Class的動作裡需要一個B Class的參數 A Class的動作會回傳一個B Class的object A Class的動作會在執行的過程中使用一個B Class的object, 但此object 不是A Class的屬性值 在case 1 , 2中, 可使用<<parameter>> 來加強相依關係的語意 在case 3中, 可使用<<call>>來加強相依關係的語意
抽象的相依性關係 總共有四種抽象的相依性關係: <<trace>> <<substitute>> <<refine>> <<derive>>
許可相依性關係 有三種許可相依性關係: <<access>> <<import>> <<permit>>