Здравствуйте, Аноним, Вы писали:
А>Как вы думаете, является ли ковариантность необходимой в ООП-модели?
Да, необходима типобезопасная (контрпримеры: Eiffel, TypeScript, массивы в Java и C#) ко- и контравариантность, причём не только для интерфейсов.
Желательно иметь как declaration-site вариантность (C#, VB.NET), так и use-site вариантность (wildcard types в Java, existential types в Scala). Хорошие примеры реализации: Kotlin, Scala.
А>Можно ли считать ООП полноценным без ковариантности, особенно в генериках?
Я склоняюсь к мнению, что нельзя.
Что значит "особенно в генериках"?
Здравствуйте, Аноним, Вы писали:
А>Как вы думаете, является ли ковариантность необходимой в ООП-модели? Можно ли считать ООП полноценным без ковариантности, особенно в генериках?
До 5ой джавы ведь не было никаких генериков, жили ведь как-то. И называли это ООП. так что я думаю — возможно. Генерики — это вообще синтаксический сахар.
Здравствуйте, Аноним, Вы писали:
А>Как вы думаете, является ли ковариантность необходимой в ООП-модели? Можно ли считать ООП полноценным без ковариантности, особенно в генериках?
Необходимой — нет. Есть ОО языки без вариантности. Тем не менее вариантность является очень полезной.
Re[2]: Является ли ковариантность необходимой в ООП?
От:
Аноним
Дата:
20.12.13 12:37
Оценка:
Здравствуйте, nikov, Вы писали:
N>Что значит "особенно в генериках"?
Ковариантность в генериках, например, List<Cat> это подтип List<Animal> (если Cat это подтип Animal), по сравнению с ковариантностью без генериков, как в типе возвращаемого значения переопределенным в наследуемом классе методом:
// 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();
}
}