2014年3月2日 星期日

OO: UML的基本名詞與關聯

在一些論壇或是討論版,總覺得有些人對於物件導向的以下名詞容易搞混,尤其當看到有人講Delegation是一種模式時,是非常奇妙的事情。這邊整理成一張圖,以及關係的排序(圖中的數字)。另外,圖片中有每種關係在UML的呈現,也附上一個Abstract Facotry(抽象工廠)模式的類別圖,以供比對關聯。

  1. Generalization(一般化): 一個繼承關係,由下往上看時則是一般化。如何記一般化?當把所有子類別提取共同屬性與方法時,這時父類別是大家共同擁有的,既然共同擁有,當然比較一般囉!
  2. Specialization(特殊化): 一個繼承關係,由上往下看時則是特殊化。如何記特殊化?當把父類別產生出不同子類別時,每個子類別都是特別的物件,當然就是特殊囉!
  3. Inheritance(繼承): 在Java程式中使用Extends關鍵字,關係最強,因為父類別的所有,子類別皆該括承受。
  4. Realization(實現) and Implementation(實作|實現): 在Java程式中使用Implements關鍵字,而UML泛指抽象化,包含抽象類別與介面。
  5. Composition(組成): 可以想像成某物件的專屬物件,在Java實作中則是Inner class的概念。
  6. Aggregation(聚合): Whole-Part的概念,也就是產品和零件的關係,泛指通用零件。
  7. Association(關聯): 在UML分為相互關聯與可導覽的關聯,前者是雙方皆知道彼此存在,後者只有一方知道。
  8. Dependency(依賴): 關係最弱的一種,在程式實作中,通常以回傳值或是方法中參數的形式存在。
  9. Delegation(委派): 並非為設計模式,只是物件導向程式中的一種關係或是實作方法。可以想像成一個物件,將部分功能委由另一個物件來做,則是Delegation的概念。
  10. Design pattern(設計模式): 一種程式設計的經驗,根據四人幫一書中的定義,一個Pattern基本具有四個特徵:名稱、問題、解決方案與成效。