После нескольких месяцев напряжённого программирования это первое видео от экстрим кода, который я понял. И знаете, смотреть понимая что говорит этот чел - просто блаженство! Спасибо тебе большое, я теперь понял наконец концепцию ООП!
@@HeIvis Как быстро летит время однако, я и не думал что этот коммент я писал 7 месяцев назад. Я все еще изучаю аспекты языка и познаю что-то новое. Я все это время шел по карьере тестировщика, но в недавнее время я начал интересоваться созданием десктоп приложений на джаве. Из достижении могу только упомянуть про экзамены Oracle по джаве. Правда должен признать что сейчас больше времени уделяю подготовке к универам и учебе
Я поступил в тех уник и лично в нашем универе меня напрягает отдача в сторону узбекскому языку, истории Узбекистана и тд. Т.к. я знаю что мне не пригодится. Если можно было бы я отдал все время программированию раньше. Т.к. это очень интересно
Разница между статической и динамической типизацией не в том, что в статической ты указываешь типы, а в динамической нет, а в том, что в статической корректность типов проверяется на этапе компиляции (т.е. буквально статически), а в динамической -- в рантайме. В языках с выводом типов не всегда нужно указывать типы, при этом они статические. Например, в Haskell можно задать полиморфную функцию add x y = x + y (да, это буквально все определение функции) без указания типов. 7:25 ad hoc полиморфизм это тоже "настоящий" полиморфизм, без него, например, невозможно было бы написать полиморфную функцию сортировки (тебе в любом случае нужно перегружать оператор >= для каждого типа), просто в ООП языках он выглядит коряво, это правда.
Ad hoc полиморфизм - это просто статический полиморфизм. Ты пишешь var x = 5, а перед компиляцией это превратится в int x = 5. То же самое с перегрузкой функций. Пишешь функцию с уже существующим названием, но другими аргументами, и перед компиляцией подставится конкретная реализация.
Если бы я заведомо не знал, что такое полиморфизм, то из этого видео скорей всего так ничего бы и не понял... Просто я тупой, а это видео, вероятно, только для умных.
В шарпе можно ещё object юзать, вместо dynamic Первому проще downcast забабахать, потому что это всем классам класс (если не указывать родителя - он там будет object "неявно") А с dynamic свои приколы Можно конечно упороться и наследовать свои классы от dynamic, а потом ловить с этого рофлы и лулзы Но и это тоже работать будет, как-то Вот классно придумали множественное наследование После чего, в ООП прострелить колено стало в два раза проще, равно как и хрупкость родителей/наследников стала в два раза более хрупкой
Кстати про статическую типизацию: Если так посмотреть на развитие систем со статической типизацией,то данные системы скоро будут ничем не уступать системам с динамической типизацией. Параметрический полиморфизм есть. Полиморфизм,описанный в видео тоже имеется. А проблемы с хешмапами с различными типами помогут решить зависимые типы с параметрическим полиморфизмом.
Вы пишете: *данные системы скоро будут ничем не уступать системам с динамической типизацией* Это какой то бред. Статические системы в принципе ничем не уступают динамическим уже просто потому, что динамические реализуются поверх статических.
спасибо за видео. разные подходы там и там обозначены. а в серьëзных проектах, где важна и безопасность и производительность по-любому применяют покрытие кода тестами
Да не. Инкапсуляция оно тоже, облегчает понимание чего же класс делает конкретно. Просто приватно-протектные поля и методы не рассматриваешь и четко видишь его, класса, суть. Воот. Ну и безопасность в наименованиях этих приватных сущностей. Не надо бояться дублирования имен(все закрыто на замок, инкапсулированно). А ведь это может произойти случайно, не специально.
"Без него невозможно писать приложения, по крайней мере в объектно-ориентированном стиле с использованием статической типизации". Ну, динамические-типизированные ЯПы вообще не могут существовать без полиморфизма, ибо динамические переменные не могут быть без динамического полиморфизма. А ещё насчёт ad hoc полиморфизма. Я пока в этом слабо шарю, но это, получается, просто статический полиморфизм?
Как понять каждый раз новый герой? я совсем отбитый, сижу и спамлю Мипо на ласт пик, потому что я могу, и у меня есть самописные макросы, которые мне достались от бабушки. В каждой игре повторяется ряд персонажей, ты не прав, и я требую в знак принятия этой ошибки снять видео "С# для маленьких и тупых"
Illson 7Я так в конструкторе пяток персонажей, вариантов комбинаций много: чтобы не писать по конструктору на каждую комбинацию (а число комбинаций будет драматично возрастать с каждым новым добавленным героем), есть полиморфизм: создаёшь интерфейс IHero, например, вешаешь интерфейс на классы всех своих Мипо-Шмипо-Пуджей-Муджей, и всё, достаточно одного конструктора с пятью IHero.
@@Dimarious.G именно. Если есть объект map, который включает в себя все остальные объекты, то они взаимодействуют с ним через его интерфейс. И каждая сущность должна толкать свои речи с map по его жаргону, то есть "нормальным языком в рамках дозволенного".
Статичиская типизация ещё и на скорость и потребление памяти нехило так влияет. Вот нужна тебе переменная в виде числа 0..254 - Проще всего юзать char (unsigned int) - Такая переменная будет "Жрать" один байт оперативки. В динамических языках - Сначала пройдет проверка, что это и как хранить. Потом оно (Внезапно!) может превратиться в строку и занять уже не один байт, а аж 10 (Не помню в какой из языков такая херня, но бывает и не такое)...
В динамически типизированных языках всё ещё интереснее. Переменные не могут храниться в стеке, т.к. в любой момент программы могут внезапно изменить тип данных, потребовав другое количество байт памяти, соответственно данные хранятся в хипе(динамической памяти). Это память, которую можно удалить в любой момент, когда ты захочешь, а потом выделить ещё какое-то количество байт памяти. Но получить доступ к ней можно только через указатель(4 байта на 32-битной системе и 8 на 64). Но к тому же динамическая память выделяется операционной системой, а ей нужно запомнить область, где лежит кусок динамической памяти. Она помещает прямо перед выделенной областью какие-то данные, которые позволяют нормально работать с динамической памятью. А он весит ещё несколько байт. Так что любая переменная требует примерно от 10 байт, даже если хранится просто одна буква. (исправьте меня, если я написала неправильно)
@@АлинаЛебедева-с4ъ Вы пишете: *Переменные не могут храниться в стеке, т.к. в любой момент программы могут внезапно изменить тип данных* Это чушь. Из того факта, что они могут в любой момент изменить тип, никак не следует, что переменные не могут храниться в стеке. И так, на всякий случай: размеры указательных типов не фиксированы. Никто не гарантирует, что они будут именно 4 байта на 32-й платформе, и 8 на 64-х битной.
Полиморфизм - один из главных столпов объектно-ориентированного программирования. Его суть заключается в том, что один фрагмент кода может работать с разными типами данных.
@@yava43 Да. Единственное: в вашей формулировке отсутствует исходный посыл: зачем это нужно? В буквальном смысле: почему полиморфизм - это круто, а отсутствие полиморфизма - это отстой?
На 4:38 возникает вопрос: а почему мы создали много разных типов героев, да потом ещё пытаемся подсунуть их в качестве параметра в функцию? Если мы создали разные типы, значит объекты этих разных типов должны использоваться в разных функциях. А если они используются в одной общей функции, то почему мы не хотим создать одни общий тип для "героя"?
Как тут уже писали, статика/динамика говорит о времени проверки типов (компилация/выполнение). Не надо путать с явной/неявной и сильной/слабой типизацией. Зачем путать людей? А чтобы в метод не попало хер знает что, надо проверки на тип данных делать. Никто не запрещает в том же Python генерировать свои исключения. И еще, C таки со слабой типизацией, так что толку от проверок на этапе компилиции особо нет, если он потом может неявно преобразовать данные.
1) а как же не ООП языки со статической типизацией по типу С без полиморфизма в полном смысле слова? 2) динамическую типизацию можно рассматривать как частный случай статической типизацией. т.е. например в джава все классы неявно наследники класса Object, если везде в сигнатуре писать Object, то проект не скорее всего не скомпилируется, так как использование объектов, мягко говоря, крайне редко ограничены методами класса Object. Таким образом динамическая типизация просто позволяет нарушать типизацию, похоже на нарушение LSP в ООП. 3) Преимущества статической типизации не только в безопасности. В динамической типизации можно в каждом методе проверять тип объекта и писать тесты, в то время как в статической многие грешат рефлекшнами и другими приблудами приводящими к ошибкам компиляции. Как по мне, основное преимущество в том, что программисту не нужно читать реализацию, что бы понять как пользоваться методом (т.е. что в него посылать и что он возвращает, какие исключения кидает). Т.е. на вашем примере видя сигнатуру function Method(a, b) не понятно какой будет результат, если я пошлю туда числа, строки, даты, точки, число и строку и т.д. что он вернёт? кинет исключения? какие? В случае с string Method(string a, string b) я понимаю сразу, что я могу кидать только строки и вернётся строка и никаких исключений (не считая не ожидаемых исключений, которые и не нужно обрабатывать почти всегда). И мне не нужно читать реализацию (которая может быть огромнейшая), тем более, что их может быть много (не только в ООП языках).
У тебя есть видос, типа "почему php - не ЯП"? Если есть, то дай ссыль(именно твое мнение), а если нет, то запили. Очень хочется узнать, почему ты его (пхп) не упоминаешь в большинстве видосов, обходишь стороной.
Постоянно ярые сторонники ООП утверждают, что функциями ничего не решить и точка, а доказать свою точку зрения пробовали? Паттерн фабрика где-то не применяется? Зачем, например, ходьбе по улице, придумывать новое название? Усложнение ради усложнения...
Добрый день , можете обяснить зачем мне нужен CLR поскольку я начал читать Рихтера и у меня появилось такое впечетление что я читаю что-то ненужное . Смотря на примеры , я понимаю что это я прочитал у Шилдта . Нужно ли мне дальше продолжать это делать или перейти на болие практичную книжку ?А то я тот человек который не воспренимает ту информацию которая не есть интересна или практична . Прочитав уже 100 страниц ,я так и не понял где я могу применить полученые знания . (Сори за русский, в школе не учил .)
Gregoruy Horikov ты новичок в программировании? Отложи пока Рихтера, ещё рано, потом вернёшься, читать его нужно, но пока ничего не поймёшь, сначала учи сам C#, книг много, можешь глянуть на Троелсена, Шарп (фамилия автора, да), или что нибудь в инете.
Может кто разбирается, перегрузка действительно часть полиморфизма? Просто я читал HeadFirstJava и там заостряли внимание на том что перегрузка никак к полиморфизму не относится.
Не знаю как в других языках с динамической типизацией, но в моём любимом ♂Python♂ можно проверять соответствует ли переменная / обьект определённому классу / типу данных.
Не согласен с видео. Полиморфизм не имеет ничего общего с типизацией. Это просто возможность подменять исполнителей методов в рантайме. Типизация здесь не обязательна. Что касается безопасности динамических языков, то можно писать тесты, которые проверяют корректность работы системы
@@Fateslav Классический пример с собачками/кошечками показывает, что ваше определение - бред. А теперь вы приведите хотя бы один пример, который иллюстрирует подмену исполнителей в рантайме. Я полагаю, корень ваших заблуждений заключается в том, что вы не понимаете принципа действия полиморфизма. В интернетах есть статьи из цикла: "полиморфизм - взгляд с точки зрения низкоуровневой реализации". Вам стоит ознакомиться с материалом, что бы не нести в интернетах оголтелую чушь.
Вообще делать для каждого героя свой клас - неправильно. А если игрок захочет создать свой созданный клас героя? Здесь подойдет именно компонентный подход
Тут важно понимать , что обращение к этому классу хероев, все равно будет по очереди. Не совсем понятно, что делать если одновременно произоидет попытка обращения к конструктору класса. Я решил для себя эту задачу. Но терзают смутные сомнения, что я изобрел велосипед.
уххх бляяя, меня рапирает от знаний, уххххххххххххххххх, пойду маме расскажу что я выучил!!
УЪУ СЪУКА
Главное папке не рассказывай, переебет по ебалу ногой со старта! Ага
Дааа... После просмотра этого видео никто даже не сможет написать классы, которые наследуют от другого класса. Не пустые, а реальные.
@@KulaGGin тут видео не про это же) про более крупных масштабов проблемы
если ты ниче не понял, то рано это смотреть) это для шарящих более менее
в конце видоса у меня конструкторы отклеились от классов в радиусе двух проектов
Почему такой смешной юмор никто не оценил?
=D
@@60d93 просто никто не понял xD
@@dann1kid} ppp0000
@@DrForse я не понял(
После нескольких месяцев напряжённого программирования это первое видео от экстрим кода, который я понял. И знаете, смотреть понимая что говорит этот чел - просто блаженство! Спасибо тебе большое, я теперь понял наконец концепцию ООП!
Привет, как успехи в программировании?
@@HeIvis Как быстро летит время однако, я и не думал что этот коммент я писал 7 месяцев назад. Я все еще изучаю аспекты языка и познаю что-то новое. Я все это время шел по карьере тестировщика, но в недавнее время я начал интересоваться созданием десктоп приложений на джаве. Из достижении могу только упомянуть про экзамены Oracle по джаве. Правда должен признать что сейчас больше времени уделяю подготовке к универам и учебе
Я поступил в тех уник и лично в нашем универе меня напрягает отдача в сторону узбекскому языку, истории Узбекистана и тд. Т.к. я знаю что мне не пригодится. Если можно было бы я отдал все время программированию раньше. Т.к. это очень интересно
"А сейчас внимание вопрос.." 4:43 - тембр и интонация почти один в один как у ведущего)) респект)
Разница между статической и динамической типизацией не в том, что в статической ты указываешь типы, а в динамической нет, а в том, что в статической корректность типов проверяется на этапе компиляции (т.е. буквально статически), а в динамической -- в рантайме. В языках с выводом типов не всегда нужно указывать типы, при этом они статические. Например, в Haskell можно задать полиморфную функцию add x y = x + y (да, это буквально все определение функции) без указания типов.
7:25 ad hoc полиморфизм это тоже "настоящий" полиморфизм, без него, например, невозможно было бы написать полиморфную функцию сортировки (тебе в любом случае нужно перегружать оператор >= для каждого типа), просто в ООП языках он выглядит коряво, это правда.
Ad hoc полиморфизм - это просто статический полиморфизм. Ты пишешь var x = 5, а перед компиляцией это превратится в int x = 5. То же самое с перегрузкой функций. Пишешь функцию с уже существующим названием, но другими аргументами, и перед компиляцией подставится конкретная реализация.
@@АлинаЛебедева-с4ъ Вы внимательно прочитали сообщение *fakt* , и решили, что он не в курсе, что такое Ad hoc ?
Отлично заходит. Но пока видосика дождешся, можна и от климакса умереть. Спасибо за видос.
причем даже если ты мужчина
Если уж разговор о Доте, то там еще должен быть клас "Мамка" и метод "е*ать"
"Пока говно на вентилятор не попадёт...." Ржал) Красава
За два года обучения на ИТ в вузе не узнала столько, сколько узнала за этот видос
Чувааак, ты вот прям взял и запилил то, что я год никак не соберусь. Это очень клёво.
Ебать,спустя 2 года я понял о чём видео,наверное из-за того,что я джава стриптизёр.
жиза
простите но разве в джава нет ооп?
Бля, видос настолько хорош что мне надо смотреть его на свежую голову. Это лайк, господа!
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
Если бы я заведомо не знал, что такое полиморфизм, то из этого видео скорей всего так ничего бы и не понял...
Просто я тупой, а это видео, вероятно, только для умных.
а видос разве о понимании полиморфизма? просто, наверное я даже не сосредотачивался на попытке понять
тут скорее что ты должен уже знать что это такое, но по факту чётко
Блэдь, так вот почему я всегда считал ооп каким-то ненужным говном
_мимо любитель душить питона_
В шарпе можно ещё object юзать, вместо dynamic
Первому проще downcast забабахать, потому что это всем классам класс (если не указывать родителя - он там будет object "неявно")
А с dynamic свои приколы
Можно конечно упороться и наследовать свои классы от dynamic, а потом ловить с этого рофлы и лулзы
Но и это тоже работать будет, как-то
Вот классно придумали множественное наследование
После чего, в ООП прострелить колено стало в два раза проще, равно как и хрупкость родителей/наследников стала в два раза более хрупкой
вот это да, 4 года прошло, а мы все мацаем у ExtremeCode насущные вопросы, потому что видосы сок
в питоне есть библиотека typing и можно с ней сделать, чтобы функция принимала аргумент только с определенным типом
Люблю эти старые видосы без рекламы
4 года работаю, но видосы смотрю с удовольствием, годно)
идеально лекция + картинки + юмор
То чувство, когда слышал этот пример на стриме и так же подумал решить проблему)
Вот это нужный видос, недавно прошел эти темы и такая информация и пример со стороны очень кстати, лайк
Ёмкий полиморфизм
Кстати про статическую типизацию:
Если так посмотреть на развитие систем со статической типизацией,то данные системы скоро будут ничем не уступать системам с динамической типизацией.
Параметрический полиморфизм есть.
Полиморфизм,описанный в видео тоже имеется.
А проблемы с хешмапами с различными типами помогут решить зависимые типы с параметрическим полиморфизмом.
Вы пишете: *данные системы скоро будут ничем не уступать системам с динамической типизацией* Это какой то бред. Статические системы в принципе ничем не уступают динамическим уже просто потому, что динамические реализуются поверх статических.
Здравствуйте!! Скажите пожалуйста сделаете ли вы видео-глоссарий для начинающих программистов?)) Мне кажется большая часть зрителей будет рада))
спасибо за видео.
разные подходы там и там обозначены.
а в серьëзных проектах, где важна и безопасность и производительность по-любому применяют покрытие кода тестами
Информативный видос, содержит инфу которая часто встречается на собесах
Хотелось бы уже чего-нибудь посложнее. Видео о рефлексии или тех же паттернах, например.
о, о рефлексии дистительна отель бы
gentleNES А в чем проблема прочесть книгу по паттернам? Благо есть куча отличных книг на эту тему.
@@anmaner4822 С книги по паттернам не поорать нормально. Хотя если я ошибаюсь и у вас есть орная книга по патернам, то дайте сурс.
Да не. Инкапсуляция оно тоже, облегчает понимание чего же класс делает конкретно. Просто приватно-протектные поля и методы не рассматриваешь и четко видишь его, класса, суть. Воот.
Ну и безопасность в наименованиях этих приватных сущностей. Не надо бояться дублирования имен(все закрыто на замок, инкапсулированно). А ведь это может произойти случайно, не специально.
"Без него невозможно писать приложения, по крайней мере в объектно-ориентированном стиле с использованием статической типизации". Ну, динамические-типизированные ЯПы вообще не могут существовать без полиморфизма, ибо динамические переменные не могут быть без динамического полиморфизма. А ещё насчёт ad hoc полиморфизма. Я пока в этом слабо шарю, но это, получается, просто статический полиморфизм?
Как понять каждый раз новый герой? я совсем отбитый, сижу и спамлю Мипо на ласт пик, потому что я могу, и у меня есть самописные макросы, которые мне достались от бабушки. В каждой игре повторяется ряд персонажей, ты не прав, и я требую в знак принятия этой ошибки снять видео "С# для маленьких и тупых"
Illson 7Я так в конструкторе пяток персонажей, вариантов комбинаций много: чтобы не писать по конструктору на каждую комбинацию (а число комбинаций будет драматично возрастать с каждым новым добавленным героем), есть полиморфизм: создаёшь интерфейс IHero, например, вешаешь интерфейс на классы всех своих Мипо-Шмипо-Пуджей-Муджей, и всё, достаточно одного конструктора с пятью IHero.
@@Dimarious.G именно. Если есть объект map, который включает в себя все остальные объекты, то они взаимодействуют с ним через его интерфейс. И каждая сущность должна толкать свои речи с map по его жаргону, то есть "нормальным языком в рамках дозволенного".
Ааааа! Я всё пооонял!
Если я пешу на JS - я могу забить на:
1. Паттерны
2. ООП
3. Полиморфизм
Профит!
Спасибо. Надо повторить. С первого раза недопонял.
Очевидная расстаноква линий в данном случае: кери Пудж с спортом Магнусом, мид Лина и в офлайне Свен с ВРкой. Классный пик, кста, нужно затестить.
как я готовлюсь к собеседованиям) спасибо чел)
Чувак, на 3:40 я просто валялся под столом. Аплодисметы за юмор! :))))
то чуство когда забил на с++ на моменте ООП и случайно сюда попал и офигел.
Статичиская типизация ещё и на скорость и потребление памяти нехило так влияет.
Вот нужна тебе переменная в виде числа 0..254 - Проще всего юзать char (unsigned int) - Такая переменная будет "Жрать" один байт оперативки. В динамических языках - Сначала пройдет проверка, что это и как хранить. Потом оно (Внезапно!) может превратиться в строку и занять уже не один байт, а аж 10 (Не помню в какой из языков такая херня, но бывает и не такое)...
В динамически типизированных языках всё ещё интереснее. Переменные не могут храниться в стеке, т.к. в любой момент программы могут внезапно изменить тип данных, потребовав другое количество байт памяти, соответственно данные хранятся в хипе(динамической памяти). Это память, которую можно удалить в любой момент, когда ты захочешь, а потом выделить ещё какое-то количество байт памяти. Но получить доступ к ней можно только через указатель(4 байта на 32-битной системе и 8 на 64). Но к тому же динамическая память выделяется операционной системой, а ей нужно запомнить область, где лежит кусок динамической памяти. Она помещает прямо перед выделенной областью какие-то данные, которые позволяют нормально работать с динамической памятью. А он весит ещё несколько байт. Так что любая переменная требует примерно от 10 байт, даже если хранится просто одна буква.
(исправьте меня, если я написала неправильно)
Вы пишите: *Такая переменная будет "Жрать" один байт оперативки* Не факт. Такая переменная будет жрать *минимум* 1 байт
@@АлинаЛебедева-с4ъ Вы пишете: *Переменные не могут храниться в стеке, т.к. в любой момент программы могут внезапно изменить тип данных* Это чушь. Из того факта, что они могут в любой момент изменить тип, никак не следует, что переменные не могут храниться в стеке. И так, на всякий случай: размеры указательных типов не фиксированы. Никто не гарантирует, что они будут именно 4 байта на 32-й платформе, и 8 на 64-х битной.
Очень интересно, но с середины перестал понимать, видимо я тупой ещё пока, пойду книжки читать!)
Полиморфизм - один из главных столпов объектно-ориентированного
программирования. Его суть заключается в том, что один фрагмент кода может работать
с разными типами данных.
Норм формулировка?
@@yava43 Да. Единственное: в вашей формулировке отсутствует исходный посыл: зачем это нужно? В буквальном смысле: почему полиморфизм - это круто, а отсутствие полиморфизма - это отстой?
Я один смотрю эти видосы ради шутеек автора, а не для того, чтобы подчерпнуть что то новое?)
Когда уже, проф кодер, но шутки про ебобо отлично заходят
Дмитрий Антоненко с ростом компетенций потребность в ебобо становится более очевидной
Да.
поДчерпнуть это как? низэнько-низэнько? :) :) :)
Примеры на доте это гениально, хотя не хватает что то про мам…
я посмотрел видео:" что такое полиморфизм"?
На 4:38 возникает вопрос: а почему мы создали много разных типов героев, да потом ещё пытаемся подсунуть их в качестве параметра в функцию? Если мы создали разные типы, значит объекты этих разных типов должны использоваться в разных функциях. А если они используются в одной общей функции, то почему мы не хотим создать одни общий тип для "героя"?
Блять, просто такое api. Как будто ты не сам не говнокодил...
Браво!) Интересно, а если на собеседовании в такой форме, как твои видео отвечать😂😂
Думаю тогда можно попасть к весёлым ребятам))
Главное закрякивать некоторые свои слова, всё-таки на собеседование пришёл же..
Тогда я буду много крякать))
Блять, просто шли всех нахуй сразу! Сам всегда так делаю...
Охуеть, дотку то без полиморфизма не написать было! Пойду скажу Габену об этом.
Бомбичесеий видос ! Автор я твой фанат!;)
Как тут уже писали, статика/динамика говорит о времени проверки типов (компилация/выполнение). Не надо путать с явной/неявной и сильной/слабой типизацией. Зачем путать людей? А чтобы в метод не попало хер знает что, надо проверки на тип данных делать. Никто не запрещает в том же Python генерировать свои исключения. И еще, C таки со слабой типизацией, так что толку от проверок на этапе компилиции особо нет, если он потом может неявно преобразовать данные.
1) а как же не ООП языки со статической типизацией по типу С без полиморфизма в полном смысле слова?
2) динамическую типизацию можно рассматривать как частный случай статической типизацией.
т.е. например в джава все классы неявно наследники класса Object,
если везде в сигнатуре писать Object, то проект не скорее всего не скомпилируется,
так как использование объектов, мягко говоря, крайне редко ограничены методами класса Object.
Таким образом динамическая типизация просто позволяет нарушать типизацию, похоже на нарушение LSP в ООП.
3) Преимущества статической типизации не только в безопасности.
В динамической типизации можно в каждом методе проверять тип объекта
и писать тесты, в то время как в статической многие грешат рефлекшнами
и другими приблудами приводящими к ошибкам компиляции.
Как по мне, основное преимущество в том, что программисту не нужно читать реализацию,
что бы понять как пользоваться методом (т.е. что в него посылать и что он возвращает, какие исключения кидает).
Т.е. на вашем примере видя сигнатуру function Method(a, b)
не понятно какой будет результат, если я пошлю туда числа, строки, даты, точки, число и строку и т.д.
что он вернёт? кинет исключения? какие?
В случае с string Method(string a, string b) я понимаю сразу,
что я могу кидать только строки и вернётся строка и никаких исключений (не считая не ожидаемых исключений, которые и не нужно обрабатывать почти всегда).
И мне не нужно читать реализацию (которая может быть огромнейшая), тем более, что их может быть много (не только в ООП языках).
Так и не смог догадаться, какое слово спрятано под Ё*кий.
Б
Кулл хацкеры обожают код с динамической типизацией)
Отлично получается, продолжайте в том же духе!!!!
У тебя есть видос, типа "почему php - не ЯП"? Если есть, то дай ссыль(именно твое мнение), а если нет, то запили. Очень хочется узнать, почему ты его (пхп) не упоминаешь в большинстве видосов, обходишь стороной.
Какое интересное чувство юмора 😂🖖🏻👍
Нифига ты с примером из доты замарочился)
Тем временем я: **звук думающего модема**
**пошёл кодить на Blitz Basic, где нет методов**
Постоянно ярые сторонники ООП утверждают, что функциями ничего не решить и точка, а доказать свою точку зрения пробовали? Паттерн фабрика где-то не применяется? Зачем, например, ходьбе по улице, придумывать новое название? Усложнение ради усложнения...
Чувак запили видос в гуспрском стиле - замени матерки на элегантные обороты. Просто интересно.
Ты крутой, абжаю тебя чувак)
Приятного аппетита, лойс)
Красиво. До слёз.
После 2:44 пришлось ставить видос на паузу, поржать, успокоиться, и только потом продолжать смотреть потому что дальше информация уже не шла)
Обмазался нутеллой, поставил это видео в рамочку, сел в углу, качаюсь и мантрую: статическая типизация, статическая типизация ..
Как без наследования невозможно добиться полиморфизма? Сам же говорил про ad hoc полиморфизм)) Ну а если к словам не придираться то видос годный!
Добрый день , можете обяснить зачем мне нужен CLR поскольку я начал читать Рихтера и у меня появилось такое впечетление что я читаю что-то ненужное . Смотря на примеры , я понимаю что это я прочитал у Шилдта . Нужно ли мне дальше продолжать это делать или перейти на болие практичную книжку ?А то я тот человек который не воспренимает ту информацию которая не есть интересна или практична . Прочитав уже 100 страниц ,я так и не понял где я могу применить полученые знания . (Сори за русский, в школе не учил .)
Gregoruy Horikov ты новичок в программировании? Отложи пока Рихтера, ещё рано, потом вернёшься, читать его нужно, но пока ничего не поймёшь, сначала учи сам C#, книг много, можешь глянуть на Троелсена, Шарп (фамилия автора, да), или что нибудь в инете.
Точняк, на входе только Троельсен. Рихтер подождет. Да и хуй на него можно забить.
Примеры заебись, но уверен что не все поймут из видео что есть разные виды полиморфизма. Хотя как вводный гайд в эту тему, зайдёт думаю норм
Скучаю по вашим видосикам, куда вы пропали? :(
куда делся видос по инкапсуляции?инкапсулировался по полной?
Почему без инкапсуляции невозможно наследование?
Почему видео о наследовании называется "полиморфизм" ?
Абстрактные классы реализуют на практике один из принципов ООП - Полиморфизм
там не было про extends или inherits
Потому что это видео о полиморфизме. Да, тут используется наследование, но оно открывает дорогу к полиморфизму, и именно это тут демонстрируется
@@АлинаЛебедева-с4ъ табуретка? :)
Прекрасная работа!
а почему шаблоны например не использовать в методах где возможны различные типы параметров?
Какие угодно, но только не тоненькие программерские ляшечки😆
Может кто разбирается, перегрузка действительно часть полиморфизма? Просто я читал HeadFirstJava и там заостряли внимание на том что перегрузка никак к полиморфизму не относится.
Перегрузка - одна из разновидностей полиморфизма. Полиморфизм бывает разным.
Не знаю как в других языках с динамической типизацией, но в моём любимом ♂Python♂ можно проверять соответствует ли переменная / обьект определённому классу / типу данных.
typeof, instanceof в js/ts насколько я помню
Где купить твои курсы? Shut up and take my money
А как потом узнать к какому классу нужно downcast Hero?
Пишу на питоне, но на удивление всё понял.
Не согласен с видео. Полиморфизм не имеет ничего общего с типизацией. Это просто возможность подменять исполнителей методов в рантайме. Типизация здесь не обязательна.
Что касается безопасности динамических языков, то можно писать тесты, которые проверяют корректность работы системы
А как проверить корректность самих тестов?..
Вы написали какой то бред. Полиморфизм никаких исполнителей в рантайме не подменяет.
@@princessmary5556 приведите любой пример полиморфизма и убедитесь, что моё определение работает
@@Fateslav Классический пример с собачками/кошечками показывает, что ваше определение - бред. А теперь вы приведите хотя бы один пример, который иллюстрирует подмену исполнителей в рантайме. Я полагаю, корень ваших заблуждений заключается в том, что вы не понимаете принципа действия полиморфизма. В интернетах есть статьи из цикла: "полиморфизм - взгляд с точки зрения низкоуровневой реализации". Вам стоит ознакомиться с материалом, что бы не нести в интернетах оголтелую чушь.
В питоне не нужны многие паттерны, потому что они встроены в язык на уровне синтаксиса.
В конце: "все мудачи ребят")
А как насчёт инкапсуляции что означает сокрытие данных?
А насчет инкапсуляции: она вовсе не означает сокрытие данных.
ещё не посмотрел, но спасибо за видео
Удобство напрямую связано с безопасностью
Первый раз услышал про ad hoc полиморфизм. А ты на каких героях в дотку гамаешь если не секрет?
"Статическая типизация безопасна". Программисты, которые запихивают null в параметры метода хихикают.
это самое аxyeнное объяснение полиморфизма! давай видос про функциональное программирование
Вообще делать для каждого героя свой клас - неправильно. А если игрок захочет создать свой созданный клас героя? Здесь подойдет именно компонентный подход
"ситуация возникает довольно редко, но уверяю вас, эта ситуация довольно распространена" (с) ExtremeCode
Отлично из контекста вырвал. "Может показаться, что ситуация возникает довольно редко, но уверяю вас, эта ситуация довольно распространена".
@@goreney Просто разъебал по фактам
Он сказал МОЖЕТ показаться, но уверяет, что ситуация довольно распространенна
Перегрузка методов была еще в простом C, в те годы, когда ООП не был даже в проекте.
Это бред. В сишке нет, и никогда никогда не было перегрузки методов.
Что делать если даже не маслёнок?
Приятный для просмотра видосик)))
C# с гибридной типизацией, там есть dynamic.
3:09 **Этот мем** Серьезно?
Это гениально использовать статическую типизацию которая как бы ограничивает и хуже, для того чтоб не проебаться со свободой)
Тут важно понимать , что обращение к этому классу хероев, все равно будет по очереди. Не совсем понятно, что делать если одновременно произоидет попытка обращения к конструктору класса.
Я решил для себя эту задачу. Но терзают смутные сомнения, что я изобрел велосипед.
нихрена не понял
Разумист, умен и масленист.
О чем видос? Про полиморфизм и ниче толком не обяснил
тоненькие программирские ляшечки)))) ухаха))) поржал от души) лови лайк и подписку чисто за юмор) ну и инфа кому-то полезна)
5:40 да не, никаких проблем. В плюсах можно все через pvoid ебашить xD