黎克特制替換原則
ps:完全暈了+_+
為什麼會出現這個原則呢?
問題由來:有一功能p1,由類a完成。現需要將功能p1進行擴充套件,擴充套件後的功能為p,其中p由原有功能p1與新功能p2組成。新功能p由類a的子類b來完成,則子類b在完成新功能p2的同時,有可能會導致原有功能p1發生故障。
解決方案:當使用繼承時,遵循黎克特制替換原則。類b繼承類a時,除新增新的方法完成新增功能p2外,盡量不要重寫父類a的方法,也盡量不要過載父類a的方法。
繼承包含這樣一層含義:父類中凡是已經實現好的方法(相對於抽象方法而言),實際上是在設定一系列的規範和契約,雖然它不強制要求所有的子類必須遵從這些契約,但是如果子類對這些非抽象方法任意修改,就會對整個繼承體系造成破壞。而黎克特制替換原則就是表達了這一層含義。
總結一下:當遵循黎克特制替換原則時,程式中的所有父類物件都應該可以被子類物件替換並且不影響原有功能。
那麼如何處理呢?
栗子:
public
class people
}public
class boy : people
}public
class girl : people
}public
class cline
//替換後
public
void
replacemain()
}
那麼無論將來需要擴充套件man或者women都不要去重寫eat方法,那麼,eat方法是保持原有行為不變的,所有people物件都可以使用子類進行替換。
重點在這裡
看上去很不可思議,因為我們會發現在自己程式設計中常常會違反黎克特制替換原則,程式照樣跑的好好的。所以大家都會產生這樣的疑問,假如我非要不遵循黎克特制替換原則會有什麼後果?
後果就是:你寫的**出問題的機率將會大大增加。
黎克特制替換原則
黎克特制替換原則 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍...
黎克特制替換原則
黎克特制替換原則更多的說的是子類與父類的關係的一種原則,子類必須實現父類的所有方法,所有能夠放子類的地方一定能夠放父類。但是這裡的話,我們講有的時候在我們的業務中,有的子類肯定是有個性化的特徵的,比如真槍和玩具槍,真槍能射出子彈,但是玩具槍就不能,那麼這個時候,我們或者通過抽象類,通過抽象類是我們可...
黎克特制替換原則
黎克特制替換原則,主要是乙個關於繼承的規範原則,它要求我們在軟體中寫繼承關係時,所有引用父類的地方必須能夠 透 明地使用其子類物件 子類可以實現父類所提供的抽象 方法,但不要去重寫父類已經實現的方法,或者過載父類的 構 造。要維護繼承的傳遞性,當然很多地方為這個原則打了個 比喻為 龍生龍,鳳生鳳,老...