精華區beta OOAD 關於我們 聯絡資訊
※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言: [...] : 那就是 Liskov Substitution Principle; : 因為蠻多 OO 設計者容易陷入程式與現實世界性質對應的迷思, : 將 is-almost-a 的關係當成 is-a 的關係來描述, : 常聽到的一個例子就是, : 在數學上正方形是一種矩形, : 所以就會有人做出一個 Rectangle 的 base class 出來, : 並讓 Square 繼承它, : 但是 Square 的 setWidth() 和 setHeight() 都會同時改變寬和高, : 而 Rectangle 的這兩個 method 並不會如此, : 當 programmer 以多型方式使用 Rectangle 家族的任何 objects 時, : 會因此發生 semantic inconsistent 的現象。 : 這類問題的嚴重性在於「程式碼不是只有一個人在維護」時, [...] 感謝分享啊,原來這總現象的 keywords 是 semantic inconsistent Liskov Substitution Principle (知識與 keyword 是可遇不可求的 XD) 不過既然 Square 是 Rectangle 的 special case 這樣的關係應該以裝飾者的角度來看待嚕 正確地覆寫父類別並能通過 w/h 相等的 unit test PS. 當然 >"< 我用說的確實比真的在寫時簡單 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.59.94.117