4

为什么组合优于继承?

 2 years ago
source link: https://www.jdon.com/61823
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为什么组合优于继承?

22-08-08 banq


过度(滥用)继承一直是OO的最大问题之一。
组合可以在OO或FP中实现,对FP的了解(哪怕是一点点)可以积极地影响你如何写OO代码。

继承不应该是学生们学习的第一件事,但它却是。
我看到很多初学者从第一天开始就接触到这种垃圾。它是这样的:hello world、变量、加数字、打印数字、面向对象的编程与继承,该死的中间地带在哪里?

"狗是哺乳动物,但猫也是哺乳动物,所以狗叫喵,猫叫汪"。嗯,是的,在现实世界的领域建模和软件工程中多么美妙的帮助。

一个好的中间地带实际上是依赖注入,你没有使用继承,而且一个类的依赖关系是预先和明显的。
我可以注入一些新的行为,甚至删除一些行为,而不需要把继承树搞得层层深入。
如果有人因此对你说三道四,那么就说这实现了SOLID中的D。

组合优于继承并不意味着“永远不要使用继承”
问题是大多数开发人员并不擅长 API 设计,即使经过数十年的编程也是如此。任何缺乏经验然后着手发布可扩展类的人都可能做得很糟糕。
组合更容易正确,但归根结底,糟糕的设计师会做错事,无论他们使用继承还是组合。
我怀疑密封类将在保护开发人员免受不可预见的扩展方面大有帮助。
最后,任何使用继承来重用实现的人都做错了:
继承是关于表达关系,而不是代码重用。
如果你想重用代码,那么组合才是正确的方法。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK