Fork me on GitHub

8/30/2011

[OO] association, aggregation and composition in UML

UML 描述類別彼此間的關係,有三種表達方式: Association(關連), Aggregation(聚合) and Composition(組成)。

簡單來說,Aggregation(聚合) 是 Association(關連) 的一種特化;而 Composition(組成) 是 Aggregation(聚合) 的一種特化。

Association(關連):表達某類別中的方法參數是另一類別,或是某類別持有另一類別的指標/參考

Aggregation(聚合):表達一種 "has-a" 的關係,但是不是獨佔的 (也就是說某類別擁有另一類別,但是其他類別也可以擁有該類別)

Composition(組成):類似 Aggregation,但是更加嚴格。某類別擁有另一類別,並且掌管另一類別之生死。當該類物件被 delete,其所 "has-a" 類別也跟著死亡;並且是一種獨佔關係。


參考資料
1. Design Codes: UML Class Diagram: Association, Aggregation and Composition
2. (原創) association,aggregation,composition有什麼差別?

... ...

[DP] 繼承或合成, composition 搭配 strategy pattern 範例

簡單明瞭的機器人遊戲範例,清楚說明了 composition 搭配 strategy pattern 的強大,推薦閱讀!

繼承關係在面臨父類 介面更動 需求時,顯得不堪一擊。採用繼承的關鍵是子類 "is-a" 父類,但 更重要的是,這個 "is-a" 的關係, 是否在開發週期間恆常不變 ,如果不是的話 composition 是更好的選擇!


Don't use inheritance just to get code reuse

Don't use inheritance just to get at polymorphism


當 上層類 依賴於 組件類 (composition), 不讓 上層類 直接使用 組件 instance,而是使用一個抽象介面 ,那麼就可以達到 run-time 決定選用不同規格的組件 (因為他們都實現相同的介面),更大增加了彈性,這就是 Strategy Pattern

參考資料
  1. Inheritance versus composition: Which one should you choose?
  2. Android Game Development - Design In-game Entities - The Strategy Pattern

... ...

8/16/2011

[DP] Dependency Inversion Principle 依賴倒轉原則

1. 高階模組不應該依賴低階模組,兩者都應該依賴抽象

2. 抽象不依賴實作細節,實作細節依賴抽象

幾個網路上的文章說明的蠻清楚的,在這邊筆記一下!

  1. 控制反轉(Inversion of Control)介紹 | Java頻道

  2. Dependency Inversion Principle | Object Oriented Design

  3. What is Dependency Inversion? Is it IoC? – Java Code Geeks

— EOF —