抽象类和Mixin有什么区别?

15

我刚刚发现了一篇关于Java框架的文章,它似乎支持Mixins和一种叫做组合导向编程的东西(可能甚至是同一件事...)。我也听说过/使用过AOP,我不确定它与这个有什么不同...

1个回答

28

在语言无关的层面上,Mixin 只是为类添加功能,更适用于程序员方便和避免代码重复。一个抽象(基)类形成了 is-a 关系并允许多态性。继承被过度使用的一个原因是,在不真正支持 Mixin 的语言中,它是一种实现 Mixin 而不编写样板文件的简单方法。问题在于,你正在声明一个多态的 is-a 关系作为副作用,使你的 API 更加混乱,可能会增加歧义。因此,像 D 和 Ruby 这样的新语言支持 Mixin 作为本地特性,提供了一种方便的方式来向类添加一堆功能,而无需声明多态的 is-a 关系。


+1 很好的简要解释。COP听起来很酷。虽然我希望看到这种东西能够在核心语言层面得到应用。AOP也是同样的情况。 - BuddyJoe
@Bruno 像C++这样的核心语言? - leeand00
我认为关于建立不正确/不必要的“is-a”关系的观点是一个好观点。 - mklauber
OP提到的“框架”(Qi4j)现在已更名为[Apache Zest](http://zest.apache.org)。 - Niclas Hedhman
1
我们通过混入(mixins)试图避免“is-a”关系的缺点是什么? - Ayxan Haqverdili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接