Вопрос: Как вычислить ковариантность?

 

КАК Я ВЫЧИСЛИЛ МОШЕННИКА ПО IP КОТОРЫЙ ПЫТАЛСЯ ОБМАНУТЬ МЕНЯ!!!������

Видео взято с канала: Акси


 

Java. Ковариантность и контравариантность обобщенных типов на примере ArrayList.

Видео взято с канала: Sergey Arkhipov


 

Специальная теория относительности | полилинейные формы и ковариантные тензоры | немного повторения

Видео взято с канала: Павел Шестопалов


 

C# Универсальные шаблоны. Урок 5.Ограничения, ковариантность и контравариантность.

Видео взято с канала: ITVDN


 

6.6 Ковариантность и контравариантность делегатов

Видео взято с канала: topProgrammer


 

Овчинников А. В. Линейная алгебра Ковариантные и контравариантные координаты

Видео взято с канала: teach-in


 

C# — ковариантность и контравариантность в обобщенных интерфейсах

Видео взято с канала: ExtremeCode


8 комментариев

  • Я покопался, почитал, посмотрел видос и вроде бы понял кое-что, поделюсь с вами)
    Есть принцип подстановки Лисков, в котором говорится следующее:
    должна существовать возможность использовать объекты производного класса. Это значит, что объекты производного класса должны вести себя согласованно, согласно контракту базового класса.
    Под контрактом класса понимается ожидаемое от него поведение. Представим, что у родительского и класса наследника разные контракты, то есть, работают они настолько по-разному, что нам придется в коде этот класс наследник обрабатывать по особому, а не как наследника базового класса. Тут же теряется суть наследования использование класса наследника как базовый класс.
    Поэтому, когда мы думаем, можно ли сделать какой-то класс наследником другого, нам нужно учитывать не только размытое правило: спроси себя есть между классом-наследником и родительским классом отношение «является». Нам нужно также учитывать, что их контракты будут СОГЛАСОВАННЫМИ. То есть, во время работы программы, мы должны знать, чего ожидать от наследников какого-то класса и не думать о том, что их надо как-то по специальному обрабатывать, ведь у них почему то есть такая функциональность, которая не согласуется с базовым классом.
    Но, если объекты всё таки связать в одну иерархию хочется, а контракты их разные, это совсем на значит, что сделать это невозможно.
    А что, есть сделать эти классы immutable, то есть, неизменяемыми? У неизменяемого класса нельзя менять его данные, после того, как он был создан. Если данные менять нельзя, значит, исчезают методы обработки этих данных (зачем методы обработки, если данные неизменяемые?). То есть, мы можем лишь достать что-то оттуда (геттер, например). Что это означает? Это означает, никакой класс не сможет сделать что-то с нашими данными. Не сможет сделать что-то такое, что способно сделать их невалидными.

    Именно этой же логики следуют правила ковариантности и контравариантности обобщений в языке C#. Так, именно отсутствие изменяемости, позволяет трактовать объект IEnumerable как IEnumerable. Поскольку мы можем лишь достать элемент из последовательности и не можем положить его обратно, то такое преобразование является типобезопасным.

  • На счет того что ковариантность и контрвариантность плюют на строгую типизацию это не совсем так, поскольку как только вы их применяете, на методы интерфейса как раз и налагаются ограничения по поводу возвращаемого типа и типа аргумента. Так что этот вопрос освещен не полностью в частности зачем применяются такие ограничения. Автор либо сам не знает либо очень спешил… куда-то. Видимо друзья перед записью видео позвонили и пригласили пить пиво, а тут ролик еще не готов))

  • Как я поняла, ковариантны если могут использовать наследственность а НЕковариантны, это жестко прописано что слева то и справа? похож на джава… массивы ковариантны, но при получении можно огрести exception, а коллекции НЕковариантны… где я?

  • У Вас на редкость, для программера, хорошо поставлена речь! Спасибо!
    ИнВариантность по простому, без вариантов)), если то, только его
    КоВариантность со вариантность он и все его потомки. Но из Вашего объяснения следует не понятность в термине «читать» *.get(i), которую, мне думается, нужно понимать, как «присваивать ссылкам типа предков AnyType». В этом смысле массивы ковариантны.
    С КонтраВариантностью придумать простую терминологическую ассоциацию мне не удалось((. Для «чтения», гарантированный предок это Object, если я правильно понял?

  • Наконец-то нашёл канал, где объясняют что-то, чего я не знаю.) Лайк и подписка.)

    Очень хочется человеческим и простым языком услышать про асинхронные операции, Task, async await и прочую дичь. Вроде я понимаю, что они делают, но есть мнение, что я что-то упускаю.)

  • Аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа

  • Я ПОМНЮ КАК ЧУТЬ Его НЕ ПОТЕРЯЛА!!!!
    У МЕНЯ ТАМ 8000 И 3 МИФИКА
    всё происходило в другой игре. Я играла на маменом телефоне и когда я хотела кинуть почту (настоящую) она его забрала
    ГОСПОДИ СПАСИБО МАМАААА����������������❤️❤️❤️❤️❤️❤️