P3 黎克特制替換原則 LSP

2021-10-01 02:43:16 字數 1029 閱讀 8923

黎克特制替換原則(liskov substitution principle),簡稱lsp.

美國電腦科學barbara liskov提出定義如下:

如果對每乙個型別為s的物件o1,都有型別為t的物件o2,使得以t定義的所有程式p在所有的物件o1代換o2時,程式p的行為沒有變化,那麼型別s是型別t的子型別。
引用基類(父類的)地方都可以用子類來替換,但是反過來就不行。比如,香蕉是水果,但是水果不一定是香蕉。由於基類可以使用子類類替換,因此在程式中盡量使用基類來定義物件,在執行時指向其子類。

黎克特制替換原則屬於開閉原則的規範之一。

1、子類必須實現父類的抽象方法,但不得重寫(覆蓋)父類的非抽象(已實現)方法;

2、子類中可以新增特有方法(父類中不存在),此時則無法在以父類定義的物件中使用該方法,除非在使用的時候強轉基類成子類進行呼叫;

3、當子類覆蓋或實現父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入引數更寬鬆;

4、當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。

在設計的時候,盡量將父類設計為抽象類或者介面,讓子類繼承父類或者實現父類中定義好的介面方法,子類例項在執行時替換父類例項。擴充套件新功能的時候,無需修改原有的子類**。

// 抽象基類

public abstract class

fruits

public

class

banana

extends

fruits

public

class

extends

fruits

// 在水果商店中,設定水果的**,只需要傳入水果基類即可。

//這種方式方便擴充套件新的水果種類,而無須改變介面定義;

public

class

fruitshop

}

黎克特制替換原則是實現開閉原則的重要規範之一,大家在開發過程多體會其中的妙處。

end.

02 黎克特制替換原則 LSP

lsp liskov substitution principle 黎克特制替換原則 所有引用基類 父類 的地方必須能透明地使用其子類的物件。通俗講 子類可以擴充套件父類的功能,但不能改變父類原有的功能 是實現開閉原則的重要方式之一 克服了繼承中重寫父類造成的可用性變差的缺點 它是動作正確性的保證。...

黎克特制替換原則,LSP

所有引用基類的地方必須能夠透明地使用其子類的物件。通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任務異常。我們知道物件導向語言的三大特性就是繼承 封裝 多台,黎克特制替換原則就是依賴於繼承 多型,建立抽象,通過抽象建立規範,在執行時替換成具體的物件,保證系統的拓展性 靈活性。...

2 黎克特制替換原則

肯定有不少人跟我剛看到這項原則的時候一樣,對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年,由麻省理工學院的一位姓裡的女士 barbara liskov 提出來的。如果對每乙個型別為 t1的物件 o1,都有型別為 t2 的物件o2,使得以 t1定義的所有程式 p 在所有的物件 o1 ...