[心得整理] c# 物件導向程式 - 5.LSP 里氏替換原則
前言
SOLID原則的L有兩個原則,今天先介紹LSP 里氏替換原則,另一個L稍候片刻
里氏替換原則 - 現實生活面
LSP重點在說繼承時要注意的事項,那之前三大特性時有說
繼承在現實世界用物種比喻比較貼切
舉例,所有繼承鳥綱的生物無論是能飛老鷹,不能飛的雞,會游泳的企鵝
一定都是卵生,就是會孵蛋,不會例外
里氏替換原則 - 程式面
子類別必須可以替換父類別的功能
在設計class時要想到這方法真的是所有繼承的class都會用到嗎?
設計鳥綱的class,我們可以把卵生這方法放進去,因為所有繼承鳥綱
都要是卵生,那飛行呢,就不可以了,因為不是所有繼承鳥綱的生物都能飛
用一個會員系統來比喻,就是我設計有,註冊方法,登入方法,登出方法,忘記密碼方法
假設有個系統用不到忘記密碼時,A工程師就想反正 我這系統又不提供忘記密碼的功能
就拿來放方便A工程師測試用的刪除會員功能
然後有一天老闆要加入忘記密碼的功能時,B工程師發現已經寫好了,執行後就慘了
對我來說
LSP 里氏替換原則是心法,在設計時要想好是要用class繼承
還是要用介面,讓有用到此功能去繼承介面就好
LSP 里氏替換原則是心法,在設計時要想好是要用class繼承
還是要用介面,讓有用到此功能去繼承介面就好
補充
當檢查null的時候 也算違反LSP , 可以用 Null Object Pattern 這樣就不需要檢查null
Nulls Break Polymorphism
結語
還是強調繼承是強耦合的行為,在繼承之前要想清楚
推薦閱讀
[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day21 - LSP 里氏替換原則
如果內容有誤請多鞭策謝謝