1. 程式人生 > >物件模型中類與類間的關係

物件模型中類與類間的關係

類與類之間通常有關聯、聚集、泛化(繼承)、依賴和細化4種關係

1.關聯
      關聯表示兩個類的物件之間存在某種語義上的聯絡。
(1) 普通關聯
       只要在類與類之間存在連線關係就可以用普通關聯表示。普通關聯的圖示符號是連線兩個類之間的直線,如下圖所示。
關聯是雙向的,可在每一個方向上為關聯起一個名字(也可不起名字)。為避免混淆,在名字前面(或後面)加一個表示關聯方向的黑三角。在表示關聯的直線兩端可以寫上重數(multiplicity),它表示該類有多少個物件與對方的一個物件連線。

2.聚集

聚集也稱為聚合,是關聯的特例。聚集表示類與類之間的關係是整體與部分的關係。使用的“包含”、“組成”、“分為……部分”等字句,意味著存在聚集關係。有共享聚集和組合聚集兩種特殊的聚集關係。
(1) 共享聚集
    如果在聚集關係中處於部分方的物件可同時參與多個處於整體方物件的構成

,則該聚集稱為共享聚集。下圖中,一個課題組包含許多成員,每個成員又可以是另一個課題組的成員,則課題組和成員之間是共享聚集關係。一般聚集和共享聚集的關聯關係用空心菱形表示。

(2) 組合聚集
    如果部分類完全隸屬於整體類,部分與整體共存,整體不存在了部分也會隨之消失(或失去存在價值了),則該聚集稱為組合聚集(簡稱為組成)。

3.泛化

UML中的泛化關係就是通常所說的繼承關係,它是通用元素和具體元素之間的一種分類關係。具體元素完全擁有通用元素的資訊,並且還可以附加一些其他資訊。
在UML中,用一端為空心三角形的連線表示泛化關係,三角形的頂角緊挨著通用元素。
泛化關係指出在類與類之間存在“一般--特殊”關係。泛化可進一步劃分成普通泛化和受限泛化。
(1) 普通泛化

 沒有具體物件的類稱為抽象類。抽象類通常作為父類,用於描述其他類(子類)的公共屬性和行為。圖示抽象類時,在類名下

附加一個標記值{abstract}。

與抽象類相反的類是具體類,具體類有自己的物件,並且該類的操作都有具體的實現方法。

(2) 受限泛化

給泛化關係附加約束條件,以進一步說明該泛化關係的使用方法或擴充方法,這樣的泛化關係稱為受限泛化。預定義的約束有4種:多重、不相交、完全和不完全。這些約束都是語義約束。

多重繼承指的是,一個子類可以同時多次繼承同一個上層基類,右圖中的水陸兩用類繼承了兩次交通工具類。與多重繼承相反的是不相交繼承,即一個子類不能多次繼承同一個基類(這樣的基類相當於C++語言中的虛基類)。如果圖中沒有指定{多重}約束,則是不相交繼承,一般的繼承都是不相交繼承。
完全繼承指的是父類的所有子類都已在類圖中窮舉出來了,圖示符號是指定{完全}約束。

不完全繼承與完全繼承恰好相反,父類的子類並沒有都窮舉出來,隨著對問題理解的深入,可不斷補充和維護,這為日後系統的擴充和維護帶來很大方便。不完全繼承是一般情況下預設的繼承關係。

4.依賴和細化

(1) 依賴關係

  依賴關係描述兩個模型元素(類、用例等)之間的語義連線關係: 其中一個模型元素是獨立的,另一個模型元素不是獨立的,它依賴於獨立的模型元素,如果獨立的模型元素改變了,將影響依賴於它的模型元素。
    在UML的類圖中,用帶箭頭的虛線連線有依賴關係的兩個類,箭頭指向獨立的類。在虛線上可以帶一個版類標籤,具體說明依賴的種類。

(2) 細化關係

    當對同一個事物在不同抽象層次上描述時,這些描述之間具有細化關係。
    假設兩個模型元素A和B描述同一個事物,它們的區別是抽象層次不同,如果B是在A的基礎上的更詳細的描述,則稱B細化了A,或稱A細化成了B。細化的圖示符號為由元素B指向元素A的、一端為空心三角形的虛線(注意,不是實線),如下圖所示。細化用來協調不同階段模型之間的關係,表示各個開發階段不同抽象層次的模型之間的相關性,常常用於跟蹤模型的演變。