<分区>
我的大部分类型都使用接口(interface)/抽象基类,并且不经常从具体类继承,但我最近遇到了需要继承或组合的情况。我知道这句格言“针对接口(interface)编程,而不是针对实现”,但最近决定深入挖掘。
我看过争论 against inheritance ,我见过计数器 arguments但我很好奇大型代码库的其他维护者在现实生活中实际上做了什么。恐惧被夸大了吗?您是从具体类继承,还是继承怀疑论者是正确的?我特别有兴趣听取那些使用 C++ 工作的人的意见。
标签 c++
<分区>
我的大部分类型都使用接口(interface)/抽象基类,并且不经常从具体类继承,但我最近遇到了需要继承或组合的情况。我知道这句格言“针对接口(interface)编程,而不是针对实现”,但最近决定深入挖掘。
我看过争论 against inheritance ,我见过计数器 arguments但我很好奇大型代码库的其他维护者在现实生活中实际上做了什么。恐惧被夸大了吗?您是从具体类继承,还是继承怀疑论者是正确的?我特别有兴趣听取那些使用 C++ 工作的人的意见。
最佳答案
不是 C++ 专家(在 C#、Java 和 Ruby 方面拥有大型企业系统的专业经验),但无论如何这是我的 2 美分
这不是非黑即白的事情。
继承的问题在于它引入了紧耦合。更糟糕的是,耦合通常围绕封装状态。父类(super class)中的更改可能会对继承层次结构产生链式 react ,产生微妙且难以预测的错误。
接口(interface)隔离完全回避了这些问题,因为它不会以同样的方式破坏封装。
继承的好处在于,有时您拥有的对象模型实际上是同一事物,只是有非常小的更改或添加。只要该更改非常明确,范围不广,并且不是额外的约束(参见 circle-ellipse 问题),代码重用将胜过紧耦合。
我坚持将组合置于继承之上作为经验法则,而不是法律。
关于c++ - 具体类的继承是邪恶的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887871/