【设计模式】软件设计七大原则 ( 里氏替换原则 | 定义 | 定义扩展 | 引申 | 意义 | 优点 )
文章目錄
- 一、里氏替換原則定義
- 二、里氏替換原則定義擴(kuò)展
- 三、里氏替換原則引申意義
- 四、里氏替換原則意義
- 五、里氏替換原則優(yōu)點(diǎn)
一、里氏替換原則定義
里氏替換原則定義 :
如果 對每一個 類型為 T1 的 對象 o1 , 都有 類型為 T2 的 對象 o2 ,
使得 以 T1 定義的 所有程序 P 在 所有對象 o1 都 替換成 o2 時 ,
程序 P 的 行為 沒有發(fā)生變化 ,
那么 類型 T2 是 類型 T1 的 子類型 ;
符號縮寫說明 : T 是 類型 Type , o 是 對象 Object , P 是 程序 Program ;
通俗理解 :
T1 類 生成 o1 對象 ,
T2 類 生成 o2 對象 ,
開發(fā)的 程序 P 中 使用了 T1 類型 , 使用 T1 創(chuàng)建了對象 o1 ,
將程序中 所有的 o1 都替換成 T2 o2 時 ,
程序 P 的行為 , 沒有發(fā)生變化 ,
可以認(rèn)為 T2 是 T1 的子類型 ;
T2 是 T1 的子類型 , T1 則是 T2 的父類 ;
里氏替換原則 是 繼承復(fù)用 的基石 , 只有當(dāng) 子類 可以 替換 父類 , 并且 軟件功能不受影響 時 , 父類才能真正的被復(fù)用 , 子類也能在父類的基礎(chǔ)上 增加新的行為 ;
里氏替換原則 是對 開閉原則 的補(bǔ)充 , 實(shí)現(xiàn)開閉原則的關(guān)鍵是 進(jìn)行抽象 , 父類 和 子類 的繼承關(guān)系 , 就是 抽象 的具體實(shí)現(xiàn) ;
二、里氏替換原則定義擴(kuò)展
里氏替換原則定義擴(kuò)展 :
一個 軟件實(shí)體 如果 適用于 一個父類的話 ,
那 一定適用于其子類 ,
所有 引用父類的地方 , 必須能 透明地 使用其子類的對象 ,
子類對象 能夠 替換父類對象 , 而 程序邏輯不變 ;
通過繼承深入理解里氏替換原則 :
抽象類父類中如果已經(jīng)有實(shí)現(xiàn)好的方法 , 實(shí)際上 , 是在設(shè)定一系列的規(guī)范 和 契約 ,
父類不強(qiáng)制要求子類遵從這些契約 ,
但是如果子類任意修改父類的非抽象方法 ,
就會破壞整個繼承體系 ,
里氏替換原則 明確反對 子類重寫父類方法 ;
繼承作為 面向?qū)ο?的特性之一 , 給設(shè)計程序時 , 帶來了很大的便利 , 同時也 帶來很多弊端 ;
如 : 使用繼承 , 會給程序帶來一些侵入性 , 降低可移植性 , 增加了對象間的耦合 ;
如果一個父類 被 很多子類繼承 , 假設(shè)修改該父類 , 必須考慮所有的子類 , 否則會給系統(tǒng)引入未知風(fēng)險 ;
三、里氏替換原則引申意義
子類 可以 擴(kuò)展 父類的功能 , 但是絕對不能 改變 父類原有的功能 ;
子類 可以 實(shí)現(xiàn) 父類的 抽象方法 , 但是 不能 覆蓋 父類的 非抽象方法 ;
子類中 可以 增加 自己特有的方法 ;
重載 ( 輸入?yún)?shù) 寬松 ) : 子類的方法 重載 父類的方法 時 , 方法的前置條件 ( 輸入?yún)?shù) ) , 要比 父類方法的輸入?yún)?shù)更寬松 ;
如 : 父類的參數(shù)是 HashMap , 如果要符合 里氏替換原則 , 子類如果重載父類方法 , 那么需要使用 Map 類型參數(shù) ;
( 這里注意區(qū)分 重寫 與 重載 , 重寫是重寫父類方法 , 重載是函數(shù)名相同 , 參數(shù)不同 )
重寫 ( 返回值 嚴(yán)格 ) : 當(dāng) 子類的方法 重寫 / 重載 / 實(shí)現(xiàn) 父類的方法時 , 方法的 后置條件 ( 返回值 ) 要 比父類更嚴(yán)格或相等 ;
如 : 父類的返回值是 Map , 子類的相同的方法 是 Map 或 HashMap ;
四、里氏替換原則意義
里氏替換原則 要求很多 , 但是在程序中 , 如果不遵守 里氏替換原則 ,
尤其是關(guān)于 重載 ( 輸入?yún)?shù) 寬松 ) 和 重寫 ( 返回值 嚴(yán)格 ) , 都沒有特別注意 ,
程序也可以正常運(yùn)行 , 不會出現(xiàn)問題 ;
后果是在 需求變更 , 引入新功能 , 重構(gòu)時 , 出問題的風(fēng)險增加 ;
里氏替換原則只是一個約束 , 不是嚴(yán)格執(zhí)行的標(biāo)準(zhǔn) ;
五、里氏替換原則優(yōu)點(diǎn)
里氏替換原則優(yōu)點(diǎn) :
- 防止繼承泛濫 : 是 開閉原則 的一種體現(xiàn) ;
- 增強(qiáng)健壯性 : 如果滿足 里氏替換原則 , 會 加強(qiáng)程序的健壯性 , 同時 變更時 , 可以做到非常好的 兼容性 , 提高程序的 維護(hù)性 , 擴(kuò)展性 ; 降低需求變更時 引入的風(fēng)險 ;
總結(jié)
以上是生活随笔為你收集整理的【设计模式】软件设计七大原则 ( 里氏替换原则 | 定义 | 定义扩展 | 引申 | 意义 | 优点 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【设计模式】软件设计七大原则 ( 接口隔
- 下一篇: 【设计模式】软件设计七大原则 ( 合成复