發表文章

PHP OO 物件導向原則:里氏替換原則LSP

OO_Principle_LSP 物件導向有五個原則 S.O.L.I.D. : 單一職責原則 SRP (Single Responsibility Principle) 開放封閉原則 OCP (Open Closed Principle) 里氏替換原則 LSP (Liskov Substitution Principle) 介面隔離原則 ISP (Interface Segragation Principle) 依賴反轉原則 DIP (Dependency Inversion Principle) 更多物件導向的理論的學習內容會整理到 PHP OO 的進階教學: 淺談物件導向 SOLID 原則對工程師的好處與如何影響能力 再談 SOLID 原則,Why SOLID?  里氏替換原則 LSP (Liskov Substitution Principle) 一、定義與說明: 所有子類別都可以代理父類別的工作。 Subtypes must be substitutable for their base types. 里氏替換原則原則要能夠成立,介面(interface)/抽象方法(Abstract method) 就必須要遵守定義去實做。 又被稱為 Design by Contract ,即按照契約設計 ,子類別需兌現對父類別的承諾,遵照父類別設計開發。 作為子類別的方法必須和他們父類別的方法操作一致,子類別中可以擁有父類別沒有的特殊功能,但是繼承的方法,功能應該兩者一致的。 子類不只是實現父類別的方法,而且必須 名符其實 ,否則會發生無法預料的事情。 二、遵守單一職責原則的結果: 確保行為的正確性: Client 端只會 透過介面與抽象方法的定義來判斷一個方法的行為 ,如果有遵守 LSP 原則,就可以確保動作的行為會如預期般的運作。 如果程式沒有達到 LSP 原則,程式的行為將變得「不可預測」,換句話說可能產生不可預知且不容易察覺的 bugs。 簡單的例子是: 如果有一個父類別的 method 名稱叫做 getName,但是子類別實作 getName 的時候卻回傳 $this->id,這樣的情況下,別人看到 getName 的 function 就以為他是回傳

PHP OO 物件導向原則:開放封閉原則OCP

圖片
OO_Principle_OCP 物件導向有五個原則 S.O.L.I.D. : 單一職責原則 SRP (Single Responsibility Principle) 開放封閉原則 OCP (Open Closed Principle) 里氏替換原則 LSP (Liskov Substitution Principle) 介面隔離原則 ISP (Interface Segragation Principle) 依賴反轉原則 DIP (Dependency Inversion Principle) 更多物件導向的理論的學習內容會整理到 PHP OO 的進階教學: 淺談物件導向 SOLID 原則對工程師的好處與如何影響能力 再談 SOLID 原則,Why SOLID?  開放封閉原則 OCP (Open Closed Principle) 一、定義與說明: 軟體中的實體(如:類別、模組、方法),必須能夠擴充延伸但不能做修改。 Software entities like classes, modules and functions should be open for extension but closed for modifications. 寫程式的時候,應該注意有哪些部分可能在開發完成後,會經常因為 需求改變 導致需要修改程式。(需求改變常常指的是新增功能) 以往在開發應用程式或系統時,擴充新功能通常會更動許多地方(牽一髮而動全身)。然而用 最小的幅度來修改已存在的程式碼(甚至不修改)才是最佳的情況 。 開放封閉原則(Open Closed Principle)是一個可以讓程式在擴充新功能時,不更動原程式碼或者僅以最小幅度修改程式碼的開發方式。 二、遵守單一職責原則的結果: 不管擴增多少新功能,都不必修改原程式碼。 案例:如 Chrome 的擴增套件,可不斷擴增新套件,但不必修改到 Chrome 本身。 三、如何設計單一職責原則的類別?: 在設計上應該要使用抽象層的介面(interface),透過實作介面行為來擴充我們的商業邏輯。 這樣的設計,配合依賴注入(Dependency Injection)讓未來擴充功能時,只需要新增類別並實作介面。最後再將