LSP – Liskov Substitution Principle

子型別必須可以替換它們的父型別

如果對於每個型別為S的物件o1,都存在一個型別為T的物件o2,使得在所有以T定義的程P中,以o1取代o2時,P的行為維持不變,則S為T的子型別。

假設有一個函式f,帶有一個指向某個基礎類別B的pointer或reference作為參數,同時假設有某個B的衍生類別D,將D轉型成B後傳遞給f,會導致行為不正常,那麼D就違反了LSP。顯然D在f中是脆弱的。

f的作者會嘗試為D加入某種測試,以使得當D傳遞給f時,f能行為正確。這個測試違返了OCP,因為現在f對於不同的B衍生類別都不具有封閉性,這樣的測試就是程式碼的壞味。

違返LSP就是潛在違返OCP。

“IS-A"太過廣義了,不能當作subtype的定義。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s