【问题标题】:Using inheritance purely to share common functionality纯粹使用继承来共享通用功能
【发布时间】:2010-03-10 14:35:35
【问题描述】:

我最近在一些我正在处理的代码中遇到了对我来说没有意义的情况。一组类从基类继承纯粹是为了共享基类中的一些方法。没有方法覆盖,只有子类从父类调用方法。

在我看来,让子类引用父类而不是从父类继承会更好地建模,我认为这会减少不必要的复杂性。这是合理的,还是我错过了使用这样的继承的一些好处?

【问题讨论】:

    标签: oop


    【解决方案1】:

    如果父类方法纯粹作为“实用程序”存在,那么是的,我同意。

    问题(至少对我来说)是,如果将来可以修改父类以获得好处。意思是,逻辑上当前的关系是什么?如果它是孩子和父母之间的“是”,那就离开它。如果父级只是方法的集合,则重构为实用程序类或使用委托。

    【讨论】:

      【解决方案2】:

      你是对的。不幸的是,继承在实际不需要时被大量使用。

      如果子类和父类之间不存在关系,则不应使用继承。

      【讨论】:

        【解决方案3】:

        继承可以以不同的方式使用(和滥用!)。以下是三大类。

        概念层次结构:

        概念上相关的类可以是 组织成一个专业 层次结构:

        • 人员、员工、经理
        • 几何对象 ...

        多态性:

        不同但相关的对象 类可以由统一处理 客户

        • 几何对象数组

        软件复用:

        相关类可能共享接口, 数据结构或行为。

        • 几何对象 ...

        有关不同形式继承的完整研究,请阅读On the notion of inheritance

        您提到的情况是软件重用。没有is-a关系,最多有has-a关系。目标主要是重用相同的代码。

        正如您所建议的,这可以使用 delegation 进行重构,如果方法本质上是静态的,甚至可以重构为实用程序类。

        【讨论】:

          【解决方案4】:

          我可以假设您可以观察到的继承只是重构的结果。

          【讨论】:

          • 不是最好的重构方式,因为它不会增加可读性 ;-)
          • 无论如何它比重构之前的复制/粘贴代码要好得多。
          猜你喜欢
          • 1970-01-01
          • 2014-08-17
          • 2012-11-27
          • 2018-08-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多