Traits и mixins
От: include2h  
Дата: 28.04.13 19:21
Оценка:
Поясните суть этих понятий. Есть ли какие-то устоявшиеся определения? В чем разница?
Например, на википедии написано:

Traits are similar to mixins, but whereas mixins can be composed only using the inheritance operation, traits offer a much wider selection of operations, including symmetric sum, method exclusion, and aliasing.

Что это за операции кроме наследования — symmetric sum, method exclusion, and aliasing?
Re: Traits и mixins
От: AlexRK  
Дата: 28.04.13 19:38
Оценка:
Здравствуйте, include2h, Вы писали:

I>Что это за операции кроме наследования — symmetric sum, method exclusion, and aliasing?


Что они понимают под symmetric sum, фиг знает, а вот method exclusion и aliasing предположить можно.
Method exclusion — это когда мы при встраивании траита один из его публичных методов убираем из публичного интерфейса класса.
Aliasing — переименование метода, в траите он имеет одно имя, в финальном классе — другое.
Если не прав — пусть знатоки поправят.
Re: Traits и mixins
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.05.13 12:51
Оценка: 35 (3)
Здравствуйте, include2h, Вы писали:

I>Поясните суть этих понятий. Есть ли какие-то устоявшиеся определения?


Как обычно — нужно читать что под этими терминами понимаются в конкретных реализация.

I>В чем разница?


mixins — это по сути абстрактный подкласс. Т.е. если обычно в традиционных языках можно создать абстрактный суперкласс и от него отнаследоваться (специализация), то mixins работает в другую сторону и после применения микс-ина к некому классу получается в результате класс, где применённый миксин отнаследован от класса к которому его применяли. И, например, применение "super" в mix-in -е сошлётся на метод того класса, к которому mix-in применили.

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

I>Например, на википедии написано:

I>

Traits are similar to mixins, but whereas mixins can be composed only using the inheritance operation, traits offer a much wider selection of operations, including symmetric sum, method exclusion, and aliasing.

I>Что это за операции кроме наследования — symmetric sum, method exclusion, and aliasing?

"Traits" подобны абстрактным классам в том, что там можно реализовать методы, и подобны интерфейсам в том, что там нет состояния (полей класса). Но traits это не механизм наследования, там используют другие операции — симметричная композиция, удаление/алиасинг методов. "Симметричная" в смысле не зависящая от порядка. Т.е. композиция двух traits всегда даёт один и тот же результат, а удаление/алиасинг используются для разрешения конфликтов. Применение traits к классу должно давать такое же поведение, как будто тело методов из traits было написано прямо в классе. Это важно, чтобы правильно работал "super" и "this/self". Но, опять же, конкретную семантику нужно смотреть в конкретной реализации.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: Traits и mixins
От: __kot2  
Дата: 07.05.13 20:31
Оценка:
Здравствуйте, include2h, Вы писали:
I>Поясните суть этих понятий. Есть ли какие-то устоявшиеся определения? В чем разница?
я так всегда думал, что mixin это подмешиваемая реализация, то есть если кто-то криво что-то спроектировал, не понял как разделить нормально по классам, поэтому разные куски написал в разных классах и из них слепил один большой класс, который умеет просто сумму того, что умеют эти классы. типичный говнопаттерн.
в то время как traits — характеристики класса — можно сказать расширение идеи параметров, когда когда мы передаем не только там начальные значения в класс, но и некую ортогональную классу ф-ть, которую он обязательно использует, но тем не менее от деталей реализации которой реализация его не зависит. как, например, может быть некий, эстиматор разницы файлов, куда мы в качестве характеристики передаем ф-ию меры, с помощью которой будем элементарные отличия измерять.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.