具体类的继承是邪恶的吗?

MrE*_*vil 11 c++

我为大多数类型使用接口/抽象基类,并且不经常从具体类继承,但我最近遇到了需要继承或组合的情况.我已经意识到格言"程序到界面,而不是实现",但最近决定深入挖掘.

我已经看到了反对 继承的论点,我已经看到了反驳论点,但我很好奇大型代码库的其他维护者在现实生活中实际做了些什么.恐惧被夸大了吗?你是继承具体的类,还是继承怀疑论者是正确的?我特别感兴趣的是那些使用C++工作的人.

Mat*_*ggs 11

不是C++人(在c#,java和ruby中拥有大型企业系统的专业经验),但这是我的2美分无论如何

这不是一件黑白分明的事情.

继承的问题在于它引入了紧耦合.更糟糕的是,耦合通常是封装状态.超类的变化可能会在继承层次结构中产生涟漪效应,从而产生微妙且难以预测的错误.

接口隔离完全回避了这些问题,因为它不会以同样的方式破坏封装.

继承的好处在于,有时你有一个真正相同的对象模型,只需要进行非常小的更改或添加.只要这种变化非常明确,范围不广,并且不是一个额外的约束(参见圆椭圆问题),代码重用将胜过紧耦合.

作为一个经验法则,我坚持继承作品而不是法律.