以前看了很多 OOAD 與 Design Pattern 的文章,看時似懂非懂,用時更懵懵懂懂,心裡總是覺得不踏實,為了讓心中大石落地,決心好好的來回顧與整理,重新提煉一番。
而這篇多年前整理的文章【深入淺出物件導向分析與設計】第一章、偉大軟體由此開始,正好可以作為一個最基本、最入門的範例說明。
OOP : 物件導向程式設計 (Object-Oriented Programming)
方法:
- OOA : 物件導向分析 (Object-Oriented Analysis) - 參考:【深入淺出物件導向分析與設計】第二、三、四章 - 需求收集、需求變更、需求分析
- OOD : 物件導向設計 (Object-Oriented Design) - 參考:【深入淺出物件導向分析與設計】第五章、良好的設計 = 彈性的軟體
心法 (九陽神功)
基本概念:
- 物件 (Object)
- 類別 (Class)
- 存取修飾子
- private : 私有,顧名思義只供自己使用。
- proteced:保護,供自己與子類別(同命名空間(namespace))使用。
- internal:內部,供自己與同命名空間的類別使用。
- proteced internal:保護內部,供自己與子類別(不同命名空間亦可)使用。
- public:公開,大家都可使用。
- 建構子 (Constructor)
- 屬性 (Attribute)
- 欄位 (Field)
- 特性 (Property) - 披著 Field 皮的 Method
- 方法 (Method)
- 存取修飾子
- 抽象類別 (Abstract Class)
- 介面 (Interface)
- 集合 (Collection)
- 泛型 (Generic)
- 委派 (Delegate)
- 事件 (Event)
- 重構 (Refactoring)
核心:
- 封裝 (Encapsulation)
- 多型 (Polymorphism)
- 多載 (Overload)
- 覆寫 (Override)
- 繼承 (Inheritance)
原則:
- 單一職責 (SRP, Single Responsibility Principle)
- 開放封閉 (OCP, Open–Closed Principle)
- 里氏替換 (LSP, Liskov Substitution Principle)
- 介面隔離 (ISP, Interface Segregation Principle)
- 依賴反轉 (DIP, Dependency Inversion Principle)
- 最少知識 (LKP, Least Knowledge Principle)
- 正式名稱為得墨忒耳定律 (LoD, Law of Demeter)
招式 (獨孤九劍)
模式:
- 策略 (Strategy)
- 觀察者 (Observer)
- 裝飾者 (Decorator)
- 工廠方法 (Factory Method)
- 抽象工廠 (Abstract Factory)
- 獨體 (Sinleton)
- 命令 (Command)
- 轉接器 (Adapter)
- 表象 (Facade)
- 樣板方法 (Templete Method)
- 反覆器 (Iterator)
- 合成 (Composite)
- 狀態 (State)
- 代理 (Proxy)
- 橋樑 (Bridge)
- 建立者 (Builder)
- 職責鏈 (Chain of Responsibility)
- 蠅量級 (Flyweight)
- 翻譯者 (Interpreter)
- 居間協調者 (Mediator)
- 備忘錄 (Memento)
- 原型 (Prototype)
- 訪問者 (Visitor)
心得
以心法為主,招式為輔,透過招式來體會心法,利用心法提升招式,相輔相乘,無招勝有招。