黎克特制代換原則

2021-09-02 07:01:31 字數 1403 閱讀 5466

黎克特制代換原則

「黎克特制代換原則是barbara liskov

女士在1988

年發表的

,具體數學定義比較複雜,你可以查相關資料,它的白話翻譯就是乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,

而且它察覺不出父類物件和子類物件區別。也就是說,在軟體裡面,把父類都替換成它的了類,程式的行為沒有變化,簡單地說,子型別必須能夠替換掉它們的父型別。」

黎克特制代換原則(lsp

):子型別必須能名替換掉它們的父型別。

下面是大話設計模式的對話,我感覺很生動有趣。

「這好像是學繼承時就要了解的概念,子類繼承了父類,所以子類可以以父類的身份出現。」

「是的,我問你個問題,如果在物件導向設計時,乙個鳥類,乙個是企鵝類,如果鳥是可以飛的,那麼企鵝是鳥嗎?企鵝可以繼承鳥這個類嗎?」

「企鵝是一種特殊的鳥,儘管不能飛會晤它也是鳥呀,當然可以繼承。」

「哈,你上當了。我說的物件導向設計時,那就意味著什麼呢?子類擁有父類所有非private

的行為和屬性。」

鳥會飛企鵝不會飛。儘管在生物學分類上,企鵝是一種鳥,便在程式設計世界裡,企鵝不能以父類-鳥的身份出現,因為前提說所有鳥都能飛,而企鵝飛不了,所以,企鵝不能繼承鳥類。」

哦,你的意思我明白了,我受了直覺的影響。小時候上課時老師一再強調,像鴕鳥、企鵝等不會飛的動物也是鳥類。」

「也正因為有了這個原則,使得繼承利用成為了可能,只有當子類可以替換掉父類,軟體單位功能不受到影響時,父類才能真正被利用,而子類也能夠在父類的基礎上增加新的行為。比方說,貓是繼承動物類的,以動物的身份擁有吃、喝,跑、叫等為,可當某一天,我們需要狗、牛、羊也擁有類似的行為,由於它們都是繼承於動物,所以除了更改例項化的地方,程式其他處不需要改變。」

「我的感覺,由於有黎克特制代換原則,才使得開放-封閉成為了可能。」小菜說。

「這樣說是可以的,正是由於子型別的可替換性才使用父型別的模組在無需要修改的情況下就可以擴充套件。不然還談什麼擴充套件開放,修改關閉呢。再回過頭來看依賴倒轉原則,高層模組不應該依賴低層模組,兩個都應該依賴抽象,對這句話你就會有更深入的理解了。」

「哦,我明白了,依賴合圍其實就是誰也不要依靠誰,除了約定的介面,大家都可以靈活自如。還好,她沒有問我如何修收音機,收音機裡都是些電阻、三極體,電路等等東東,全都焊接在一起,我可不會修的。」小菜慶幸道。

黎克特制代換原則

黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的...

黎克特制代換原則

黎克特制代換原則 黎克特制代換原則 子型別必須能夠替換掉它們的父型別。就是說乙個軟體實體,如果使用的是乙個父類的話,那麼一定適用於其子類,而且,它覺察不出父類物件和子類物件的區別,也就是說,在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。只有當子類可以替換掉父類,軟體單位的功能不收到影響時,...

黎克特制代換原則

黎克特制代換原則 子型別必須能替換掉它們的父型別.只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正的被復用,而子類也能夠在父類的基礎上增加新的行為.比如說,貓類繼承動物類,動物類擁有吃喝叫跑等行為,當某一天,我們需要狗,牛,羊也擁有類似的行為,由於它們都是繼承於動物,所以除了更改例...