Подтвердить что ты не робот

В чем разница между абстрактным классом и миксином?

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

4b9b3361

Ответ 1

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

Ответ 2

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