Черты хороши или плохи?

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

9
задан giuseppe 11 July 2010 в 18:26
поделиться

2 ответа

Мне не нравятся черты, потому что они привносят в код сильные зависимости. Эти зависимости могут быть очевидными (класс, который импортирует черту, черта, которая ожидает методы), но также и очень тонкими (черта, которая скрывает суперметоды / переменные экземпляра). Более того, нет адекватной инструментальной поддержки для черт.

По моему опыту делегирование дает гораздо лучший и более многократно используемый дизайн на динамически типизированном объектно-ориентированном языке, таком как Smalltalk.

6
ответ дан 3 November 2019 в 04:40
поделиться

У всего есть свои плюсы и минусы. Лукас справедливо упоминает многие из минусов:

  • введение сильных зависимостей в код.
  • отсутствие адекватной инструментальной поддержки.

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

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

  • Уменьшение дублирования кода.

Мой вердикт - недостатки перевешивают. Я думаю, что сегодня и всегда дублирование кода будет происходить. А когда делегирование не поможет, я даже могу представить, что дублирование кода не так уж и вредно, поскольку оно часто предшествует дивергентной эволюции скопированных фрагментов кода.

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

1
ответ дан 3 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: