一.概念
首先,黎克特制替換原則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是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的...
黎克特制代換原則
黎克特制代換原則 黎克特制代換原則 子型別必須能夠替換掉它們的父型別。就是說乙個軟體實體,如果使用的是乙個父類的話,那麼一定適用於其子類,而且,它覺察不出父類物件和子類物件的區別,也就是說,在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。只有當子類可以替換掉父類,軟體單位的功能不收到影響時,...