Принципы ООП. 3. Полиморфизм
Вставка
- Опубліковано 8 чер 2020
- Всем привет! Это третий ролик из небольшого цикла лекций о принципах ООП. Сегодня поговорим о полиморфизме.
Курсы для новичков:
JAVA - bit.ly/2UnJInv
JAVA Start - bit.ly/2XGYx6K
Инструментарий JAVA - bit.ly/2MF6ZNB
Automation QA (Java) - bit.ly/3f19VAi
ANDROID - bit.ly/2AMSogz
C#/.NET - bit.ly/2XKLGkg
C# START - bit.ly/2XKkkuh
PYTHON - bit.ly/2YhlmNl
FRONT-END - bit.ly/3f4sGCZ
WORDPRESS Developer - bit.ly/30nHtV1
SALESFORCE Developer - bit.ly/2YhlwEr
UI/UX дизайн - bit.ly/3cK6UCX
Project management - bit.ly/2Yc458A
Обучение на проекте - bit.ly/37b9AIy
Продвинутые курсы для состоявшихся девелоперов:
GRASP and GoF Design patterns - bit.ly/3dFSpkO
Enterprise patterns - bit.ly/37kaHpy
Сайт Foxminded: bit.ly/2ze9Fi3
Foxminded в VK: foxminded
Foxminded в ФБ: / foxmindedco
FoxmindEd в Instagram: / foxminded.ua
Мой Telegram: t.me/nemchinskiyOnBusiness
🦊Новый поток Advanced курса Enterprise Patterns стартует уже 1 февраля 2023 года ❗
Регистрация - go.foxminded.ua/3GPXeYF
Ценю работу над каналом, но поддержу мнение, что за столом было душевшее) И эхо в этой студии сильное
По теме )
.
# Полиморфизм -- это возможность одного и того же алгоритма обрабатывать данные разных типов, независимо от того, какие это типы. Без проверок типов внутри и ветвления в зависимости от того, с каким конкретным типом алгоритм работает в конкретный момент времени.
.
# Мнимый полиморфизм (ad-hoc) -- это когда только создается видимость, что алгоритм полиморфный, но на самом деле в момент компиляции/транспайлинга программы либо происходит подстановка другого алгоритма, в зависимости от типа/ов переданных аргументов, либо происходит неявное преобразование типа/ов аргумента/ов. Важно то, что в результате есть один или больше алгоритмов, каждый из которых мономорфный -- т.е. работает с данными строго одного типа. Ярким примером является перегрузка функций/методов. Когда для обработки разных данных создаются разные функции, имеющие одно имя, но разную сигнатуру (имя + перечень типов аргументов). Такое возможно далеко не во всех языках программирования.
.
К такому типу полиморфизма относится и паттерн-матчинг, т.к. он сводится к совокупности мономорфных алгоритмов.
.
По способу достижения полиморфизма можно выделить:
- полмиорфизм подтипов
- структурный полиморфизм
- параметрический полиморфизм
.
# Полиморфизм подтипов - это возможность алгоритма работать со всеми подтипами одного общего типа, опираясь на свойства общего типа (например, на то, что экземпляры общего типа, а значит и всех его подтипом, имеют определенный метод, с определенной сигнатурой). Наследование -- это частный случай создания Подтипа. Определяя интерфейс, создается тип. Реализация интерфейса -- это также создаение Подтипа, хоть наследование и не происходит.
TypeScript и Flow работают именно с таким типом Полиморфизма, даже не смотря на то, что проверка того, является ли Тип подтипом Общего Типа осуществляется путем сопоставления структур Типа и Общего типа (без необходимости синтаксически декларировать такую связь).
.
# Структурный полиморфизм - это возможность алгоритма работать с объектами (значениями), игнорируя их тип и способ создания, и предполагая, что объекты/значения обладают нужными свойствами (например у объектов будет нужный метод с нужной сигнатурой). Его часто называют Утинным Полиморфизмом. Такой работат в JS. Собственно, я бы Структурный полиморфизм отнес к разновидностям Полиморфизма подтипов, но с оговоркой, что статической проверки типов нет.
.
# Параметрический полиморфизм -- это возможность алгоритма работать с данными "не названных" типов, которым присвоены абстрактные имена. Т.е. типы являются Параметрами алгоритма, равно, как и его аргументы. Это всеми нами гороче любимые Generic-и. Например: Array -- это пример Параметрического полиморфизма. Tree, List etc. etc.
:+1:
Только утиная типизацияи структурная типизация это не одно и то же. Например, автоматическую реализацию интерфейсов в Го некорректно называть утиной типизацией.
Как по мне, в дженериках тоже после компиляции работаем с мономорфным типом и оно становится ad-hoc.
@@haykmkrtchyan7093 думаю, это зависит от языка и от дженерика. Например, в TS на тип-параметр можно наложить органичение: соответствовать какому-либо интерфейсу и тогда все пойдет по полиморфизму подтипов. А может и зарезолвится в ad-hoc полиморфизм -- если это например: f = (a: T, b: T): T => a + b;
В общем, параметрический полиморфизм -- это круто, полезно и вкусно.
Очень полезный комментарий. Спасибо)
Ой, сколько новых видео!!! Сергей, ставлю лайк даже не посмотрев (сейчас исправлю эту ошибку), так сказать заочно! Большое вам спасибо! Долго отсутствовал, сейчас буду смотреть каждое новое для меня видео.
Дублировать текстом вещи о которых идет речь есть очень хорошо. Примеры бы с кодом какие в виде призентации на фоне. А так супер!)
Белы фон вам не идет. Прежние видео были ламповее, чтоли.
@kotto Почему частное? В последнем постанвлении правительства тоже про это говорится.
Отличный формат! Всё очень лаконично и очень информативно!
прикольный формат, но прошлый был, как-то, более по-домашнему, более уютно)
Согласен, кажется сейчас домашний формат в тренде
Кря
За столом как то интересней и привычней. А еще на столе стоит великолепная кружка!
Спасибо!
Я из тех кому все равно на фон, звук, одежду и прочее.
Содержание - Самое главное!
Спасибо за содержание!
P.S. Мне во всех ваших видео нравится антураж
Блин. А про if-то мысль реально хороша. Объяснение полиморфизма через нее пока самое доступное на моей памяти.
Было бы круто добавить короткий пример замены if-а или оставить ссылку на него.
Да сложно представить истинный полиморфизм заменяющий IFы без перегрузки или нарушения инкапсуляции - первого принципа ООП.
Разве только приходит в голову методика разыменования аргумента в метод базового класса или что-то подобное!
ПС: Возможно перегрузка методов-интерфейса хороший вариант решения данной проблемы и я так понимаю что это не будет считаться как ad-hoc полиморфизм.
Очень крутой формат, намного лучше предыдущего.
В видео было много слов, но, к сожалению, некоторые из них правильные, а некоторые - нет. В итоге складывается впечатление, что полиморфизма всего два, и из них один какой-то неправильный (ad-hoc).
Что лишний раз подтверждает тезис, что практика без теории __слепа__.
Ниже определение полиморфизма более-менее соответствующее теории.
Полиморфная переменная -- это переменная, которая может принимать значения разных типов данных.
Полиморфная функция -- это функция, у которой хотя бы один аргумент является полиморфной переменной (не забываем о методах, которые суть функции, и у которых есть неявный первый параметр this).
Полиморфная функция бывает двух видов.
Ad-hoc полиморфизм - когда функция ведет себя по разному для аргументов разных типов. Функция "нарисовать" - рисует по разному разные геометрические фигуры.
Параметрический полиморфизм - когда функция ведет себя одинаково для аргументов разных типов, нет информации о настоящем типе и значение любого типа может быть передано в качестве аргумента. Пример - функция "положить элемент в контейнер". Заметим, что subtype полиморфизм (который в ООП называют просто полиморфизмом, когда вместо ссылки на базовый класс можно передать ссылку на производный) __НЕ__ является параметрическим полиморфизмом, потому что тип известен (тип базового класса).
Иногда выделяют статический и динамический полиморфизм - когда тип разрешается во время компиляции, или во время выполнения.
Теперь можно рассмотреть частные случаи:
1. _Преобразование чисел_, когда функция принимает double, туда иногда можно передать целые числа и float, этот вид полиморфизма часто называют automatic coerce, в разных языках делается по-разному, скажем в OCaml его вообще нет и нужны явные преобразования.
2. _Перегрузка функций_, когда одно имя функции используется для аргументов разных типов и количества аргументов. Используется в постпроцедурных ОО языках, таких как С++, Java, C#. В функциональных языках отсутствует, поскольку ломает вывод типов (впрочем в Haskell нетрудно сделать аналог перегрузки).
3. _Параметрический полиморфизм_, когда функция получает тип (или несколько типов в качестве параметров), например `foo(a: T): T` - функция имеет один параметр-тип и один полиморфный параметр, который связан с этим типом. Такой полиморфизм известен под именем generics, и присутствует под этим именем в Java, Kotlin, C#, Scala и может быть в будущем Go :-) Почему в Scala этот вид полиморфизма значительно мощнее? Потому что на параметры-типы можно накладывать очень детальные ограничения, например:
def lift[F[_]: Functor]: F[A] => F[B]
здесь на параметр F накладывается ограничение, что F - это тип с параметром, и подтип типа Functor (который тоже параметризован, но это можно узнать посмотрев его определение).
В Haskell (или ещё более далёком от мейнстрима Idris) ограничения на типы могут быть ещё более детальные, и сами параметры-типы можно связать ограничениями, и это всё позволяет отсеивать компилятором огромное количество ошибок.
Таким образом, ограничения позволяют прокинуть мостик между параметрическим и ad-hoc полиморфизмом и выбирать какой-то нужный вам баланс. Впервые большой шаг к этом сделал Филипп Вадлер в работе "How to make ad-hoc polymorphism less ad hoc" users.csc.calpoly.edu/~akeen/courses/csc530/references/wadler.pdf
4. Наконец _полиморфизм подтипа_ - это вид ad-hoc полиморфизма, когда первый неявный параметр this имеет тип базового класса, диспетчеризация происходит в рантайме, обычно с помощью VTable. С точки зрения теории довольно слабый вид полиморфизма, поскольку ограничение на тип лишь одно, типом базового класса снизу. Естественно, делает невозможным точный вывод типов, не позволяет диспетчеризоваться по нескольким типам параметров, и по типу возвращаемого значения, вынуждает делать нетипобезопасные преобразования (т.н. downcasting).
5. Также есть ещё row polymorphism, когда селектор поля, например .user в разных записях может выступать как самостоятельное значение, передаваться в параметры и использоваться в полиморфных контекстах, а будучи применённый к разным значениям, скажем account и book возвращает соответственно account.user и book.user. Чем-то напоминает структурные типы, но гибче.
6. Есть ещё много других, таких как family polimorphism, но это уже глубины теории типов, до практики они ещё не дошли.
Итог. Сергей Немчинский конечно хороший дядечка, позитивный и харизматичный, но не стоит верить всему, что он говорит без оглядки, нужно проверять сведения и читать хорошие книжки, скажем Пирса "Типы в языках программирования".
Спасибо что успакоели меня (Scala кодера) а то прям кровь из ушей лилась.
Думал сам закаментировать но решил сначала адекватный коммент поискать.
Ещё + вам в догонку.
@DASSDED ну что спросили ?)
потерялась ламповость видео. теперь сухой профессионализм.
двоякое чувство)))
Аааааа как же не привычно) но видео классные! Спасибо!
Очень полезные и информативные ролики получаются у вас. Хотим больше "обучалок"
Сергію, дякую! Не додам нічого нового до того, що сказано іншими, просто урок вийшов традиційно змістовним і цікавим і заслуговує на "свіжий" коментар))
Приятно смотреть ваш канал. Спасибо за хороший контент. Успехов.
Отлично! Спасибо за труд!
Новый формат - мне зашёл )
Новый формат супер! Все внимание фокусируется о том, что говорит диктор☝🏻 Возможно, для лучшего понимания полиморфизма можно было бы добавить несложные схемы или код, чтоб акустическся информация еще визуально подкреплялась. Сергей, спасибо Вам!
Кратко, ясно, понятно. Благодарю.
Классно получилось, спасибо Сергей!
P.S. в следующий раз напишите титрами когда можно открывать уши)))
ахахаха. Хорошо
Во фронтэнде - новый формат видео, а в бэкэнде релокация офиса ? =)
Ну прям очень-очень интересно слушать. Хоть ничего и не понимаю ))))
Ну наконец то мой любимый полиморхвизм)
Благодарность за coding by exception!
Мне новый формат даже больше понравился, чем старый
Советую поработать над звуком. В новой обстановке эхо от стен напрягает.
Плюсую. Со звуком точно нужно что то делать. Эхо очень жёсткое.
И кстати. В целом формат очень классный. Двигаетесь в правильном направлении. Но звук поправить надо =)
По моему опыту, это наиболее полное и понятное объяснение полиморфизма на русской ютубе. И за инфу про объекты без поведения и сервисы без состояния отдельное спасибо, это действительно имеет место быть и на это стоит акцентировать внимание, чтобы понимать современные реалии проектирования ПО.
+1 за новый формат
Фон лучше убрать - верните как было)
Вы молодец. Достаточно давно слежу за вашим каналом. Даже 2 месяца был на проекте в вашей школе. Надеюсь, даже спустя неделю, вы прочитаете этот коммент. Хотелось бы и мне высказать свое мнение по поводу видео, хотя обычно комменты не оставляю.
С фоном лампово и по домашнему, без фона - динамически и по современному. Больше всего понравились тезисные подпись. С ними как-то проще воспринимается информация. Можно подписи оставить (пофиг на фон))
Смотрю уже 30 ролик, ничего не понимаю но очень интересно!
По поводу ИФов и тему с простыней хотелось бы увидеть пример кода))
chat GPT в помощь. Я только что у него попросил переписать мой метод где много ИФов было, осталось только понять ответ ))
Лайк сразу, новый формат понравился, с примерами кода думаю было бы лучше, а в общем всё кратко и по делу. Спасибо большое)))
примеры кода были бы не очень показательными, мне кажется. Но я подумаю
@@SergeyNemchinskiy Как говорится "не попробуешь - не узнаешь")))
Не всегда нужно использовать наследование для достижения параметрического полиморфизма. Есть языки, в которых импелементация интерфейсов не требует наследования (Rust, Go, Typescript). Есть дженерики и темплейты. Есть Duck Typing и динамические языки. Конечно, это не значит, что не нужно использовать наследование, но его ограниченность нужно понимать и стараться избегать.
Не хватает зарисовочек на белом фоне, чтобы визуально было понятно на примере, а так как радио послушал, но в целом как всегда супер;) спасибо за видео
Есть вопрос по поводу применения вставок с помощью JNI. Кроме самого логичного кейса использования сишных и ассемблерных вставок в Android приложениях, это вообще имеет место быть? Просто это рушит весь принцип jvm и тд. Какие кейсы использования можете привести?
Sergey, плакал в голосину, когда узнал, что не я один отделением состояния от поведения озадачен.
Пробовал даже чинить подобное упущение, добавляя для каждого сервиса-интерфейса(со свеой иерархией) "сервис-маршрутизатор"(не знаю как иначе назвать), который, в зависимости от получаемой имплементации доменной сущности(с общим интерфейсом) делегирует соответствующему обработчику(ну и результаты мержит).
Белый фу, только темная тема!))) Сергей, спасибо
спасибо!
В ардуиноIDE есть патерны?
А мне понравилось. Полиморфизм серьезная тема, и белый фон как бы говорит что нужно внимательно слушать Сергея а не смотреть что на столе лежит
разделение видео на части - хорошая идея. Использовать для этого пятисекундные вставки с логотипом выглядит растягиванием хронометража. Они одинаковые и скучные. Можно хотя бы названия этих частей туда вставлять
а лучше вообще убрать
название частей в разделении хорошая идея, а еще под видео сделать "оглавление" с ссылками на эти самые части видео.
а можно на эти заставки вставлять что-то интересное, трейлеры фильмов например
Дуже дякую!
Хорошее видео. Кстати про абстракцию согласен, масло масленое. Абстракция есть отказ от неких свойств объекта, которые не важны в контексте решаемой задачи. Это вообще используется в любой области жизни. Если я нанимаю строителя, чтобы он делал ремонт, мне важно умеет ли он красить, класть плитку, штукатурить и совершенно пофигу умеет ли он играть на балалайке.
Рівень відео зростає, що не може не радувати!
Хороший эксперимент с фоном. За столом было душевнее.
Но с белым фотом можно выводить дополнительную информацию.
Единственное я бы добавил больше информации. И когда она появляется, сдвигал спикера больше в бок
Первую очередь спасибо за видео. Было бы лучше показать + примеры как работает полифогизм :-)
Спасибо. Давайте про Event Sourcing, DDD и CQRS.
Сергей, здраствуйте.... бил би очень благодарен за какой нибудь конкретний пример замени if полиморфизмом, или если у вас есть уже такое видео, то буду благодарен за линку, а то чтото никак в голове такой код не виресовуется....
Спасибо
спасибо
Зашел только для того, чтобы убедиться что автора всё еще зовут Сергей Немчинский. Убедился, теперь можно снова спать спокойно
Сергей, судя по фону, вы устроились в Apple, поздравляю!
Это был бы шаг назад. У Сергея своя фирма.
@Volodymyr Volodymyr ээээммим всегда. Если там не условия как у шаха
Новый формат - супер! Осталось только английских субтитров добавить чтоб весь мир смотрел :)
Согласен если с делать субтитры и английское название водосам, даже старым это взлетит.
Сергей, запишите видео почему вы перешли с C++ на Java. Я постигаю плюсы, очень нравится, но очень сложно=), потому крайне хотелось бы послушать вас. Благодарю!
дякую!!!
Прикольная смена, но я ещё не проверял просмотр ночью в темноте) но пока нравится весь формат - по современному, что ли)
мы именно для этого и старались
Разве при перегрузке методы называются по разному? Или это просто оговорка?
круто с фоном
спасибо очень интересно. Побольше информации для чайников от архитектора как устроен компьютер интернет сайты и серверы..
читаешь порой вакансии и запутаешься в терминах разжуйте пожалуйста в видео вакансии с hh.ru например думаю многим будет интересно:"
Минимум 2 года опыта коммерческой разработки ПО.
Хорошее знание теор. минимума computer science.
Хорошее владение языком Java, опыт серверной разработки на нем.
Знания и опыт многопоточного программирования.
Знакомство с JavaScript, опыт разработки браузерных приложений
Опыт работы с Java 8
Знакомство с продуктами Atlassian.
Знакомство с функциональными языками программирования, FRP.
Писать unit-тесты, в отдельных случаях - интеграционные тесты.
Structure - Atlassian SDK, Java, REST, JavaScript, jQuery, HTML5. Рабочее окружение - IntelliJ IDEA, Git, Maven, TeamCity, BitBucket Server, Docker. Тесты серверного кода пишутся на Groovy / Spock, клиентского - на JavaScript / QUnit.
Мы широко используем Structure
новый важный функционал покрывается unit-тестами;
Code Review у нас обязателен для каждого изменения;
подробное ручное тестирование готовых сборок.
Не плохо бы побороть эхо и использовать пастельные тона в качестве фона. Спасибо за информацию)
Ну молодца
Идея с новым фоном хорошая. Возможно стоит попробовать снимать стоя.
спасибо, помогло на собесе
Один раз захлох на этом вопросе на собеседовании. Спасибо за Ваш труд
Можете тогда рассказать, что понимают под абстракцией, почему считают принципом ооп, и почему это не принцип ооп?
А интересно, функции с перегрузкой, не if используют ???
Очень хочется услышать про абстракцию, пусть и не как принцып ООП, но как пример работающей методологии.
хорошо :) А вы почему не подписались? :)
- О себе вы указали "программист с большим стажем", так, неплохо. Что вы имели ввиду под уровнем английского D8?
- Илс.
самый топовый канал. Немного музычка отвлекает на фоне
Благодарю за информацию . Поздравляю скоро 100 000 подписчиков .
У меня не большой канал но тоже стараюсь для начинающих в айти делать хорошие видео .
Если что заглядывайте надеюсь понравится я очень стараюсь .
Сергей, отличный формат, но мне кажется слишком много наездов/увеличения камеры и возможно лучше использовать текст либо при наезде либо нет) Спасибо за видео
Слышать всегда интересно! но эхо действительно мешает и фон белый асоциация с больницей, а вот без стола смотритесь солиднее:)))
Поли - Много, морфизм - форм. Полиморфизм - много форм.
а мне наоборот, всегда было непонятно, почему никто никогда не говорит о том, что if-ы - это по сути альтернатива полиморфизму. Ведь if это как раз об этом - проверить что-то, что в принципе может быть разделено на 2 (или более, если с else) класса с общим предком, в котором, так сказать, описан весь тот контекст, в котором мы работаем
Спасибо за интересное видео👍
Но возможно стоит включить тёмную тему
Вернити уютный офис :с
холодно как то в вашей студии :С
Отлично! Тока нужно поменять произношение слова else, а то слух режет)
06:45 тут я поностальгировал по былому формату
Можно послушать про паттерны, чтобы больше не затыкать уши?
Или такое видео уже есть на канале?
есть :)
целый курс
Без примеров кода понятно скорее тем, кто в теме! Примеры кода, думаю, логично предоставлять на Java.
С напряжением смотрел видео, ожидая, когда же ты начнёшь как обычно "гы-гы" впопад и невпопад. НО ЭТОГО НЕ ПРОИЗОШЛО!!! Прям видно, как нелегко тебе это давалось! Но ты смог! Респект и уважуха!!! 👍🏻👍🏻👍🏻😂 Так гораздо представительнее и производит лучшее впечатление. Признаюсь, эти постоянные гы-гы раздражают, но может это проблема во мне 😂
Новый формат определённо имеет право на существование, но и старый оставить тоже было бы неплохо. Возможно, стоит выбирать формат в зависимости от темы.
Согласен с другими комментаторами на тему звука (эхо) и притянутых за уши вставок-заставок. Если бы меня попросили выбрать лишь один формат из двух, то пока что старый побеждает. Но ИМХО пока ещё рано делать выводы. После пяти-десяти роликов в новом формате понятнее будет.
Спасибо за интересный канал 👍🏻
о господи... А вы понимаете, что такими комментариями очень демотивируете авторов? Зачем вы это делаете? У вас проблемы с самооценкой?
@@SergeyNemchinskiy Не понимаю. Честно.
@@Alexander.Portnoy ну, теперь вы знаете
Отсутствие хранимого состояния, позволяет относительно легко горизонтально масштабироваться, сравнительно легко тестировать части, и легко дебажить. Самое сложное для понимания это state machine, чем является по сути любой объект в ООП.
Из за этого, куча фреймворков и принуждает разделять хранение и обработку. Век вертикального масштабирования, сменяется горизонтальным и пора бы переходить на функциональщину.
Ещё 1 взрыв мозга от той самой мысли Т_Т
Существует ли ооп язык без ифов?
Эхо сильное, а так формат хороший :)только в старом формате было прикольно наблюдать за новыми вещами на столе и в фоне...
Так через интерфейсы реализуется полиморфизм...зачем наследование 🙄
Новый формат интересный, но постоянные заставки для склейки кусков видео лишние.
ИМХО
Или хотя бы сделать время проигрывания заставки быстрее, но а так да - лишнее
Пришел от Бороды, когда начал гуглить термины упомянутые там.
Лично я полиморфизм понимаю так: есть полиморфизм с точки зрения перегруженных (overload) методов и переопределенных (override). Полиморфизм для перегруженных методов - не более чем "синтаксический сахар", т.к. в ООП функции однозначно идентифицируются по имени и по формату входных параметров (их тип и количество), то для удобства написания кода разработчику стоит помнить только одно название метода, а конкретная функция по данному имени будет выбрана уже компилятором на основе формата входных данных и встроена в код.
А полиморфизм для переопределенных методов - это т.н. "динамическая диспетчеризация методов", которая работает во время исполнения программы, вызов конкретной реализации функции зависит от типа определенного объекта, а не типа ссылки объекта. Но тип ссылки объекта будет определять интерфейс взаимодействия с этим объектом. И в этом случае полиморфизм дает большие преимущества - вызываемой среде (какому-нибудь фреймворку, например) не нужно ничего знать об реализации объектов-наследников, если он уже знает интерфейс взаимодействия с объектом. И в байт-коде (если это Java) нет "жесткой" связи с функцией, которая должна вызываться, и JVM во время работы программы ищет реализацию конкретной функции для конкретного объекта, который реализует интерфейс.
Это позволяет, например, приложениям на Android динамически устанавливаться и запускаться без необходимости перекомпилировать фреймворк (базовую jvm-программу) Андроида (статически "встраивая" в него код приложения и жестко прописывая идентификаторы реализуемых функций), без перезагрузки и прочей дичи. Системе (исполняемой среде машины) ничего может быть неизвестно о собственных классах приложения и как с ними работать напрямую, но при этом знает, как взаимодействовать с известными ему базовыми классами (интерфейсами), унаследованными/имплементированными из фреймворка.
Именно такой полиморфизм позволяет быть фреймворку и приложению - отдельными модулями в одной исполняемой среде.
У меня примерно такое понимание складывается, сам изучаю Java по книге Шилдта. И лично мне всегда казалось, что полиморфизм (с практической точки зрения, а не абстрактной теории) - это только про переопределяемые методы, который существует только в ООП. А перегрузка - это просто иной способ однозначной идентификации функции по тому же имени, но с разным форматом входных данных, которая, в теории, вполне могла бы существовать и в ФП.
Мне лично у вас в кабинете больше нравилось)
Запиши про абстракцию все таки, только не в ключе ООП, а своё мнение
Сергей, спасибо за ваши видео. Как вы правильно заметили, полезно не только новичкам, но и опытным. Мне полезно в том, что я подмечаю моменты, которые для меня казались сами собой разумеющимися, но по видео и по комментариям вижу, что это не так, и теперь, при общении с младшими коллегами, я уточняю их понимание этих вопросов.
А не думали ли вы снять видео про абстракцию не как принцип ООП, а как одного из "принципов" здравого смысла? Я довольно долго работал разработчиком электронных устройств, меньше - разработчиком микроэлектронных устройств, довольно много работал со структурным программированием, занимался планированием работ, сейчас довольно много работ с ООП. И везде нужны абстракции. Я на этих примерах объясняю молодым коллегам, как пользоваться абстрагированием. Если вы заинтересуетесь данной идеей, могу помочь с применением абстрагирования вне программирования, чтобы сэкономить вам время.
не откажусь :)
Эхо мешает сильно
Инкапсуляция в смысле сбора в одно место есть ещё в древних сях, что как бы говорит
вряд ли, в случае наследования, колесо истории повернет ход, на самом деле все движется к функциональщине и ООП отодвигается все дальше и дальше, а куча кода построенного на инверсиях и инъекциях без наследования вряд-ли будут переписывать по новой, да и плюсов у такого подхода тоже не мало.
Ad hoc - то латынь, "to this", "специально для этого". Так что смело произносите "Ад хок" - фас поймутт. Если хотите блеснуть чешуей - вот на выбор британское и американское произношение: dictionary.cambridge.org/us/dictionary/english/ad-hoc
Ну, если не про абстракцию,может про MVC? :)
Это хоть и не принцип ООП, но новичакам полезно бы послушать
А вы сейчас о чем говорили? Я думал, что мне тут понятным языком что-то объяснят. А меня тут только загрузили непонятными словами
Запишите плиз видео, почему абстракция - не принцип ооп.