軟體設計原則 黎克特制替換原則

2021-10-07 18:50:15 字數 530 閱讀 1759

liskov substitution principle 黎克特制替換原則

定義:如果對每一型別為t1的物件o1,都有型別為t2的物件o2,使得以t1定義的所有程式p在所有的物件o1都替換成o2時,程式p的行為沒有發生變化,那麼型別t2是型別t1的子型別。

擴充套件:乙個軟體實體如果適用乙個父類的話,那一定適用於其子類,所有引用父類的地方必須能透明的使用其子類的物件,子類物件能夠替換父類物件,而程式邏輯不變。

什麼意思呢?就是子類可以擴充套件父類的功能,但不能改變父類原有的功能。

子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。

子類可以增加自己特有的方法

當子類的方法過載父類方法時,方法的前置條件(即方法的輸入引數)要不父類方法的輸入引數更寬鬆。

當子類的方法實現父類的方法時(重寫、過載或實現抽象方法),方法的後置條件(即方法的輸出、返回值)要比父類更嚴格或相等。

優點:約束繼承氾濫,開閉原則的一種體現

加強程式的健壯性,同時變更時也可以做到非常好的相容性提高程式的維護性,擴充套件性。降低需求變更時引入的風險。

1 1軟體設計原則 黎克特制替換原則

定義 黎克特制替換原則,所有引用基類的地方必須能透明地使用其子類的物件。定義手槍抽象類 public abstract class abstractgun 定義玩具槍抽象類 public abstract class abstracttoy 實現手槍射擊 public class handgun e...

軟體設計原則之黎克特制替換原則

黎克特制替換原則,在設計模式之禪一書中有兩種定義 綜合上面比較抽象的含義,換句話可能好理解些 其實就是對於同乙個程式p,把出現父類物件的地方,用子類去替換父類物件執行時,程式p功能或者說行為沒有改變,不會產生任何錯誤或異常 但是反過來就不行了,用父類去替換有子類的地方,由於子類可能擴充套件了一些功能...

軟體設計原則 黎克特制代換原則

黎克特制代換原則是物件導向設計的基本原則之一。黎克特制代換原則 任何基類可以出現的地方,子類一定可以出現。通俗理解 子類可以擴充套件父類的功能,但不能改變父類原有的功能。換句話說,子類繼承父類時,除新增新的方法完成新增功能外,盡量不要重寫父類的方法。如果通過重寫父類的方法來完成新的功能,這樣寫起來雖...