物件導向程式設計之心法與招式

  • 405
  • 0
  • 2020-06-16

以前看了很多 OOAD 與 Design Pattern 的文章,看時似懂非懂,用時更懵懵懂懂,心裡總是覺得不踏實,為了讓心中大石落地,決心好好的來回顧與整理,重新提煉一番。

而這篇多年前整理的文章【深入淺出物件導向分析與設計】第一章、偉大軟體由此開始,正好可以作為一個最基本、最入門的範例說明。

OOP : 物件導向程式設計 (Object-Oriented Programming)

方法:

  1. OOA : 物件導向分析 (Object-Oriented Analysis)  - 參考:【深入淺出物件導向分析與設計】第二、三、四章 - 需求收集、需求變更、需求分析
  2. OOD : 物件導向設計 (Object-Oriented Design) - 參考:【深入淺出物件導向分析與設計】第五章、良好的設計 = 彈性的軟體

心法 (九陽神功)

基本概念:

  1. 物件 (Object)
  2. 類別 (Class)
    • 存取修飾子
      • private : 私有,顧名思義只供自己使用。
      • proteced:保護,供自己與子類別(命名空間(namespace))使用。
      • internal:內部,供自己與同命名空間的類別使用。
      • proteced internal:保護內部,供自己與子類別(不同命名空間亦可)使用。
      • public:公開,大家都可使用。
    • 建構子 (Constructor)
    • 屬性 (Attribute)
      • 欄位 (Field)
      • 特性 (Property) - 披著 Field 皮的 Method
    • 方法 (Method)
  3. 抽象類別 (Abstract Class)
  4. 介面 (Interface)
  5. 集合 (Collection)
  6. 泛型 (Generic)
  7. 委派 (Delegate)
  8. 事件 (Event)
  9. 重構 (Refactoring)

核心:

  1. 封裝 (Encapsulation)
  2. 多型 (Polymorphism)
    • 多載 (Overload)
    • 覆寫 (Override)
  3. 繼承 (Inheritance)

原則:

  1. 單一職責 (SRP, Single Responsibility Principle)
  2. 開放封閉 (OCP, Open–Closed Principle)
  3. 里氏替換 (LSP, Liskov Substitution Principle)
  4. 介面隔離 (ISP, Interface Segregation Principle)
  5. 依賴反轉 (DIP, Dependency Inversion Principle)
  6. 最少知識 (LKP, Least Knowledge Principle)
    • 正式名稱為得墨忒耳定律 (LoD, Law of Demeter)

招式 (獨孤九劍)

模式:

  1. 策略 (Strategy)
  2. 觀察者 (Observer)
  3. 裝飾者 (Decorator)
  4. 工廠方法 (Factory Method)
  5. 抽象工廠 (Abstract Factory)
  6. 獨體 (Sinleton)
  7. 命令 (Command)
  8. 轉接器 (Adapter)
  9. 表象 (Facade)
  10. 樣板方法 (Templete Method)
  11. 反覆器 (Iterator)
  12. 合成 (Composite)
  13. 狀態 (State)
  14. 代理 (Proxy)
  15. 橋樑 (Bridge)
  16. 建立者 (Builder)
  17. 職責鏈 (Chain of Responsibility)
  18. 蠅量級 (Flyweight)
  19. 翻譯者 (Interpreter)
  20. 居間協調者 (Mediator)
  21. 備忘錄 (Memento)
  22. 原型 (Prototype)
  23. 訪問者 (Visitor)

心得

以心法為主,招式為輔,透過招式來體會心法,利用心法提升招式,相輔相乘,無招勝有招。