【发布时间】:2010-10-10 03:15:58
【问题描述】:
我刚刚在 Java 框架上找到了一个 article,它显然允许它支持 Mixins 和一种叫做面向复合编程的东西(据我所知,这甚至可能是同一件事......)我也听说过/使用过 AOP,我也不确定它与此有何不同......
【问题讨论】:
标签: abstract-class mixins apache-zest cop
我刚刚在 Java 框架上找到了一个 article,它显然允许它支持 Mixins 和一种叫做面向复合编程的东西(据我所知,这甚至可能是同一件事......)我也听说过/使用过 AOP,我也不确定它与此有何不同......
【问题讨论】:
标签: abstract-class mixins apache-zest cop
Mixin 从来都不是独立的类。他们只是为您声明的类添加了一些功能。在 Python 中,它们可以很容易地被类装饰器应用。例如,您可以使用 Singleton mixin 装饰您的类,使您的类成为单例。
【讨论】:
在与语言无关的级别上,mixin 只是为类添加功能,更方便程序员并避免代码重复。抽象(基)类形成一个 is-a 关系并允许多态性。过度使用继承的一个原因是,它是一种实现 mixin 的简单方法,无需用不真正支持它们的语言编写任何样板文件。问题是您将多态 is-a 关系声明为副作用,使您的 API 更加混乱并可能增加歧义。因此,D 和 Ruby 等较新的语言支持将 mixin 作为本机特性,从而可以方便地向类添加大量功能,而无需声明多态 is-a 关系。
【讨论】: