當談到面向對象的設計時,我們經常說面向對象是符合人們對現實世界的思維模式,即人們采用針對非程序設計領域存在的復雜問題的解決方式,來解決軟件設計過程中各種錯綜復雜的關系。利用面向對象設計,特別是采用各種設計模式來解決問題時,會設計多個類,然后創建多個對象,這些對象,有些主要是數據模型,有些則是行為描述占主體。一個設計良好的類,應該是兼顧信息和行為,並且是高內聚。而不同的類之間,應該盡量做到松耦合。
由於我們面對的系統或者需要解決的問題經常是復雜的、高度抽象的,我們創建的多個對象往往是有聯系的,通常對象之間的關系可以分為以下幾類:
- 繼承
具有層次關系或者可以用樹狀結構來描述對象關系時,可以考慮使用繼承,繼承的好處是子類可以容易的使用父類的屬性和方法,缺點是子類和父類綁定在一起,不利於后期維護。
在UML中,繼承通常是使用空心三角+實線來表示。
- 關聯
如果A和B有關聯,那么說明A內部可能會使用到B,但是A和B本身還是獨立的關系,通常B會作為A的成員變量存在。
在UML中,關聯通常是使用實線箭頭來表示,箭頭方向是A指向B。
- 聚合
如果A和B是聚合的,那么說明A和B是“弱擁有”的關系,它們不是獨立的關系,但是A和B的生命周期可以使不同的,通常B也是會作為A的成員變量存在。
在UML中,聚合通常是使用空心菱形+實線箭頭來表示。
- 組合
如果A和B是組合的,那么說明A和B是“強擁有”的關系,它們不是獨立的關系,並且生命周期也是一樣的,通常B作為A的成員變量存在,並且在A的構造函數中進行初始化。
在UML中,組合通常是使用實心菱形+實線箭頭表示。
- 依賴
如果A和B是依賴的關系,說明B一般不單獨使用,它需要在A中才會發揮作用,通常B是作為A中的方法參數存在的。
在UML中依賴通常使用虛線箭頭表示。