Является ли ковариантность необходимой в ООП?
От: Аноним  
Дата: 19.12.13 23:00
Оценка:
Как вы думаете, является ли ковариантность необходимой в ООП-модели? Можно ли считать ООП полноценным без ковариантности, особенно в генериках?
Re: Является ли ковариантность необходимой в ООП?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 20.12.13 05:46
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Как вы думаете, является ли ковариантность необходимой в ООП-модели?

Да, необходима типобезопасная (контрпримеры: Eiffel, TypeScript, массивы в Java и C#) ко- и контравариантность, причём не только для интерфейсов.
Желательно иметь как declaration-site вариантность (C#, VB.NET), так и use-site вариантность (wildcard types в Java, existential types в Scala). Хорошие примеры реализации: Kotlin, Scala.

А>Можно ли считать ООП полноценным без ковариантности, особенно в генериках?

Я склоняюсь к мнению, что нельзя.
Что значит "особенно в генериках"?
Re: Является ли ковариантность необходимой в ООП?
От: noofiz  
Дата: 20.12.13 06:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вы думаете, является ли ковариантность необходимой в ООП-модели? Можно ли считать ООП полноценным без ковариантности, особенно в генериках?


До 5ой джавы ведь не было никаких генериков, жили ведь как-то. И называли это ООП. так что я думаю — возможно. Генерики — это вообще синтаксический сахар.
Re: Является ли ковариантность необходимой в ООП?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.12.13 08:36
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Как вы думаете, является ли ковариантность необходимой в ООП-модели? Можно ли считать ООП полноценным без ковариантности, особенно в генериках?



Необходимой — нет. Есть ОО языки без вариантности. Тем не менее вариантность является очень полезной.
Re[2]: Является ли ковариантность необходимой в ООП?
От: Аноним  
Дата: 20.12.13 12:37
Оценка:
Здравствуйте, nikov, Вы писали:

N>Что значит "особенно в генериках"?


Ковариантность в генериках, например, List<Cat> это подтип List<Animal> (если Cat это подтип Animal), по сравнению с ковариантностью без генериков, как в типе возвращаемого значения переопределенным в наследуемом классе методом:

http://en.wikipedia.org/wiki/Covariant_return_type

 // Classes used as return types:
 
 class A {
 }
 
 class B extends A {
 }
 
 // "Class B is more narrow than class A"
 // Classes demonstrating method overriding:
 
 class C {
     A getFoo() {
         return new A();
     }
 }
 
 class D extends C {
     @Override
     B getFoo() {
         return new B();
     }
 }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.