Что вы называете эквивалентом объектного уровня системы Mixin / Traits, есть ли для него название шаблона?
-
21-08-2019 - |
Вопрос
Ранее я спрашивал о том, что такое миксины, и начал понимать суть того, что означает паттерн.Но это заставило меня задуматься, существует ли общее название шаблона для выполнения чего-то вроде Mixins на уровне объекта, в отличие от уровня класса.
Псевдокод (на каком-то несуществующем языке):
Class MyClass
{
function foo()
{
print("foo")
}
}
function bar()
{
print("bar")
}
object = MyClass.new()
object.xxxx(bar)
object.bar() #output: bar
Я знаю, что подобные вещи так или иначе могут быть выполнены на нескольких языках, но мне интересно, каким было бы "стандартное" название для функциональности, которую представляет xxxx, и каково название для этого шаблона, если таковой существует.
Спасибо!
Редактировать:Развивая ответ Финнссона, я предполагаю, что что-то подобное могло бы быть другим случаем этого, было бы:
object.xxxx(OtherClass)
object.otherfoo()
Было бы уместно объединить?
Цитата:"Конкатенация:При чистом прототипировании, которое также называют конкатенативными прототипами ..." -википедия
Решение
Это распространено в языках программирования, основанных на прототипах.Я полагаю, что в ruby это называется "импорт", но прошло некоторое время с тех пор, как я в последний раз программировал ruby, так что я не уверен.
В js / ruby вы бы написали
object.bar = bar;
object.bar() // output: bar
и это не настоящий шаблон, поскольку это просто присваивание (o.bar = bar), имеющее идеальный смысл на языке, основанном на прототипе.Я предполагаю, что xxxx в вашем примере можно было бы назвать прототипом или чем-то подобным (см. http://en.wikipedia.org/wiki/Prototype-based_programming где язык называет это прото).