我的问题是,这种深层次的继承层次结构是否是一个坏主意(图像尚未充实,最终可能会深入5或6)。这与让一些子类只与父类有定向关联而不是继承相反。
我已经读过深层继承层次结构并不是一个好主意,并且如果一个子类只是为了拥有父数据而继承,那么你应该简单地将父类作为数据包含在子代中,但我是我很难绕过原因。如果我决定制作一个7-deep的继承层次结构或类似的东西,那将会发生什么坏事呢?很明显,性能受到了很小的影响,并且层次结构顶部的变化会在整个应用程序中产生巨大的涟漪,但除此之外我没有看到问题。除此之外,我对性能方面的微小差异一点都不关心。
(奖励问题:是否有一个现成的包处理这种东西?我们处理了大部分低级物理模拟,但我们必须编写的排序程序。我只是有我怀疑我所提出的内容与我之前的10,000名模拟开发人员非常相似。)
(奖励问题#2:任何模拟系统和OOP编程的大师,都不会讨厌生活在洛杉矶?我们正在招聘。)
答案 0 :(得分:10)
如果子类继承只是为了拥有父数据
这是一个坏主意。有这样的理解,你将基类定义为一组(具体)类将要遵守的最通用的契约。这通常意味着您的合同是关于行为而不是实施。
如果我决定制作一个7层深的继承层级或类似的东西,会发生什么坏事呢?
这里的主要问题是平凡的:
(许多人希望在Why Ada isn't popular上仔细阅读本文,尤其是第6项第6段。)
是否有现成的包处理这种东西?
我不确定你在寻找什么,但如果你正在寻找一个自动化的层次结构简化器,那我就不知道了。此外,如果这样的包存在,它将高度依赖于您选择的语言,而您没有提到。
请注意,大多数情况下,可以通过查看聚合或特征或依赖注入等替代方案来解决此类问题。这些是设计时间问题,通常(IMO)最好在白板上解决,而不是编译器和数百万LOC。
答案 1 :(得分:2)
很晚才看到这个问题,但我对此有很多想法,并且被深深的继承层次结构所困扰。他们不好的一个原因是因为你专门研究许多子类,你将不可避免地得到错误的分类。但是,一旦你有了类结构,就很难改变,因为这样做会破坏客户端代码。
我在博客上发表了这篇文章here。