[Liskov 里氏替換原則新解] — 原來我這樣是錯的!

Yu-Song Syu
Sep 4, 2018 · 2 min read

大家都聽過物件導向程式的SOLID法則中的Liskov替換原則,考試也都考一百分呢!

而考一百分又如何?工作時派得上用場嗎?為了更了解此原則,這樣吧,我們先來看看Liskov替換原則的原文


Wiki這麼說…

…是在供三__?不如,我們來看中譯版如何:

「派生類(子類)對象可以在程式中代替其基類(超類)對象。」

嗯…好。還是不懂!難怪人家可以成為大師…


Kuma老師說…

筆者認為,Liskov原則其實目的在要求大家寫出較好的封裝,也就是,讓介面表達作者意圖,而不依賴對原始碼的知識。

這麼說吧。我們不如來看看什麼叫做「違反Liskov原則」:

當你程式中出現「必須向下轉型不可」的情況,你就違反Liskov原則了。

當向下轉型才能使你的方法不會發生錯誤,或是不先看一下子類別的程式碼就無法保證不出錯,就代表使用者對於子類別的知識,不得不知道得多一點,而「多一點」其實就太多了,應該知道得越少越好才是。

此時,一個沒那麼好的「多型」實作發生了。


簡單來說…

如果有任何事情是「叫兒子做的結果,比爸爸還差」,那這對父子間的血緣關係是應該重新審視的。

你的程式中,也有「向下轉型」嗎?

Yu-Song Syu

Written by

Kuma老師的軟體工程教室

Welcome to the Kingdom of Software Engineering

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade