--- title: 程序導向 vs 物件導向 tags: OOP --- 軟體開發的過程 === 往往因見解不同而改了又改,改了又改... ![](https://i.imgur.com/HGJba9D.jpg) [圖片來源](http://synn-solis.blogspot.com/2009/05/blog-post_30.html) 物件導向的主要優勢在於增加了程式的<font color="#F00">**重用性、靈活性、擴充性**</font>,降低[耦合性](https://zh.wikipedia.org/wiki/%E8%80%A6%E5%90%88%E6%80%A7_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8))。 程序導向 vs 物件導向 === 程序導向(Procedure-Oriented) --- - 主要考慮系統需要逐步執行哪些<font color="#F00">**程序(process)**</font>完成 - 架構是以處理的<font color="#F00">**功能(function)**</font>劃分系統各個模組 物件導向(Objected-Oriented) --- - 不要先問系統要作到什麼功能,先問有哪些東西可以讓系統做到這些功能! 主要考慮需以使用哪些<font color="#F00">**物件(object)**</font>交互配合完成 - 架構是以抽象層面處裡,以<font color="#F00">**類別(class)**</font>劃分各個系統模組 - 各類別強調使用<font color="#F00">**方法(method)**</font>完成功能 - 特性: 1. [封裝(Encapsulation)](https://hackmd.io/@BrianYu36359/HyDVrK_Yd) 2. [繼承(Inheritance)](): 待補 3. [多型(Polymorphism)](): 待補 4. [(抽象)(Abstraction)](): 待補 物件導向如何設計 === - 必須滿足<font color="#F00">**SOLID**</font>原則: 1. [單一職責原則 Single Responsibility Principle (SRP)](): 待補 2. [開放封閉原則 Open-Closed Principle (OCP)](): 待補 3. [里氏替換原則 Liskov Substitution Principle (LSP)](): 待補 4. [介面隔離原則 Interface Segregation Principle (ISP)](): 待補 5. [依賴反轉原則 Dependency Inversion Principle (DIP)](): 待補 - 可使用<font color="#F00">**UML(Unified Modeling Language)**</font>將系統的功能與結構畫成模型與藍圖,再進行開發。: 待補 - 可使用<font color="#F00">**設計模式(design pattern)**</font>,而設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。: 待補 結論 === | 程序導向 | 物件導向 | |:------------------------ |:------------------------------------------------------ | | 效能高、使用記憶體空間低 | 易維護、易復用、易擴充套件、低耦合、符合人類的思維習慣 | 補充 === 其實程序導向的語言也可以仿物件導向的方式撰寫,可參考[這篇](https://hackmd.io/@sysprog/c-oop)。