Интересно, вообще возможно ли объединить концепции наследования и параметрического полиморфизма («дженерики» "), особенно в отношении дисперсии, но также и с точки зрения того, как (" синтаксис ") и где (сайт-использование / сайт-декларации) они должны быть определены?
Рассмотрим эту точку зрения:
- Подтипирование, например,
S <: T
может восприниматься как ковариантное поведение, поскольку входные аргументы, принимающие T
, также будут принимать S
.
- . Изменение «дисперсии модели наследования» на инвариантное возможно только на стороне определения путем запрета подтипирования (например, г. добавление модификатора
final
к определению класса), контр-дисперсия невозможна, насколько я видел в большинстве случаев
- Параметрический полиморфизм является инвариантным по умолчанию, но может быть сделан совместно / противоположно вариант
Похоже, существует существенное несоответствие концепций между обоими, учитывая
- проблемы, которые возникли у языков, допуская «небезопасную» ковариацию (например,
String [] <: Object []
в Java / C #)
- различия в том, как наследование / параметрический полиморфизм объявляется и используется по сравнению с наследованием
. В некоторых языках можно увидеть, что оба они прекрасно работают вместе, хотя
class Foo extends Ordered[Foo]
реализует поведение упорядочения / сравнения.
- . Возможно ли, чтобы концепции наследования и параметрического полиморфизма могли быть унифицированы и получили одно и то же поведение дисперсии по умолчанию (например, ковариация по умолчанию, или это привело бы к необходимости помечать большинство типов аннотацией инвариантности вместо этого, поэтому просто смещая уродство в другой момент)? Было бы это более практичным, как если бы структуры данных тоже стали бы неизменными по умолчанию?
- Существует ли формальная система, в которой это доказало свою работоспособность?
- Какие параметры / изменения синтаксиса будут наиболее вероятными, независимо от того, конкретного языка программирования?
- Есть ли какой-нибудь рабочий пример или язык, на котором это / что-то подобное уже работает?
задан soc 18 July 2011 в 15:35
поделиться