2014-10-29 68 views
1

我能夠得到LSP及其違規的總體思路。比如說,擴展一個具有setWidth()和setHeight()函數的矩形的方形是對LSP的細微的違反,因爲有一個額外的要求。同樣,一個GreenDuck用一個函數(Grass g)擴展一個Duck類不能有一個額外的子句,要求草是綠色的。Liskov替代原理

對於正方形和長方形的場景,我認爲用自己的方式來實現多邊形接口和矩形以及實現多邊形的方形是正確的。 對於GreenDuck場景,GreenDuck使用組合將Duck作爲其領域之一可能是一個好主意。 Q1)我對上述兩種情況的理解是正確的嗎? Q2)另外,我無法模擬LSP將允許「擴展」的場景,這引起了我的疑問。有人可以深入研究LSP並提供具體的例子,如果延伸是合適的和獎金,如果它是組成不會那麼好。

編輯:爲清楚起見

回答

3

在里氏的背景下,檢查接口和修改接口之間的區別是很重要的。一個正方形的「is-a」矩形,就像矩形一樣,你可以得到它的高度和寬度。它不同於矩形,因爲您無法分別設置其高度和寬度。所以如果通過「這將是正確的實現多邊形接口」,你的意思是Rectangle應該有一個getPolygonVertices函數,那麼當然,這很好。但如果你的意思是它應該實現一個接口有setPolygonVertices那麼這是錯誤的,出於同樣的原因,Square不能有setHeightAndWidthRectangle

至於GreenDuck有一個Duck成員.... eeeh ...這將有點怪異。鴨子裏面通常還有其他鴨子嗎?

+0

我想我的編輯將闡明我對多邊形的理解以及實現繼承的正確方法。至於鴨子的例子,有時候聽起來很奇怪的英語可能是正確的。如果我將Duck重新標記爲AbstractDuckBehaviour,該怎麼辦?你會因爲重新命名而樂意使用作文嗎? – 2014-10-29 20:48:11

相關問題