В чем разница между абстрактным классом и миксином? - PullRequest
14 голосов
/ 26 февраля 2009

Я только что нашел статью о фреймворке в Java, который, по-видимому, позволяет поддерживать Mixins и что-то под названием Composite Oriented Programming (что, насколько я знаю, может быть даже тем же самым) ...) Я также слышал о / работал с AOP, и я не уверен, насколько это отличается от этого ...

Ответы [ 2 ]

25 голосов
/ 26 февраля 2009

На уровне, не зависящем от языка, миксин просто добавляет функциональность в класс, и это больше для удобства программиста и во избежание дублирования кода. Абстрактный (базовый) класс формирует отношение is-a и допускает полиморфизм. Одна из причин чрезмерного использования наследования заключается в том, что это простой способ реализации миксинов без написания шаблонов на языках, которые их не поддерживают. Проблема в том, что вы объявляете полиморфные отношения как побочный эффект, что делает ваш API более запутанным и, возможно, добавляет двусмысленность. Следовательно, новые языки, такие как D и Ruby, поддерживают миксины в качестве нативных функций, что позволяет удобно добавлять группы функций в класс, не объявляя полиморфные отношения is-a.

0 голосов
/ 26 февраля 2009

Mixin никогда не предназначался как отдельный класс. Они просто добавляют некоторые функциональные возможности к объявленному вами классу. В Python они могут быть легко применены декораторами классов. Например, вы можете украсить свой класс миксином Singleton, сделав ваш класс синглтоном.

...