
[Liskov 里氏替換原則新解] — 原來我這樣是錯的!
Sep 4, 2018 · 2 min read
大家都聽過物件導向程式的SOLID法則中的Liskov替換原則,考試也都考一百分呢!

而考一百分又如何?工作時派得上用場嗎?為了更了解此原則,這樣吧,我們先來看看Liskov替換原則的原文:
Wiki這麼說…
…是在供三__?不如,我們來看中譯版如何:
「派生類(子類)對象可以在程式中代替其基類(超類)對象。」
嗯…好。還是不懂!難怪人家可以成為大師…
Kuma老師說…
筆者認為,Liskov原則其實目的在要求大家寫出較好的封裝,也就是,讓介面表達作者意圖,而不依賴對原始碼的知識。
這麼說吧。我們不如來看看什麼叫做「違反Liskov原則」:
當你程式中出現「必須向下轉型不可」的情況,你就違反Liskov原則了。
當向下轉型才能使你的方法不會發生錯誤,或是不先看一下子類別的程式碼就無法保證不出錯,就代表使用者對於子類別的知識,不得不知道得多一點,而「多一點」其實就太多了,應該知道得越少越好才是。
此時,一個沒那麼好的「多型」實作發生了。
簡單來說…
如果有任何事情是「叫兒子做的結果,比爸爸還差」,那這對父子間的血緣關係是應該重新審視的。
你的程式中,也有「向下轉型」嗎?

