Multiple Inheritance - это GOTO объектно-ориентированного программирования. Он возник из-за подходов, принятых ранними языками ООП (C ++ и т. Д.). Это хорошо работает в правой руке, но это сбивает с толку большую часть других времен.
Одной из главных целей ООП было повторное использование поведения. Это оказалась химера. Полезно в некоторых случаях, но в остальных случаях нас действительно интересует определение взаимодействия объектов. Посмотрите, сколько шаблонов в шаблонах проектирования используют интерфейс, а не наследование.
Реализация интерфейсов, за которой следует явное агрегирование, является более понятным, более обслуживаемым способом выполнения тех же действий, что и множественное наследование. Почти все ООП имеют какой-то метод определения интерфейса, почти все ООП могут объединять объекты вместе. Однако ООП решает проблемы, возникающие из-за множественного наследования (проблема с бриллиантами и т. Д.) Различными способами. Как и в случае GOTO, когда вы просматриваете код, используя множественное наследование, неясно, что происходит. Однако, как и GOTO, это может быть полезно в разных обстоятельствах.
Для меня первостепенное значение для использования любой сложной языковой конструкции заключается в том, должен ли я поддерживать приложение в течение длительного времени. Если я это сделаю, то выберу самый понятный и более простой в использовании подход, даже если сейчас требуется немного больше программирования. Как и все остальное, это зов Суда. Обратите внимание, что большую часть времени мы придерживаемся разработанной нами программы гораздо дольше, чем мы когда-либо предполагали.