Какая концептуальная разница между чертами и множественным наследованием?

Из того, что я читал и видел, я считаю множественное наследование плохой практикой не само по себе, а потому, что оно заставляет новичков использовать везде, где более элегантные шаблоны проектирования могут быть полезны и более значимы.

Некоторые языки решили не реализовывать множественное наследование, а затем решили реализовать трейты (например, PHP). Единственное интересное и существенное различие, которое я вижу между множественным наследованием и чертами, которое я вижу, является лингвистическим: в то время как «наследование» указывает на какую-то общую природу, «черта» означает больше признаков.

Есть ли какое-либо другое важное отличие, которое я упускаю из виду, которое могло бы объяснить, почему некоторые считают, что множественное наследование было неуместным, а черты уместны?


person AsTeR    schedule 19.06.2013    source источник
comment
возможный дубликат PHP: особенности и интерфейсы   -  person Kye    schedule 23.07.2013


Ответы (1)


Вы можете использовать черты для имитации множественного наследования, но я считаю, что основная разница носит концептуальный характер. Отношение родитель-потомок — это отношение «является».

Если у вас есть класс Furniture с дочерними Table и PicknickTable, у вас есть Picknicktable is-a Table is-a Furniture (хм, можно ли так считать мебель? nvrmnd).

С трейтами вы просто говорите: я ненавижу продолжать писать код для размещения вещей на поверхности, поэтому я пишу трейт «putStuffOnThisThing», и он у них есть. Это не наследство! Основная ошибка, стоящая за такими рассуждениями, может заключаться в том, что вы хотите смотреть на черты как на другой способ показать иерархию, в то время как вы не должны этого делать. Это не замена действительно хорошему дизайну, это уловка в наборе инструментов, которую вы можете неправильно использовать для множественного наследования, но вам может быть лучше использовать ее как способ избежать написания некоторых строк несколько раз.

Итак, в защиту сравнения: черты имеют некоторые из тех же проблем, что и множественное наследование, например, проблему, которую вам нужно решить с помощью псевдонимов в случае нескольких вещей с одним и тем же именем. Хотя это не совсем проблема бриллиантов, она очень близка к ней.

person Nanne    schedule 11.12.2013