物件導向

抽象

  • 只提供基本資訊,隱藏不必要的資訊。
  • 降低設計的難度

封裝

  • 隱藏實作細節
  • 裡面的數據不提供給外部對象使用
  • 外部對象只能通過接口溝通

繼承

  • 被繼承的類叫基類,繼承的類叫子類。
  • 基類應為一個抽象概念,為一個抽象類,代表不應直接實例化基類。
  • 子類有基類的功能跟數據,減少重複。

多型

  • 子類代替父類。
  • 傳入參數定義成父類,傳入子類達到不同功能。
  • 父類為抽象,符合針對抽象編程。

類的關係

  • aggregation
  • association
  • dependency
  • composition
  • inheritance (generalization)
  • implementation (Realization)


association

為 has a 的關係,A has a B 代表,A class 有一個成員變數為 B。

程式碼為 :
class A {
    B b;
}

dependency

為 A references B (use a) 的關係,A references B 代表 A 在某個 function 內有用到 B,A 使用 B 的操作,但卻不擁有 B,可能是:
  • 通過參數傳入
  • 直接 new 
  • 返回值
  • 靜態function
  • 全域對象、變數、function

程式碼為 :
參數傳入
class A {
    function t1(B b) {
    }
}
或直接 new
class A {
    function t1() {
        B b = new b();
    }
}
或返回值
class A {
    function t1() {
        return new B();
    }
}

aggregation

也是 has a (own a) 的關係,為 association 的子集,為較弱的 association ,A 聚合 B 代表,A 擁有 B,但是 B 可以獨立運作。

程式碼為 :
class A {
    B b;
}
class A {
    Array<B> b;
}

composition

是 has-a (part-of) 的關係,為 association 的子集,為較強的 association,A 組成 B 代表,A 擁有 B,B 是 A的一部份,A 被刪除之後,B 也跟著被刪除。

程式碼為 :
class A {
    B b;
    construct() {
       b = new B();
   }
}

association vs composition vs  aggregation

這三個通常是語意或設計上的差異,跟代碼無關。

inheritance

繼承是 is a 的關係,A 繼承 B 代表 B 為 A 的子類,狗 class 繼承哺乳類 class,狗 is a 哺乳類。

程式碼:
class A extends B {
}

implementation 

實現的意義是有能力做甚麼,A 實現 B 接口代表 A 必須實作 B 接口的所有 function,以供多型使用,也代表 A 有能力做 B 定義的事。

程式碼:
class A implements B {
}

留言

這個網誌中的熱門文章

WINDOWS cmd 操作:查看進程、TCP連線、刪除TCP連線和進程

mongodb aggregate 筆記

mongodb shell 操作