Принципы ООП. 3. Полиморфизм

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ก.ย. 2024
  • Всем привет! Это третий ролик из небольшого цикла лекций о принципах ООП. Сегодня поговорим о полиморфизме.
    Курсы для новичков:
    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/nemchinsk...

ความคิดเห็น • 301

  • @SergeyNemchinskiy
    @SergeyNemchinskiy  ปีที่แล้ว

    🦊Новый поток Advanced курса Enterprise Patterns стартует уже 1 февраля 2023 года ❗
    Регистрация - go.foxminded.ua/3GPXeYF

  • @expurple
    @expurple 4 ปีที่แล้ว +320

    Ценю работу над каналом, но поддержу мнение, что за столом было душевшее) И эхо в этой студии сильное

  • @dimitro.cardellini
    @dimitro.cardellini 4 ปีที่แล้ว +118

    По теме )
    .
    # Полиморфизм -- это возможность одного и того же алгоритма обрабатывать данные разных типов, независимо от того, какие это типы. Без проверок типов внутри и ветвления в зависимости от того, с каким конкретным типом алгоритм работает в конкретный момент времени.
    .
    # Мнимый полиморфизм (ad-hoc) -- это когда только создается видимость, что алгоритм полиморфный, но на самом деле в момент компиляции/транспайлинга программы либо происходит подстановка другого алгоритма, в зависимости от типа/ов переданных аргументов, либо происходит неявное преобразование типа/ов аргумента/ов. Важно то, что в результате есть один или больше алгоритмов, каждый из которых мономорфный -- т.е. работает с данными строго одного типа. Ярким примером является перегрузка функций/методов. Когда для обработки разных данных создаются разные функции, имеющие одно имя, но разную сигнатуру (имя + перечень типов аргументов). Такое возможно далеко не во всех языках программирования.
    .
    К такому типу полиморфизма относится и паттерн-матчинг, т.к. он сводится к совокупности мономорфных алгоритмов.
    .
    По способу достижения полиморфизма можно выделить:
    - полмиорфизм подтипов
    - структурный полиморфизм
    - параметрический полиморфизм
    .
    # Полиморфизм подтипов - это возможность алгоритма работать со всеми подтипами одного общего типа, опираясь на свойства общего типа (например, на то, что экземпляры общего типа, а значит и всех его подтипом, имеют определенный метод, с определенной сигнатурой). Наследование -- это частный случай создания Подтипа. Определяя интерфейс, создается тип. Реализация интерфейса -- это также создаение Подтипа, хоть наследование и не происходит.
    TypeScript и Flow работают именно с таким типом Полиморфизма, даже не смотря на то, что проверка того, является ли Тип подтипом Общего Типа осуществляется путем сопоставления структур Типа и Общего типа (без необходимости синтаксически декларировать такую связь).
    .
    # Структурный полиморфизм - это возможность алгоритма работать с объектами (значениями), игнорируя их тип и способ создания, и предполагая, что объекты/значения обладают нужными свойствами (например у объектов будет нужный метод с нужной сигнатурой). Его часто называют Утинным Полиморфизмом. Такой работат в JS. Собственно, я бы Структурный полиморфизм отнес к разновидностям Полиморфизма подтипов, но с оговоркой, что статической проверки типов нет.
    .
    # Параметрический полиморфизм -- это возможность алгоритма работать с данными "не названных" типов, которым присвоены абстрактные имена. Т.е. типы являются Параметрами алгоритма, равно, как и его аргументы. Это всеми нами гороче любимые Generic-и. Например: Array -- это пример Параметрического полиморфизма. Tree, List etc. etc.

    • @linkernick5379
      @linkernick5379 4 ปีที่แล้ว +3

      :+1:

    • @linkernick5379
      @linkernick5379 4 ปีที่แล้ว

      Только утиная типизацияи структурная типизация это не одно и то же. Например, автоматическую реализацию интерфейсов в Го некорректно называть утиной типизацией.

    • @haykmkrtchyan7093
      @haykmkrtchyan7093 2 ปีที่แล้ว

      Как по мне, в дженериках тоже после компиляции работаем с мономорфным типом и оно становится ad-hoc.

    • @dimitro.cardellini
      @dimitro.cardellini 2 ปีที่แล้ว +1

      ​@@haykmkrtchyan7093 думаю, это зависит от языка и от дженерика. Например, в TS на тип-параметр можно наложить органичение: соответствовать какому-либо интерфейсу и тогда все пойдет по полиморфизму подтипов. А может и зарезолвится в ad-hoc полиморфизм -- если это например: f = (a: T, b: T): T => a + b;
      В общем, параметрический полиморфизм -- это круто, полезно и вкусно.

    • @SergeySuper_Silver
      @SergeySuper_Silver ปีที่แล้ว +2

      Очень полезный комментарий. Спасибо)

  • @user-bk6ok6do9i
    @user-bk6ok6do9i 4 ปีที่แล้ว +45

    Дублировать текстом вещи о которых идет речь есть очень хорошо. Примеры бы с кодом какие в виде призентации на фоне. А так супер!)

  • @yana7j
    @yana7j 4 ปีที่แล้ว +197

    прикольный формат, но прошлый был, как-то, более по-домашнему, более уютно)

    • @NikolayVerhovcev
      @NikolayVerhovcev 4 ปีที่แล้ว +6

      Согласен, кажется сейчас домашний формат в тренде

    • @syoritohatsuki
      @syoritohatsuki 4 ปีที่แล้ว +1

      Кря

  • @egorsank4791
    @egorsank4791 4 ปีที่แล้ว +13

    Спасибо!
    Я из тех кому все равно на фон, звук, одежду и прочее.
    Содержание - Самое главное!
    Спасибо за содержание!
    P.S. Мне во всех ваших видео нравится антураж

  • @nmodonov
    @nmodonov 3 ปีที่แล้ว +11

    Блин. А про if-то мысль реально хороша. Объяснение полиморфизма через нее пока самое доступное на моей памяти.
    Было бы круто добавить короткий пример замены if-а или оставить ссылку на него.

    • @vitall789
      @vitall789 ปีที่แล้ว

      Да сложно представить истинный полиморфизм заменяющий IFы без перегрузки или нарушения инкапсуляции - первого принципа ООП.
      Разве только приходит в голову методика разыменования аргумента в метод базового класса или что-то подобное!
      ПС: Возможно перегрузка методов-интерфейса хороший вариант решения данной проблемы и я так понимаю что это не будет считаться как ad-hoc полиморфизм.

  • @homo-ergaster
    @homo-ergaster 4 ปีที่แล้ว +188

    Белы фон вам не идет. Прежние видео были ламповее, чтоли.

    • @homo-ergaster
      @homo-ergaster 3 ปีที่แล้ว

      @kotto Почему частное? В последнем постанвлении правительства тоже про это говорится.

  • @leetovetz
    @leetovetz 4 ปีที่แล้ว +46

    потерялась ламповость видео. теперь сухой профессионализм.
    двоякое чувство)))

  • @zabiyaka785
    @zabiyaka785 4 ปีที่แล้ว +2

    Ой, сколько новых видео!!! Сергей, ставлю лайк даже не посмотрев (сейчас исправлю эту ошибку), так сказать заочно! Большое вам спасибо! Долго отсутствовал, сейчас буду смотреть каждое новое для меня видео.

  • @Vanderflit.
    @Vanderflit. 4 ปีที่แล้ว +14

    За столом как то интересней и привычней. А еще на столе стоит великолепная кружка!

  • @linkernick5379
    @linkernick5379 4 ปีที่แล้ว +31

    В видео было много слов, но, к сожалению, некоторые из них правильные, а некоторые - нет. В итоге складывается впечатление, что полиморфизма всего два, и из них один какой-то неправильный (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, но это уже глубины теории типов, до практики они ещё не дошли.
    Итог. Сергей Немчинский конечно хороший дядечка, позитивный и харизматичный, но не стоит верить всему, что он говорит без оглядки, нужно проверять сведения и читать хорошие книжки, скажем Пирса "Типы в языках программирования".

    • @eligolin9947
      @eligolin9947 4 ปีที่แล้ว

      Спасибо что успакоели меня (Scala кодера) а то прям кровь из ушей лилась.
      Думал сам закаментировать но решил сначала адекватный коммент поискать.
      Ещё + вам в догонку.

    • @handsupslowly
      @handsupslowly 3 ปีที่แล้ว +2

      @DASSDED ну что спросили ?)

  • @eugenstakhursky9604
    @eugenstakhursky9604 4 ปีที่แล้ว +24

    Классно получилось, спасибо Сергей!
    P.S. в следующий раз напишите титрами когда можно открывать уши)))

  • @neuralnetwork.2807
    @neuralnetwork.2807 4 ปีที่แล้ว +5

    Мне новый формат даже больше понравился, чем старый

  • @bim1430
    @bim1430 4 ปีที่แล้ว +43

    Во фронтэнде - новый формат видео, а в бэкэнде релокация офиса ? =)

  • @user-wl7gt8qc9s
    @user-wl7gt8qc9s ปีที่แล้ว

    Сергію, дякую! Не додам нічого нового до того, що сказано іншими, просто урок вийшов традиційно змістовним і цікавим і заслуговує на "свіжий" коментар))

  • @shane2899
    @shane2899 4 ปีที่แล้ว +2

    Новый формат супер! Все внимание фокусируется о том, что говорит диктор☝🏻 Возможно, для лучшего понимания полиморфизма можно было бы добавить несложные схемы или код, чтоб акустическся информация еще визуально подкреплялась. Сергей, спасибо Вам!

  • @gilzaa
    @gilzaa 4 ปีที่แล้ว +1

    Вы молодец. Достаточно давно слежу за вашим каналом. Даже 2 месяца был на проекте в вашей школе. Надеюсь, даже спустя неделю, вы прочитаете этот коммент. Хотелось бы и мне высказать свое мнение по поводу видео, хотя обычно комменты не оставляю.
    С фоном лампово и по домашнему, без фона - динамически и по современному. Больше всего понравились тезисные подпись. С ними как-то проще воспринимается информация. Можно подписи оставить (пофиг на фон))

  • @masturch99f
    @masturch99f 4 ปีที่แล้ว +1

    Отличный формат! Всё очень лаконично и очень информативно!

  • @maximgribencicov3619
    @maximgribencicov3619 3 ปีที่แล้ว +1

    Очень полезные и информативные ролики получаются у вас. Хотим больше "обучалок"

  • @itcloudguy
    @itcloudguy 4 ปีที่แล้ว +48

    Советую поработать над звуком. В новой обстановке эхо от стен напрягает.

    • @leonidkorkulenko4838
      @leonidkorkulenko4838 4 ปีที่แล้ว

      Плюсую. Со звуком точно нужно что то делать. Эхо очень жёсткое.

    • @leonidkorkulenko4838
      @leonidkorkulenko4838 4 ปีที่แล้ว

      И кстати. В целом формат очень классный. Двигаетесь в правильном направлении. Но звук поправить надо =)

  • @user-kl3mt7rl2n
    @user-kl3mt7rl2n 4 ปีที่แล้ว +1

    Очень крутой формат, намного лучше предыдущего.

  • @serhiiho
    @serhiiho 4 ปีที่แล้ว +2

    Не хватает зарисовочек на белом фоне, чтобы визуально было понятно на примере, а так как радио послушал, но в целом как всегда супер;) спасибо за видео

  • @shutterradio
    @shutterradio 4 ปีที่แล้ว +3

    Новый формат - супер! Осталось только английских субтитров добавить чтоб весь мир смотрел :)

    • @maadinpavliev9565
      @maadinpavliev9565 4 ปีที่แล้ว

      Согласен если с делать субтитры и английское название водосам, даже старым это взлетит.

  • @dmitrinikolaev6986
    @dmitrinikolaev6986 4 ปีที่แล้ว +1

    Аааааа как же не привычно) но видео классные! Спасибо!

  • @user-gs7ro3tl9t
    @user-gs7ro3tl9t 4 ปีที่แล้ว +1

    По моему опыту, это наиболее полное и понятное объяснение полиморфизма на русской ютубе. И за инфу про объекты без поведения и сервисы без состояния отдельное спасибо, это действительно имеет место быть и на это стоит акцентировать внимание, чтобы понимать современные реалии проектирования ПО.

  • @benedikt7777
    @benedikt7777 4 ปีที่แล้ว +12

    По поводу ИФов и тему с простыней хотелось бы увидеть пример кода))

    • @MaxKyivUa
      @MaxKyivUa 11 หลายเดือนก่อน

      chat GPT в помощь. Я только что у него попросил переписать мой метод где много ИФов было, осталось только понять ответ ))

  • @mathew9794
    @mathew9794 ปีที่แล้ว

    Кратко, ясно, понятно. Благодарю.

  • @IlyaIstomin
    @IlyaIstomin 4 ปีที่แล้ว

    Sergey, плакал в голосину, когда узнал, что не я один отделением состояния от поведения озадачен.
    Пробовал даже чинить подобное упущение, добавляя для каждого сервиса-интерфейса(со свеой иерархией) "сервис-маршрутизатор"(не знаю как иначе назвать), который, в зависимости от получаемой имплементации доменной сущности(с общим интерфейсом) делегирует соответствующему обработчику(ну и результаты мержит).

  • @user-lg3nm9qt9z
    @user-lg3nm9qt9z 4 ปีที่แล้ว

    Новый формат - мне зашёл )

  • @deltadeltaohmygod
    @deltadeltaohmygod 4 ปีที่แล้ว +6

    Не всегда нужно использовать наследование для достижения параметрического полиморфизма. Есть языки, в которых импелементация интерфейсов не требует наследования (Rust, Go, Typescript). Есть дженерики и темплейты. Есть Duck Typing и динамические языки. Конечно, это не значит, что не нужно использовать наследование, но его ограниченность нужно понимать и стараться избегать.

  • @user-iq2ic3mh9z
    @user-iq2ic3mh9z 4 ปีที่แล้ว +25

    Сергей, судя по фону, вы устроились в Apple, поздравляю!

    • @goodvin8554
      @goodvin8554 4 ปีที่แล้ว +1

      Это был бы шаг назад. У Сергея своя фирма.

    • @mannas273
      @mannas273 4 ปีที่แล้ว +1

      @Volodymyr Volodymyr ээээммим всегда. Если там не условия как у шаха

  • @arthurfonzerelli6484
    @arthurfonzerelli6484 4 ปีที่แล้ว +74

    Фон лучше убрать - верните как было)

  • @borismatashin5891
    @borismatashin5891 4 ปีที่แล้ว +1

    Благодарность за coding by exception!

  • @doom678
    @doom678 3 ปีที่แล้ว

    Смотрю уже 30 ролик, ничего не понимаю но очень интересно!

  • @Avram_Vitalik
    @Avram_Vitalik 2 ปีที่แล้ว

    Приятно смотреть ваш канал. Спасибо за хороший контент. Успехов.

  • @ДмитрийКалиниченко-й3й
    @ДмитрийКалиниченко-й3й 4 ปีที่แล้ว +1

    +1 за новый формат

  • @descar1626
    @descar1626 4 ปีที่แล้ว +16

    разделение видео на части - хорошая идея. Использовать для этого пятисекундные вставки с логотипом выглядит растягиванием хронометража. Они одинаковые и скучные. Можно хотя бы названия этих частей туда вставлять

    • @user-us5uf9tt8i
      @user-us5uf9tt8i 4 ปีที่แล้ว +1

      а лучше вообще убрать

    • @NummeSpnet
      @NummeSpnet 4 ปีที่แล้ว

      название частей в разделении хорошая идея, а еще под видео сделать "оглавление" с ссылками на эти самые части видео.

    • @iex32
      @iex32 4 ปีที่แล้ว +2

      а можно на эти заставки вставлять что-то интересное, трейлеры фильмов например

  • @David-jy1fm
    @David-jy1fm 3 ปีที่แล้ว

    Ну прям очень-очень интересно слушать. Хоть ничего и не понимаю ))))

  • @lexlotar4847
    @lexlotar4847 3 ปีที่แล้ว

    Хорошее видео. Кстати про абстракцию согласен, масло масленое. Абстракция есть отказ от неких свойств объекта, которые не важны в контексте решаемой задачи. Это вообще используется в любой области жизни. Если я нанимаю строителя, чтобы он делал ремонт, мне важно умеет ли он красить, класть плитку, штукатурить и совершенно пофигу умеет ли он играть на балалайке.

  • @ДаниилГончаренко-г8я
    @ДаниилГончаренко-г8я 4 ปีที่แล้ว

    Лайк сразу, новый формат понравился, с примерами кода думаю было бы лучше, а в общем всё кратко и по делу. Спасибо большое)))

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 ปีที่แล้ว +1

      примеры кода были бы не очень показательными, мне кажется. Но я подумаю

    • @ДаниилГончаренко-г8я
      @ДаниилГончаренко-г8я 4 ปีที่แล้ว

      @@SergeyNemchinskiy Как говорится "не попробуешь - не узнаешь")))

  • @sergeyivanin7904
    @sergeyivanin7904 4 ปีที่แล้ว

    А мне понравилось. Полиморфизм серьезная тема, и белый фон как бы говорит что нужно внимательно слушать Сергея а не смотреть что на столе лежит

  • @romansharpe1131
    @romansharpe1131 4 ปีที่แล้ว

    Ну наконец то мой любимый полиморхвизм)

  • @antoneltonij8362
    @antoneltonij8362 3 ปีที่แล้ว

    Хороший эксперимент с фоном. За столом было душевнее.
    Но с белым фотом можно выводить дополнительную информацию.
    Единственное я бы добавил больше информации. И когда она появляется, сдвигал спикера больше в бок

  • @juliusmalkov9620
    @juliusmalkov9620 4 ปีที่แล้ว

    Прикольная смена, но я ещё не проверял просмотр ночью в темноте) но пока нравится весь формат - по современному, что ли)

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 ปีที่แล้ว

      мы именно для этого и старались

  • @VseNikiSukaZanyaty
    @VseNikiSukaZanyaty 4 ปีที่แล้ว +3

    Можете тогда рассказать, что понимают под абстракцией, почему считают принципом ооп, и почему это не принцип ооп?

  • @Ivan-yp8nq
    @Ivan-yp8nq 4 ปีที่แล้ว +11

    Спасибо за интересное видео👍
    Но возможно стоит включить тёмную тему

  • @user-jk9tp5qi1s
    @user-jk9tp5qi1s 4 ปีที่แล้ว +1

    Сергей, отличный формат, но мне кажется слишком много наездов/увеличения камеры и возможно лучше использовать текст либо при наезде либо нет) Спасибо за видео

  • @HaiIag
    @HaiIag 4 ปีที่แล้ว +2

    Рівень відео зростає, що не може не радувати!

  • @user-iz2jo8cz9w
    @user-iz2jo8cz9w 4 ปีที่แล้ว

    Белый фу, только темная тема!))) Сергей, спасибо

  • @eidenrid7735
    @eidenrid7735 3 ปีที่แล้ว

    Зашел только для того, чтобы убедиться что автора всё еще зовут Сергей Немчинский. Убедился, теперь можно снова спать спокойно

  • @alexsss3851
    @alexsss3851 4 ปีที่แล้ว

    Отлично! Спасибо за труд!

  • @nazarfernos184
    @nazarfernos184 4 ปีที่แล้ว +2

    Один раз захлох на этом вопросе на собеседовании. Спасибо за Ваш труд

  • @StNizelan_UA
    @StNizelan_UA 4 ปีที่แล้ว +8

    Вернити уютный офис :с
    холодно как то в вашей студии :С

  • @Alexander.Portnoy
    @Alexander.Portnoy 4 ปีที่แล้ว

    С напряжением смотрел видео, ожидая, когда же ты начнёшь как обычно "гы-гы" впопад и невпопад. НО ЭТОГО НЕ ПРОИЗОШЛО!!! Прям видно, как нелегко тебе это давалось! Но ты смог! Респект и уважуха!!! 👍🏻👍🏻👍🏻😂 Так гораздо представительнее и производит лучшее впечатление. Признаюсь, эти постоянные гы-гы раздражают, но может это проблема во мне 😂
    Новый формат определённо имеет право на существование, но и старый оставить тоже было бы неплохо. Возможно, стоит выбирать формат в зависимости от темы.
    Согласен с другими комментаторами на тему звука (эхо) и притянутых за уши вставок-заставок. Если бы меня попросили выбрать лишь один формат из двух, то пока что старый побеждает. Но ИМХО пока ещё рано делать выводы. После пяти-десяти роликов в новом формате понятнее будет.
    Спасибо за интересный канал 👍🏻

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 ปีที่แล้ว +1

      о господи... А вы понимаете, что такими комментариями очень демотивируете авторов? Зачем вы это делаете? У вас проблемы с самооценкой?

    • @Alexander.Portnoy
      @Alexander.Portnoy 4 ปีที่แล้ว

      @@SergeyNemchinskiy Не понимаю. Честно.

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 ปีที่แล้ว

      @@Alexander.Portnoy ну, теперь вы знаете

  • @sergeyshestakov4936
    @sergeyshestakov4936 ปีที่แล้ว

    спасибо!

  • @andrey12277
    @andrey12277 4 ปีที่แล้ว +1

    Очень хочется услышать про абстракцию, пусть и не как принцып ООП, но как пример работающей методологии.

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 ปีที่แล้ว +2

      хорошо :) А вы почему не подписались? :)

  • @52352.
    @52352. 4 ปีที่แล้ว +1

    спасибо очень интересно. Побольше информации для чайников от архитектора как устроен компьютер интернет сайты и серверы..
    читаешь порой вакансии и запутаешься в терминах разжуйте пожалуйста в видео вакансии с 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 у нас обязателен для каждого изменения;
    подробное ручное тестирование готовых сборок.

  • @dmitrymenshov8694
    @dmitrymenshov8694 4 ปีที่แล้ว +1

    Сергей, запишите видео почему вы перешли с C++ на Java. Я постигаю плюсы, очень нравится, но очень сложно=), потому крайне хотелось бы послушать вас. Благодарю!

  • @user-zr9no8hv8g
    @user-zr9no8hv8g 4 ปีที่แล้ว +1

    Слышать всегда интересно! но эхо действительно мешает и фон белый асоциация с больницей, а вот без стола смотритесь солиднее:)))

  • @ilya_123__
    @ilya_123__ ปีที่แล้ว

    спасибо

  • @serggio88888
    @serggio88888 4 ปีที่แล้ว

    Ну молодца

  • @iyhan1987
    @iyhan1987 4 ปีที่แล้ว +4

    Ну, если не про абстракцию,может про MVC? :)
    Это хоть и не принцип ООП, но новичакам полезно бы послушать

  • @developmobi3529
    @developmobi3529 4 ปีที่แล้ว

    Первую очередь спасибо за видео. Было бы лучше показать + примеры как работает полифогизм :-)

  • @AllWayToDeath
    @AllWayToDeath 4 ปีที่แล้ว +11

    Новый формат интересный, но постоянные заставки для склейки кусков видео лишние.
    ИМХО

    • @VENTO_off
      @VENTO_off 4 ปีที่แล้ว +2

      Или хотя бы сделать время проигрывания заставки быстрее, но а так да - лишнее

  • @vladislavpavlov35
    @vladislavpavlov35 3 ปีที่แล้ว +1

    Не плохо бы побороть эхо и использовать пастельные тона в качестве фона. Спасибо за информацию)

  • @vasilyya7578
    @vasilyya7578 3 ปีที่แล้ว

    Отлично! Тока нужно поменять произношение слова else, а то слух режет)

  • @user-gn8jo3zd8y
    @user-gn8jo3zd8y 4 ปีที่แล้ว +1

    Отсутствие хранимого состояния, позволяет относительно легко горизонтально масштабироваться, сравнительно легко тестировать части, и легко дебажить. Самое сложное для понимания это state machine, чем является по сути любой объект в ООП.
    Из за этого, куча фреймворков и принуждает разделять хранение и обработку. Век вертикального масштабирования, сменяется горизонтальным и пора бы переходить на функциональщину.

  • @onebytesiteit30-75
    @onebytesiteit30-75 4 ปีที่แล้ว +1

    самый топовый канал. Немного музычка отвлекает на фоне
    Благодарю за информацию . Поздравляю скоро 100 000 подписчиков .
    У меня не большой канал но тоже стараюсь для начинающих в айти делать хорошие видео .
    Если что заглядывайте надеюсь понравится я очень стараюсь .

  • @oshastitko
    @oshastitko 6 หลายเดือนก่อน

    а мне наоборот, всегда было непонятно, почему никто никогда не говорит о том, что if-ы - это по сути альтернатива полиморфизму. Ведь if это как раз об этом - проверить что-то, что в принципе может быть разделено на 2 (или более, если с else) класса с общим предком, в котором, так сказать, описан весь тот контекст, в котором мы работаем

  • @kirillromanov1184
    @kirillromanov1184 4 ปีที่แล้ว

    Идея с новым фоном хорошая. Возможно стоит попробовать снимать стоя.

  • @haykmkrtchyan7093
    @haykmkrtchyan7093 2 ปีที่แล้ว

    Поли - Много, морфизм - форм. Полиморфизм - много форм.

  • @lexaka26
    @lexaka26 3 ปีที่แล้ว

    - О себе вы указали "программист с большим стажем", так, неплохо. Что вы имели ввиду под уровнем английского D8?
    - Илс.

  • @user-rh8zt3zo2z
    @user-rh8zt3zo2z 3 ปีที่แล้ว

    Что такое - паттерн? Простым языком пожалуйста. И если будет не сложно на нескольких примерах. Заранее спасибо.

    • @imho10
      @imho10 3 ปีที่แล้ว

      погуглить не судьба? я и то погуглил

  • @I-PixALbI4-I
    @I-PixALbI4-I 4 ปีที่แล้ว

    Сергей, белый фон выедает глаза при просмотре, неужели у вас в команде одни бекендеры и нет человека который разбирается в радостях для глаз?) Ну и эхо конечно.
    Вопрос: вы говорили про параметрический полиморфизм и что функция при этом принимает базовый класс, получается мы будем иметь дело с распаковкой-упаковкой? Оно того стоит?
    Спасибо за видео, стало чуток понятнее.

  • @leonl2794
    @leonl2794 4 ปีที่แล้ว

    Лично я полиморфизм понимаю так: есть полиморфизм с точки зрения перегруженных (overload) методов и переопределенных (override). Полиморфизм для перегруженных методов - не более чем "синтаксический сахар", т.к. в ООП функции однозначно идентифицируются по имени и по формату входных параметров (их тип и количество), то для удобства написания кода разработчику стоит помнить только одно название метода, а конкретная функция по данному имени будет выбрана уже компилятором на основе формата входных данных и встроена в код.
    А полиморфизм для переопределенных методов - это т.н. "динамическая диспетчеризация методов", которая работает во время исполнения программы, вызов конкретной реализации функции зависит от типа определенного объекта, а не типа ссылки объекта. Но тип ссылки объекта будет определять интерфейс взаимодействия с этим объектом. И в этом случае полиморфизм дает большие преимущества - вызываемой среде (какому-нибудь фреймворку, например) не нужно ничего знать об реализации объектов-наследников, если он уже знает интерфейс взаимодействия с объектом. И в байт-коде (если это Java) нет "жесткой" связи с функцией, которая должна вызываться, и JVM во время работы программы ищет реализацию конкретной функции для конкретного объекта, который реализует интерфейс.
    Это позволяет, например, приложениям на Android динамически устанавливаться и запускаться без необходимости перекомпилировать фреймворк (базовую jvm-программу) Андроида (статически "встраивая" в него код приложения и жестко прописывая идентификаторы реализуемых функций), без перезагрузки и прочей дичи. Системе (исполняемой среде машины) ничего может быть неизвестно о собственных классах приложения и как с ними работать напрямую, но при этом знает, как взаимодействовать с известными ему базовыми классами (интерфейсами), унаследованными/имплементированными из фреймворка.
    Именно такой полиморфизм позволяет быть фреймворку и приложению - отдельными модулями в одной исполняемой среде.
    У меня примерно такое понимание складывается, сам изучаю Java по книге Шилдта. И лично мне всегда казалось, что полиморфизм (с практической точки зрения, а не абстрактной теории) - это только про переопределяемые методы, который существует только в ООП. А перегрузка - это просто иной способ однозначной идентификации функции по тому же имени, но с разным форматом входных данных, которая, в теории, вполне могла бы существовать и в ФП.

  • @TheRedfordby
    @TheRedfordby 6 หลายเดือนก่อน

    вряд ли, в случае наследования, колесо истории повернет ход, на самом деле все движется к функциональщине и ООП отодвигается все дальше и дальше, а куча кода построенного на инверсиях и инъекциях без наследования вряд-ли будут переписывать по новой, да и плюсов у такого подхода тоже не мало.

  • @SuperLinuxoid
    @SuperLinuxoid ปีที่แล้ว

    дякую!!!

  • @YujinK11
    @YujinK11 3 ปีที่แล้ว +1

    Наследование - это да. А как же интерфейсы? Можно вместо базового класса использовать интерфейс. И тогда метод может принимать любой класс реализующий этот интерфейс.

    • @princessmary5556
      @princessmary5556 8 หลายเดือนก่อน

      Интерфейсы реализуются через наследование.

  • @yurii_s_m_25
    @yurii_s_m_25 4 ปีที่แล้ว

    Дуже дякую!

  • @arthur.v.babayan
    @arthur.v.babayan ปีที่แล้ว

    А интересно, функции с перегрузкой, не if используют ???

  • @user-qw9lw1rj3e
    @user-qw9lw1rj3e 4 ปีที่แล้ว +10

    Кажется вы перепутали Parametric polymorphism (параметрийчний полиморфизм - на нем построены дженерики) с Subtype polymorphism (полиформизм на основе подтипов).

    • @user-xu5po3rk5t
      @user-xu5po3rk5t 4 ปีที่แล้ว +3

      Он перепутал полиморфизм в информатике, с полиморфизмом в ООП.
      Чувак полный профан.

    • @richarddaniel7088
      @richarddaniel7088 3 ปีที่แล้ว

      Ничего он не перепутал. Он все правильно сказал.

    • @richarddaniel7088
      @richarddaniel7088 3 ปีที่แล้ว

      @@user-xu5po3rk5t ахаха, то есть полиморфизм в ООП по-твоему существует отдельно от информатики?

    • @user-xu5po3rk5t
      @user-xu5po3rk5t 3 ปีที่แล้ว

      Прикинь, да.

    • @user-xu5po3rk5t
      @user-xu5po3rk5t 3 ปีที่แล้ว

      Я смотрю он тут не один такой.

  • @Sulf8
    @Sulf8 3 ปีที่แล้ว

    Ещё 1 взрыв мозга от той самой мысли Т_Т

  • @РайанКупер-э4о
    @РайанКупер-э4о 4 ปีที่แล้ว

    Инкапсуляция в смысле сбора в одно место есть ещё в древних сях, что как бы говорит

  • @liamsmith7052
    @liamsmith7052 4 ปีที่แล้ว

    Спасибо. Давайте про Event Sourcing, DDD и CQRS.

  • @user-gs9ly7qo3u
    @user-gs9ly7qo3u 4 ปีที่แล้ว

    Разве при перегрузке методы называются по разному? Или это просто оговорка?

  • @dimitro.cardellini
    @dimitro.cardellini 4 ปีที่แล้ว +5

    Достаточно сумбурно и узко.
    .
    По ссылке все разложено гораздо лучше: en.wikipedia.org/wiki/Polymorphism_(computer_science)
    .
    По лекции. "Полиморфизм не возможен без наследования". Возможен, если есть интерфйсы. Интерфейсы реализовывають, а не наследуют. Кроме того, возможен структурный полиморфизм (см. JS), при котором происходит реализация интерфейса без явного декларирования обязательства его реализовать.
    .
    Что касается наследования и полиморфизма. Ноги здесь растут из С++-ных чисто-абстрактных классов, которые играют роль интерфейсов и там реализация интерфейса синтаксически декларируется, как наследование. Вместе с тем, если класс действительно чисто абстрактный, то никакого наследования не происходит (наследовать нечего). К тому же, это конкретная реализация, в конкретном языке программирования (ЯП). Если же ЯП допускает указние интерфейса в качетсве типа аргумента функции/метода, то полиморфизм возможен и без наследования. Более того, именно такая форма полиморфизма и рекомендована D-принципом из SOLID.
    .
    А вот с параметрическим полиморфизмом вообще незадача вышла. Во-первых, описанное в лекции больше подходит под "Полиморфизм Подтипов" en.wikipedia.org/wiki/Subtyping
    .
    А во-вторых, Параметречиский полиморфизм -- это возможность создать целый класс классов (типов)/функций, имеющих общую реализацию, независимо от того, на какие типы опирается каждый/ая конкретный/ая из них. Это вот совсем не полиморфизм подтипов. Например, у нас есть такое понятие как матрица, матрицы можно складывать, умножать на число, на другую матрицу, можно находить обратную матрицу, и соответственно можно даже делить одну матрицу на другую (умножать на обратную).
    .
    Так, вот можно реализовать класс Matrix, который будет это все делать, скажем, для целых чисел, можно сделать тоже самое для вещественных, комплексных и т.п. Но, все эти алгоритмы будут одними и теми же. Так родились шаблоны в C++ и Generic-и в Ява (C#, TypeScript и большом числе других языков).
    .
    class Matrix {
    // ...
    }
    .
    это и есть пример параметрического полиморфизма. Собственно: Array -- это тоже пример параметрического полиморфизма. Класс работает для любых типов T, даже не связанных наследованием и даже не требующих реализации специфического интерфейса (в случае с матрицами там на параметрический тип Т накладывается ограничение, т.к. требуется, что для значений из него были реализованы определенные операции, определена единица, ноль и т.п.). Параметрический полиморфизм -- это программирование на типах (создание функций, которые на вход получают типы, и на выходе имеют типы).
    .
    И все это ну никак с наследованием не связано. Т.е. оно может существовать параллельно с наследованием, т.к. вполне себе можно унаследоваться от Generic типа.
    .
    Ну и еще, на полиморфизм можно посмотреть с другой стороны, т.е. не только со стороны полиморфного алгоритма, но и со стороны полиморфного класса. Скажем, если некий класс реализовывает несколько интерфейсов, то его вполне себе можно назвать полиморфным (скажем, интерфейс серрилазиации/десерриализации и интерфейс инспектирования). Но, отсылки к такому типу полиморфизма редки и, вряд ли, существенны.

  • @DM14Andre
    @DM14Andre 4 ปีที่แล้ว +24

    Эхо мешает сильно

  • @alekseygorin4558
    @alekseygorin4558 10 หลายเดือนก่อน

    Спасибо за материал.. но музыкальная подложка все портит.. Получается что музыка на фоне отвлекает от повествования... как будто в шумной кафешки сидишь...

  • @grommaks
    @grommaks 4 ปีที่แล้ว

    Эхо сильное, а так формат хороший :)только в старом формате было прикольно наблюдать за новыми вещами на столе и в фоне...
    Так через интерфейсы реализуется полиморфизм...зачем наследование 🙄

  • @alcher13
    @alcher13 4 ปีที่แล้ว

    Сергей, поменять фон - идея неплохая, но все таки периодически есть ощущение, что чего-то в кадре не хватает. Мне кажется было бы лучше вам переместиться в кадре чуть-чуть левее, а справа чтобы была постоянно картинка. Но это сугубо мое мнение.

    • @alcher13
      @alcher13 4 ปีที่แล้ว

      + эхо правда мешает

  • @АнатолийАнтонов-л4м
    @АнатолийАнтонов-л4м 5 หลายเดือนก่อน

    А разве параметрический полиморфизм это не история про обобщенное программирование?По моему здесь вы говорите про полиморфизм подтипов (subtyping)

  • @НиколайТополев-в1й
    @НиколайТополев-в1й ปีที่แล้ว +1

    А вы сейчас о чем говорили? Я думал, что мне тут понятным языком что-то объяснят. А меня тут только загрузили непонятными словами

  • @Maloj2006
    @Maloj2006 4 ปีที่แล้ว

    Запиши про абстракцию все таки, только не в ключе ООП, а своё мнение

  • @DimaVort
    @DimaVort 4 ปีที่แล้ว +3

    До конца видео ждал, когда Сергей предложит 2 таблетки на выбор)

    • @superspy2008
      @superspy2008 4 ปีที่แล้ว

      тоже матрицу напомнило

  • @nikitavovny3792
    @nikitavovny3792 4 ปีที่แล้ว +2

    06:45 тут я поностальгировал по былому формату

  • @codingfox
    @codingfox 4 ปีที่แล้ว +10

    На что только ни пойдешь ради 100к подписчиков и серебряной кнопки) Даже фон поменяешь

  • @andriyvandam5978
    @andriyvandam5978 3 ปีที่แล้ว

    Сергей, здраствуйте.... бил би очень благодарен за какой нибудь конкретний пример замени if полиморфизмом, или если у вас есть уже такое видео, то буду благодарен за линку, а то чтото никак в голове такой код не виресовуется....
    Спасибо

  • @liftoman_777
    @liftoman_777 5 หลายเดือนก่อน

    В ардуиноIDE есть патерны?

  • @NikitaUtochkin
    @NikitaUtochkin 4 ปีที่แล้ว

    Есть вопрос по поводу применения вставок с помощью JNI. Кроме самого логичного кейса использования сишных и ассемблерных вставок в Android приложениях, это вообще имеет место быть? Просто это рушит весь принцип jvm и тд. Какие кейсы использования можете привести?