Если у вас есть черты, вы перестаете использовать интерфейсы, абстрактные базовые классы и множественное наследование? - PullRequest
4 голосов
/ 28 июля 2011

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

Это намерение?

Если у вас есть черты, какую из других конструкций структурирования кода вы должны использовать?

(Роли - это имя Perl для черт.)

Ответы [ 4 ]

2 голосов
/ 29 июля 2011

По крайней мере, для Perl's Moose нет интерфейсов, поэтому роли четко подразделяются на них и обычно тоже на миксины. Я бы сказал, что все еще может быть случай для абстрактных базовых классов. Роли могут быть рассмотрены, какие объекты делают , где классы являются тем, чем они являются .

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

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

1 голос
/ 28 июля 2011

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

Ах, мои комментарии отражают Scala - я не понял, что вы пометилиэто с несколькими языками.

0 голосов
/ 28 июля 2011

Я говорю только о Скале здесь ...

Читать это .

0 голосов
/ 28 июля 2011

Когда вы воплощаете черту; он потребляет один класс. Так что независимо от выразительности; Вы все еще можете использовать устаревшую конструкцию для предотвращения взрыва классов в вашем банке (и времени запуска).

Я позволю другим ответить о выразительности:)

...