![]() #айтишный_быт
Я наконец-то въехал в ковариантность и контравариантность. Если мы пообещали выдать кому-то животное и выдаем кота - это ковариантность. Если кто-то требует от нас животное и мы выдаем ему кота - это контравариантность. А если мы пообещали выдать кота, а выдаем рандомное животное, или если от нас требуют кота, а мы даем в ответ первое животное, что попалось к нам в руки - это ошибка приведения типов =-) 28 января 2020
3 |
![]() |
|
надеюсь, в процессе ни один кот не пострадает?))
|
![]() |
|
келли малфой
Не пострадает, для этого и нужна типобезопасность =-) А вот если бы ее не было, то программа пыталась бы кормить кота едой для хомячков))) 3 |
![]() |
|
Боже, этот тред так прекрасен)))
|
![]() |
|
BonnieBlueButler
Спасибо ^_^ Котики все делают лучше, даже дискуссию об обобщенных типах) 1 |
![]() |
|
Котики Шредингера.
|
![]() |
|
П_Пашкевич
Да, были люди в наше время, не то что нынешнее племя ;-) 2 |
![]() |
|
StragaSevera
Ну, тогда, помимо всего прочего, не стояла проблема кроссплатформенности. Тогда и вставки на ассемблере делали, не парясь, если было надо. Причём, что забавно: в биологических НИИ программирование осваивали люди с самым разным образованием: я со своим "биолог-зоолог" в дипломе был вовсе не уникумом в этом отношении. А навык, кстати, полезный: до сих пор, бывает, пригождается :) |
![]() |
|
П_Пашкевич
Хех. Любопытно =-) |
![]() |
|
А кто, думаете, писал программы под специфические задачи, например, связанные с нестандартными АЦП или с нестандартной обработкой данных? Инженеров откровенно не хватало.
|
![]() |
|
StragaSevera
П_Пашкевич Мы воровали скрипты каждый день, а современным просто лень!Да, были люди в наше время, не то что нынешнее племя ;-) 1 |
![]() |
|
{Евгений}
Э-м-м, нет, современное поколение прекрасно владеет SODD - Stack Overflow-Driven Development ;-) |
![]() |
|
П_Пашкевич
Ну так-то и сейчас вставки на асме делают не парясь если надо. А что-то вообще исключительно на асме пишут. 1 |
![]() |
|
EnGhost
Предполагаю, что речь идёт о драйверах и т.п.? |
![]() |
|
П_Пашкевич
Неее, о микроконтроллерах) 2 |
![]() |
|
EnGhost
Логично :) |
![]() |
Lucia Malfoy
|
интерфейс ФабрикаЖивотных{
Животное сотворить(); } класс ФабрикаКотов реализует ФабрикаЖивотных{ Кот сотворить(); } интерфейс ПожирательКотов{ Пустота пожирать(Кот кот); } класс ПожирательКотовИЛюдей реализует ПожирательКотов{ Пустота пожирать(Кот|Человек животное); } |
![]() |
|
Lucia Malfoy
Хм, это уже какая-то функциональщина выходит, с объединениями типов) |
![]() |
Lucia Malfoy
|
StragaSevera
Lucia Malfoy Хм, это уже какая-то функциональщина выходит, с объединениями типов) union-типы и функциональщина не связаны же) без юнионов можно так написать: класс Кот расширяет Животное; класс ПожирательВсехЖивотных реализует ПожирательКотов{ Пустота пожирать(Животное животное); } и это удовлетворяет контракту, потому что ПожирательВсехЖивотных пожирает в том числе и Котов |
![]() |
|
По наследованию мне кажется очень иллюстративным кэрролловский Снарк. Но это оффтопом, гм.
>Если мы пообещали выдать кому-то животное и выдаем кота - это ковариантность. >Если кто-то требует от нас животное и мы выдаем ему кота - это контравариантность. Не всекаю сходу тонкую разницу между "обещали" и "требуют". На котах для меня слишком сложно. https://habr.com/ru/post/218753/ мне кажется, хорошая статья? https://ru.stackoverflow.com/questions/516687/В-чем-суть-ковариантности-и-контравариантности-делегатов или вот, про тачки норм прям. |