Каково различие между Чертой Squeak/Pharo и Новоязом Mixin?

Таким образом, Squeak/Pharo поддерживают Черты, и Новояз имеет Mixins. Каково различие? Черты не имеют никакого instVars, но Mixins имеют?

16
задан Richard Durr 24 February 2010 в 21:33
поделиться

3 ответа

Для хорошего сравнения и объяснения того, почему предпочтение отдается чертам характера, вы можете проверить статью о чертах (pdf) .

По сути, это то, что Лукас Ренггли сказал:

Члены Traits объединяются в класс и не меняют его иерархию наследования. Конфликты должны явно разрешаться пользователем черт.

Примеси линеаризуются в иерархию наследования целевого класса. Если есть конфликтующие члены, порядок, в котором они были объявлены, определяет, какой член будет вызван. Это хрупкий , потому что он неявно определяет поведение композиции, и автор класса должен знать о потенциальных конфликтах и ​​о том, как они повлияют на результирующий класс.

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

9
ответ дан 30 November 2019 в 21:28
поделиться

Черты составляются с использованием правила композиции. Конфликты нужно разрешать вручную, не может случиться так, что черта случайно переопределит другой метод с тем же именем.

Миксины составляются по порядку и, следовательно, имеют проблемы хрупкости, подобные множественному наследованию.

9
ответ дан 30 November 2019 в 21:28
поделиться

В новоязе все классы являются миксинами. Вот несколько отрывков из ответа Гилада Браха на аналогичный вопрос в дискуссионном форуме новояза :

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

Черты пытаются решить воспринимаемую проблему миксинов.

  1. Существует очень мало реального опыта, указывающего на то, что эти предполагаемые проблемы реальны.
  2. Черты лица могут быть без гражданства. Это упрощает дело, , но не касается всех случаев интереса . Фактически, сейчас есть исследовательские работы, в которых пытаются добавить состояние к характеристикам.

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

8
ответ дан 30 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

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