我听说里氏替换原则(LSP)是面向对象设计的基本原则。它是什么?它的使用示例有哪些?
说明 LSP 的一个很好的例子(由鲍勃叔叔在我最近听到的播客中给出)是有时在自然语言中听起来正确的东西在代码中却不太有效。
在数学中,一个Square
is a Rectangle
。事实上,它是矩形的特化。 “is a”让你想用继承来建模。但是,如果在代码中你做了Square
从获得Rectangle
,那么一个Square
应该可以在您期望的任何地方使用Rectangle
。这会导致一些奇怪的行为。
想象一下你有SetWidth
and SetHeight
方法对你的Rectangle
基类;这看起来完全符合逻辑。但是如果你的Rectangle
引用指向一个Square
, then SetWidth
and SetHeight
没有意义,因为设置一个会改变另一个以匹配它。在这种情况下Square
未能通过里氏替换测试Rectangle
以及具有的抽象Square
继承自Rectangle
是一个坏的。
你们都应该看看其他无价的用励志海报解释坚实的原则 https://www.globalnerdy.com/2009/07/15/the-solid-principles-explained-with-motivational-posters/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)