Это - открытый вопрос, но я хотел бы требовать некоторых мнений от ТАКИМ ОБРАЗОМ сообщество на Чертах; Вы думаете, что Черты в Squeak/Pharo являются хорошей вещью, или необходимо ли избегать их и состава использования и делегации вместо этого? Я спрашиваю, потому что, в то время как я знаю, как использовать их (благодаря книге Pharo), я не действительно уверен, как приемлемый это должно использовать их или где нормально использовать их и где это не.
Мне не нравятся черты, потому что они привносят в код сильные зависимости. Эти зависимости могут быть очевидными (класс, который импортирует черту, черта, которая ожидает методы), но также и очень тонкими (черта, которая скрывает суперметоды / переменные экземпляра). Более того, нет адекватной инструментальной поддержки для черт.
По моему опыту делегирование дает гораздо лучший и более многократно используемый дизайн на динамически типизированном объектно-ориентированном языке, таком как Smalltalk.
У всего есть свои плюсы и минусы. Лукас справедливо упоминает многие из минусов:
Если второе может когда-нибудь исчезнуть, то первое - нет.
Цель трейтов - предотвратить дублирование кода, которое происходит, когда два класса, не имеющие общего суперкласса, отличного от Object, используют один метод экземпляра. Иногда делегирование может исправить это, но часто не может. Итак, плюсы трейтов:
Мой вердикт - недостатки перевешивают. Я думаю, что сегодня и всегда дублирование кода будет происходить. А когда делегирование не поможет, я даже могу представить, что дублирование кода не так уж и вредно, поскольку оно часто предшествует дивергентной эволюции скопированных фрагментов кода.