вариантность и ковариантность
От: Grundik2 Земля  
Дата: 16.04.13 08:55
Оценка:
Никак не могу понять, что такое вариантность и ковариантность. Объсните по-простому. В частности, что это значит в Scala.
Re: вариантность и ковариантность
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.04.13 08:59
Оценка:
Здравствуйте, Grundik2, Вы писали:

G>Никак не могу понять, что такое вариантность и ковариантность. Объсните по-простому. В частности, что это значит в Scala.


Из реально полезного тут и тут.
Re: вариантность и ковариантность
От: Sharov Россия  
Дата: 16.04.13 09:56
Оценка:
Здравствуйте, Grundik2, Вы писали:

Подойдет?
У самого пока руки не дошли прочитать
Кодом людям нужно помогать!
Re: вариантность и ковариантность
От: jazzer Россия Skype: enerjazzer
Дата: 16.04.13 11:04
Оценка:
Здравствуйте, Grundik2, Вы писали:

G>Никак не могу понять, что такое вариантность и ковариантность. Объсните по-простому. В частности, что это значит в Scala.


Еще есть контравариантность

В двух словах — это условия, при которых язык разрешает использовать производные классы вместо базовых (и наоборот).

Например, если метод базового класса возвращает ссылку на базовый класс, то нет причин запрещать перекрытию этого метода в производном классе возвращать ссылку на производный класс. Это ковариантность (т.е. отношения вариантности класса изменяются вместе при движении по иерархии).
То же относится, например, к набору исключений, который может выбросить метод.
А вот когда мы начинаем говорить об аргументах метода, то там может быть все наоборот — это будет контравариантность. А может и не быть. Зависит от того, как именно используется аргумент внутри функции (меняется или нет, и если меняется, то как).
Потом, может быть вариантность второго порядка, т.е. не непосредственная, а как параметр другого типа, например, контейнера. Т.е., например, массив объектов (указателей) производного типа можно трактовать как массив объектов базового типа, но только если ты не меняешь содержимое массива, иначе нельзя (потому что есть риск получить элемент неправильного типа — поэтому такие преобразования в С++ по умолчанию запрещены и их нужно делать явными через шаблоны).

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

Главное для понимания, когда что работает — принцип подстановки Лисков.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: вариантность и ковариантность
От: Sharov Россия  
Дата: 16.04.13 11:09
Оценка:
Здравствуйте, jazzer, Вы писали:

Если не ошибаюсь, ковариантность -- это быть либеральным в том, что возвращаешь,
контравариантность -- быть консервативным в том, что принимаешь(параметры). Или наоборот...
Кодом людям нужно помогать!
Re[3]: вариантность и ковариантность
От: jazzer Россия Skype: enerjazzer
Дата: 16.04.13 11:13
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, jazzer, Вы писали:


S>Если не ошибаюсь, ковариантность -- это быть либеральным в том, что возвращаешь,

S>контравариантность -- быть консервативным в том, что принимаешь(параметры). Или наоборот...

Ну можно и так сказать, осталось только определить, что значит либеральный и консервативный
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: вариантность и ковариантность
От: nikov США http://www.linkedin.com/in/nikov
Дата: 16.04.13 16:57
Оценка: 3 (1)
Здравствуйте, Grundik2, Вы писали:

G>Никак не могу понять, что такое вариантность и ковариантность. Объсните по-простому. В частности, что это значит в Scala.


http://www.rsdn.ru/forum/decl/3557016.1
Автор: nikov
Дата: 04.10.09
Re: вариантность и ковариантность
От: avpavlov  
Дата: 17.04.13 13:57
Оценка: :)))
Здравствуйте, Grundik2, Вы писали:

G>Никак не могу понять, что такое вариантность и ковариантность. Объсните по-простому. В частности, что это значит в Scala.


Прямо сейчас на Курсере идет курс Functional Programming Principles in Scala, где про вариантность, ковариантность и контрвариантность тебе расскажет лично Одерски
Re[2]: вариантность и ковариантность
От: Grundik2 Земля  
Дата: 17.04.13 16:17
Оценка: :)
Здравствуйте, avpavlov, Вы писали:

A>Здравствуйте, Grundik2, Вы писали:


G>>Никак не могу понять, что такое вариантность и ковариантность. Объсните по-простому. В частности, что это значит в Scala.


A>Прямо сейчас на Курсере идет курс Functional Programming Principles in Scala, где про вариантность, ковариантность и контрвариантность тебе расскажет лично Одерски


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