里氏代換原則小結
里氏代換原則是對“開-閉”原則的補充,是對實現抽象化具體步驟的規范。里氏代換原則的嚴格表達是:
如果對每一個類型為T1的對象o1,都有類型為T2的對象o2,使得以T1定義所有程序P在所有的對象o1都代換成o2時,程序P的行為沒有變化,那么類型T2是類型T1的子類型。
換言之,如果一個軟件實體使用的是一個基類的話,那么一定使用于其子類,而且它根本不能覺察出基類對象與子類對象的區別。
比如,有兩個類,一個是基類Base,一個是其子類Derived。如果有一方法能接受一個Base類的對象b的話:
method(b);
那么它必然可以接受一個子類Derived的對象d,既也可以有
method(d);
里氏代換原則是繼承復用的基石。只有當衍生類可以替換掉基類,軟件單位的功能呢不受影響時,基類才能被真正的復用,而衍生類才能在基類的基礎上增加新的行為。
Kyle Wang