天天看點

【架構師之路】-【01設計模式】-03設計原則之裡式替換原則

 裡氏代換原則由2008年圖靈獎得主、美國第一位計算機科學女博士Barbara Liskov教授和卡内基·梅隆大學Jeannette Wing教授于1994年提出。其嚴格表述如下:如果對每一個類型為S的對象o1,都有類型為T的對象o2,使得以T定義的所有程式P在所有的對象o1代換o2時,程式P的行為沒有變化,那麼類型S是類型T的子類型。

簡單定義為:使用“抽象(Abstraction)”和“多态(Polymorphism)”将設計中的靜态結構改為動态結構,維持設計的封閉性。“抽象”是語言提供的功能。“多态”由繼承語義實作。由于使用基類對象的地方都可以使用子類對象,是以在程式中盡量使用基類類型來對對象進行定義,而在運作時再确定其子類類型,用子類對象來替換父類對象

在軟體中将一個基類對象替換成它的子類對象,程式将不會産生任何錯誤和異常,反過來則不成立,如果一個軟體實體使用的是一個子類對象的話,那麼它不一定能夠使用基類對象。例如:我喜歡動物,那我一定喜歡狗,因為狗是動物的子類;但是我喜歡狗,不能據此斷定我喜歡動物,因為我并不喜歡老鼠,雖然它也是動物。

裡式原則 的注意點為:子類可以擴充父類的功能,但不能改變父類原有的功能。它包含以下4層含義:

  • 子類可以實作父類的抽象方法,但不能覆寫父類的非抽象方法。
  • 子類中可以增加自己特有的方法。
  • 當子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬松。
  • 當子類的方法實作父類的抽象方法時,方法的後置條件(即方法的傳回值)要比父類更嚴格。

最後總結:裡式替換原則就是使用父類類型來定義子類類型;子類 可以擴充父類的功能;但不能修改父類原有的功能!!!

繼續閱讀