LSP黎克特制代換原則

2021-09-29 04:42:40 字數 1182 閱讀 7803

一.概念

首先,黎克特制替換原則lsp的全拼是.lsp(the liskov substitution principle) ,她提出的這項原則關鍵在於:乙個軟體實體如果使用的是乙個基類的話,一定適用於其 子類,而且根本不能覺察出基類物件和子類物件的區別。

抽象概念:

「若對於型別s的任一物件o1,均有型別 t的物件o2存在,使得在t定義的所有程式p中,用o1 替換o2之後,程式的行為不變,則s是t的子型別」。

具體定義:

在乙個軟體系統中,子類應該能夠完全 替換任何父類能夠出現的地方,並且經過替換後, 不會讓呼叫父類的客戶程式從行為上有任何改變。

二.liskov替換原則的意義

在客戶程式在呼叫某乙個類時,實際上是對該類的整個繼 承體系設定了一套約束,繼承體系中的所有類必須遵循這 一約束,即前置條件和後置條件必須保持一致。這為物件 繼承加上了一把嚴格的枷鎖。

lsp原則對於約束繼承的氾濫具有重要意義。

所有派生類的行為功能必須和使用者對其基類的期望保 持一致,如果派生類達不到這一點,那麼必然違反黎克特制替 換原則。

黎克特制代換原則就是在設計時避免出現派生類與基類不一致 的行為。

黎克特制代換原則目的就是要保證繼承關係的正確性。

三.黎克特制代換原則例項

1.典型的正方形不是長方形問題。

長方形類

public class rectangle

setheight(int height)

}

正方形類

public class square extends rectangle

setheight(int height)

}

測試類

public void resize(rectangle r)

}

在這個測試類中,我們給傳入乙個rectangle的物件,設定它的長寬為5和10,那麼在測試類執行結束時,長寬為11和10,如果傳入了square 的物件,則會一直無限執行下去,即達到了兩種完全不同的效果,則這裡的子類物件不能替代掉父類,所以違背了黎克特制代換原則。

四.黎克特制代換原則引申出新的規則

 只要有可能,不要從具體類繼承,而應該從抽象類繼 承或是實現介面。

 行為集中的方向是向上的(抽象類)。

 資料集中的方向是向下的(具體類)。

第7章 黎克特制代換原則(LSP)

b 黎克特制代換原則 b 如果對每乙個型別為t1的物件o1,都有型別為t2的物件o2,使得程式p的所有物件o1被替換成o2時,程式p的行為沒有變化,那麼型別t2是型別t1的子型別。黎克特制替換原則是繼承復用的基石。只有當衍生類可以替換掉基類,軟體單位的功能不會受到影響時,基類才能真正的被復用,而衍生...

黎克特制代換原則

黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的...

黎克特制代換原則

黎克特制代換原則 黎克特制代換原則 子型別必須能夠替換掉它們的父型別。就是說乙個軟體實體,如果使用的是乙個父類的話,那麼一定適用於其子類,而且,它覺察不出父類物件和子類物件的區別,也就是說,在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。只有當子類可以替換掉父類,軟體單位的功能不收到影響時,...