1. 程式人生 > >面向對象設計原則 裏氏替換原則(Liskov Substitution Principle)

面向對象設計原則 裏氏替換原則(Liskov Substitution Principle)

自我 必須 活性 繼承 rdquo 類的抽象 方法 擁有 增加

裏氏替換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。

裏氏替換原則中說,任何基類可以出現的地方,子類一定可以出現。

LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。

如此,問題產生了:“我們如何去度量繼承關系的質量?”

Liskov於1987年提出了一個關於繼承的原則

“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”

“繼承必須確保超類所擁有的性質在子類中仍然成立。”

也就是說,當一個子類的實例應該能夠替換任何其超類的實例時,它們之間才具有is-A關系。該原則稱為Liskov Substitution Principle——裏氏替換原則。

原則:

1. 子類必須完全實現父類的抽象方法,但不能覆蓋父類的非抽象方法;
2. 子類中可以增加自己特有的方法;
3. 當子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數要更寬松;
4.當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。


優點:
1. 提高代碼的重用性,子類擁有父類的方法和屬性;
2. 提高代碼的可擴展性,子類可形似於父類,但異於父類,保留自我的特性;

缺點:
1. 繼承是侵入性的,只要繼承就必須擁有父類的所有方法和屬性,在一定程度上約束了子類,降低了代碼的靈活性;
2. 增加了耦合,當父類的常量、變量或者方法被修改了,需要考慮子類的修改,所以一旦父類有了變動,很可能會造成
非常糟糕的結果,要重構大量的代碼。

面向對象設計原則 裏氏替換原則(Liskov Substitution Principle)