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