没有继承的OOP重用:如何;“真实世界”;这是实用的吗?
本文描述了一种我觉得有趣的OOP方法: 如果对象作为对象存在呢 封装,以及通信 通过短信?如果代码重用失败了怎么办 与继承无关,但 使用组合、委派,甚至 老式的辅助对象或任何 程序员认为合适的技术? 本体论不会消失,但它会消失 与实现分离 没有继承或依赖于类层次结构的重用思想是我发现最令人震惊的,但是这有多可行呢 给出了一些示例,但我不太明白如何更改当前代码以适应这种方法 那么,这种方法的可行性如何?还是真的不需要更改代码,而是需要一种基于场景的方法,即“仅在需要或最佳时使用” 编辑:哎呀,我忘了链接:这里是我肯定你听说过“总是喜欢组合而不是继承” 这个前提的基本思想是将具有不同功能的多个对象放在一起,以创建一个功能齐全的对象。这应该优先于从互不相关的不同对象继承功能 关于这一点的主要论点包含在本海报的定义中,并以有趣的方式加以说明: 如果您有一个ToyDuck对象,那么从纯继承的角度来看,您应该从哪个对象继承?你应该继承鸭子的遗产吗?不,很可能你应该继承玩具 底线是您应该为代码使用正确的抽象方法——无论是继承还是组合没有继承的OOP重用:如何;“真实世界”;这是实用的吗?,oop,inheritance,composition,Oop,Inheritance,Composition,本文描述了一种我觉得有趣的OOP方法: 如果对象作为对象存在呢 封装,以及通信 通过短信?如果代码重用失败了怎么办 与继承无关,但 使用组合、委派,甚至 老式的辅助对象或任何 程序员认为合适的技术? 本体论不会消失,但它会消失 与实现分离 没有继承或依赖于类层次结构的重用思想是我发现最令人震惊的,但是这有多可行呢 给出了一些示例,但我不太明白如何更改当前代码以适应这种方法 那么,这种方法的可行性如何?还是真的不需要更改代码,而是需要一种基于场景的方法,即“仅在需要或最佳时使用” 编辑:哎呀,我忘
对于当前对象,考虑是否有应该从继承树中移除的对象,并将其仅仅包含为可以调用和调用的属性。
< P>我只是略过了文本,但似乎说明了OO设计总是什么:继承不意味着代码重用工具,松耦合是好的。这已经写了几十次了,请参阅文章底部的链接参考资料。这并不意味着您应该完全跳过继承,您只需要简洁地使用它,并且只有在它有意义时才使用它。文章还指出了这一点 至于duck类型,我觉得示例和想法有问题。像这个:function good (foo) {
if ( !foo.baz || !foo.quux ) {
throw new TypeError("We need foo to have baz and quux methods.");
}
return foo.baz(foo.quux(10));
}
添加三行新行只是为了报告运行时自动报告的错误有什么意义?继承不适合代码重用。为代码重用而继承通常会导致:
那些坚持认为继承是不必要的,或者说它是“坏的”的人正在创造救命稻草:很容易想象继承被不当使用的场景这不是对工具的反映,而是对工具用户的反映我们可以链接到原始文章吗?继承经常被过度使用,但有时实现继承确实非常强大和优雅。没有继承的语言不是OO,句号。