Liskov替換原則(LSP)

2021-08-29 11:42:54 字數 731 閱讀 1158

注:摘自《敏捷軟體開發:原則、模式與實踐》(robert c. martin)

對於lsp可以做如下解釋:

子型別(subtype)必須能夠替換掉它們的基型別(base type)

barbara liskov首次寫下這個原則是在2023年。她說到,

這裡需要如下替換性質: 若對每個型別s的物件o1,都存在乙個型別t的物件o2,使得在所有針對t編寫的程式p中,用o1替換o2後,程式p行為功能不變,則s是t的子型別。

ood中is-a關係是就行為方式而言的,行為方式是可以進行合理假設的,是客戶程式所依賴的。

基於契約設計(design by contract dbc),類的編寫者顯式的規定針對類的契約。客戶**的編寫者通過該契約獲悉可以依賴的。契約是通過為每個方法宣告的前置條件(preconditions)和後置條件(postconditions)來指定的。要使乙個方法得以執行,前置條件必須為真。執行完畢後,該方法要保證後置條件為真。

ocp是ood中很多說法的核心。如果這個原則應用得有效,應用程學就會具有更多的可維護、可重用性以及健壯性。lsp是使ocp成為可能的主要原則之一。正是子型別的可替換性才使得使用基型別的模組在無需修改的情況下就可以擴充套件。這種可替換性必需是開發人員可以隱式依賴的東西。因此,如果沒有顯式的強制基類型別的契約,那麼**就必須良好的並且明顯的表達出這一點。

術語「is-a」的含意過於寬泛以至於不能作為子型別的定義。子型別的正確定義是「可替換性」的,這裡的可替換性可以通過顯式或者隱式的契約來定義。

軟體設計原則 LisKov替換原則(LSP)

乙個軟體實體如果使用的是乙個基類的話,一定適用於其子類,而且根本不能覺察出基類物件和子類物件的區別。陳述 barbara liskov對原則的陳述 若對每個型別s的物件o1,都存在乙個型別t的物件o2,使得在所有針對t編寫的程式p中,用o1替換o2後,程式p的行為功能不變,則s是t的子型別。通俗地講...

Liskov替換原則

2.3.3 liskov替換原則 barbara liskov於1988年提出了著名的替換原則 如果對於型別s的每個物件o1存在型別t的物件o2,那麼對於所有定義了t的程式p來說,當用o1替換 o2並且s是t的子型別時,p的行為不會改變。通俗地講,就是子型別能夠完全替換父型別,而不會讓呼叫父型別的客...

黎克特制替換原則,LSP

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