【问题标题】:What is the difference between an Abstract Class and a Mixin?抽象类和 Mixin 有什么区别?
【发布时间】:2010-10-10 03:15:58
【问题描述】:

我刚刚在 Java 框架上找到了一个 article,它显然允许它支持 Mixins 和一种叫做面向复合编程的东西(据我所知,这甚至可能是同一件事......)我也听说过/使用过 AOP,我也不确定它与此有何不同......

【问题讨论】:

    标签: abstract-class mixins apache-zest cop


    【解决方案1】:

    Mixin 从来都不是独立的类。他们只是为您声明的类添加了一些功能。在 Python 中,它们可以很容易地被类装饰器应用。例如,您可以使用 Singleton mixin 装饰您的类,使您的类成为单例。

    【讨论】:

      【解决方案2】:

      在与语言无关的级别上,mixin 只是为类添加功能,更方便程序员并避免代码重复。抽象(基)类形成一个 is-a 关系并允许多态性。过度使用继承的一个原因是,它是一种实现 mixin 的简单方法,无需用不真正支持它们的语言编写任何样板文件。问题是您将多态 is-a 关系声明为副作用,使您的 API 更加混乱并可能增加歧义。因此,D 和 Ruby 等较新的语言支持将 mixin 作为本机特性,从而可以方便地向类添加大量功能,而无需声明多态 is-a 关系。

      【讨论】:

      • +1 很好的简要说明。这个 COP 的东西听起来很酷。虽然我喜欢看到这种事情一直深入到核心语言级别。与 AOP 相同。
      • @Bruno 像 C++ 这样的核心语言?
      • 我认为关于建立不正确/不必要的“is-a”关系的观点很好。
      • OP提到的“框架”(Qi4j)现在是Apache Zest
      猜你喜欢
      • 2015-09-26
      • 2016-07-05
      • 2011-01-24
      • 1970-01-01
      • 2010-12-27
      • 2013-09-24
      • 2010-11-13
      • 2013-02-17
      相关资源
      最近更新 更多