黎克特制代換原則由2023年圖靈獎得主、美國第一位電腦科學女博士barbara liskov教授和卡內基·梅隆大學jeannette wing教授於2023年提出。其嚴格表述如下:如果對每乙個型別為s的物件o1,都有型別為t的物件o2,使得以t定義的所有程式p在所有的物件o1代換o2時,程式p的行為沒有變化,那麼型別s是型別t的子型別。這個定義比較拗口且難以理解,因此我們一般使用它的另乙個通俗版定義: 黎克特制代換原則(liskov substitution principle, lsp):所有引用基類(父類)的地方必須能透明地使用其子類的物件。
黎克特制代換原則告訴我們,在軟體中將乙個基類物件替換成它的子類物件,程式將不會產生任何錯誤和異常,反過來則不成立,如果乙個軟體實體使用的是乙個子類物件的話,那麼它不一定能夠使用基類物件。例如:我喜歡動物,那我一定喜歡狗,因為狗是動物的子類;但是我喜歡狗,不能據此斷定我喜歡動物,因為我並不喜歡老鼠,雖然它也是動物。
黎克特制代換原則是實現開閉原則的重要方式之一,由於使用基類物件的地方都可以使用子類物件,因此在程式中盡量使用基類型別來對物件進行定義,而在執行時再確定其子類型別,用子類物件來替換父類物件。
在使用黎克特制代換原則時需要注意如下幾個問題:
黎克特制替換原則通俗的來講就是:子類可以擴充套件父類的功能,但不能改變父類原有的功能。它包含以下4層含義:
看上去很不可思議,因為我們會發現在自己程式設計中常常會違反黎克特制替換原則,程式照樣跑的好好的。所以大家都會產生這樣的疑問,假如我非要不遵循黎克特制替換原則會有什麼後果?後果就是:你寫的**出問題的機率將會大大增加。
java設計模式 設計原則
開閉原則也就是說對擴充套件開放,對修改關閉,在程式需要進行業務拓展的時候,不能修改程式原有的 體系,而是選擇以擴充套件的原則,實現乙個熱拔插的效果。用 來說,就是在開發過程中,我們更多的應該使用介面和抽象類。不要存在多於乙個導致類變更的原因,也就是說每個類都應該實現單一的職責,如若不然,就應該把類拆...
JAVA與模式 設計原則筆記
設計原則 開 閉 原則 open close principle 或者ocp 目標 乙個軟體實體應該對擴充套件開發,對修改say no 在設計乙個模組的時候,應當思考日後公升級過程中,如何不修改源 的情況下改變這個模組的行為 黎克特制代換原則 liskov substitution principl...
java設計模式原則
大話設計模式 單一職責原則 乙個類僅有乙個引起它變化的原因 開放 封閉原則 可擴充套件,不可修改 依賴倒轉原則 1 高層不應該依賴於低層模組,兩個都應該依賴於抽象 2 抽象不應該依賴於細節,細節應該依賴於抽象 李氏代換原則 lsp 子型別必須能夠替換掉他們的父型別 迪公尺特法則 lod 如果兩個類不...