文章同步於blog
這次介紹的是里式替換原則(LSP, Liskov Substitution Principle)
里式替換原則的核心思想是:如果類別B是類別A的子類別,那麼在不影響程式的正確性的前提下,可以將類別A的對象替換成類別B的對象。
換句話說,子類別應該能夠替換父類別而不會破壞程式的預期行為。
(謎之音:半夜上文章好累...
假設我今天我定義一個形狀 - 長方形
那我的遵守LSP的程式碼會長這樣
class Shape:
def calculateArea(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def calculateArea(self):
return self.width * self.height
這個情況下長方形是一種形狀,那我一定有面積
我可以安全的替換掉父類別而不影響其他的實作
但如果今天變成這樣
class Rectangle():
def calculateArea(self):
pass
class Square(Rectangle):
def __init__(self, width, height):
self.width = width
self.height = height
def calculateArea(self):
return self.width * self.height
這樣就會容易讓人混淆正方形的長寬一定相同,但長方形不是,這樣就不符合里式替換原則
再舉一個經典的例子
所有鳥類都會飛嗎?
不,企鵝不會所有的狗狗都很聰明嗎?
不,吉娃娃不是。
所以當我們實作一個鳥類的介面出來,給企鵝用,企鵝只會跟妳哭說我不會飛(預期之外的錯誤)
Clean Architecture(ch.9)
菜雞與物件導向 (12): 里氏替換原則