Просто о ООП (Парадигмы ООП)

Поделиться
HTML-код
  • Опубликовано: 22 май 2024
  • #YauhenK #webDev #ПростоО #OOP
    Добро пожаловать в очередной выпуск видеокаста, «Просто о».
    И тема сегодняшнего урока - это парадигма объектно-ориентированного программирования. Основная идея данного видео, максимально просто и с наглядными примерами дать объяснения основным понятиям ООП.
    Мы рассмотрим такие концепции, как объект, класс, экземпляр класса, наследование, инкапсуляция, полиморфизм, абстракция, интерфейс, композиция и агрегация.
    Примеры кода будут на TypeScript и Javascript, однако имейте ввиду что все концепции и парадигмы применимы практически к любому языку программированию
    ✒ Timeline:
    ✔ 0:00 - Введение
    ✔ 1:01 - Процедурное программирование (ФП)
    ✔ 2:17 - Объектно-ориентированное программирование (ООП)
    ✔ 2:43 - Объект
    ✔ 3:51 - Класс
    ✔ 5:40 - Экземпляр класса
    ✔ 6:47 - Наследование
    ✔ 8:47 - Инкапсуляция
    ✔ 11:02 - Полиморфизм
    ✔ 13:53 - Интерфейс
    ✔ 15:57 - Абстракция
    ✔ 17:47 - Композиция
    ✔ 19:41 - Агрегация
    ✔ 20:48 - Рекомендации
    ✒ Полезные ссылки:
    ✔ SOLID: • Просто о SOLID (Принци...
    ✔ Шаблоны проектирования (плейлист): • JavaScript Паттерны
    ✒ Полный список готовых и планируемых курсов:
    ✔ Trello: trello.com/b/R6rD7qq8
    ✒ Автор курса:
    ✔ RUclips: / yauhenkavalchuk
    ✔ Instagram: / yauhenkavalchuk
    ✔ Twitter: / yauhenkavalchuk
    ✔ VK: YauhenKavalchuk
    ✔ LinkedIn: / yauhenkavalchuk
    ✔ GitHub: github.com/YauhenKavalchuk
    ✔ VK (Группа): webdevcom
    ✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...

Комментарии • 181

  • @lis_petrovskij
    @lis_petrovskij 2 года назад +28

    Так вот какое видео об ООП я ждал все это время... Ютуб чик, подключай алгоритмы - годно та.

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +4

      Хотелось бы надеяться, что подключит)

  • @leksts7701
    @leksts7701 2 года назад +35

    Большая тебе благодарность! Приятно смотреть: всё просто, понятно. Пожалуйста, продолжай! Ты делаешь нашу жизнь лучше: я углубился в понимании ООП)

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +3

      Спасибо большое за поддержку!)

    • @user-cd5xf5iz1n
      @user-cd5xf5iz1n 2 года назад +1

      @@YauhenKavalchuk будет просто о алгоритмах и структурах данных?

  • @serhiilytvyn8753
    @serhiilytvyn8753 2 года назад +9

    Евгений, как всегда просто и понятно о сложных вещах, у Вас талант!!!

  • @vr4836
    @vr4836 2 года назад +6

    Оказывается ООП еще надо подучить ))) огромное спасибо за материал!!

  • @masaladosa6
    @masaladosa6 2 года назад +5

    Шикарное объяснение! ООП стало еще понятней. Лайк, репост!

  • @dilyafruzik
    @dilyafruzik 2 года назад +4

    В очередной раз благодарю за педагогически доходчивую подачу материала 👌

  • @user-ch9qk3ee5n
    @user-ch9qk3ee5n 2 года назад +6

    Спасибо вам огромное! Это то, что нужно! Ваше видео помогло собрать в кучу всю информацию, которая была в голове кусками.

  • @Kozmo969
    @Kozmo969 2 года назад +2

    Сколько я видео пересмотрел об ООП, твоё самое лучшее, понимание приходит просто моментально! Спасибо тебе огромное!

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +1

      Спасибо большое за отзыв!)

  • @aleksp7486
    @aleksp7486 Год назад +1

    Очередной раз убедился, что ты один из немногих, который действительно может доступно, доходчиво и главное интересно объяснить! Спасибо огромное, за то что ты делаешь!

    • @YauhenKavalchuk
      @YauhenKavalchuk  Год назад

      Спасибо большое за поддержку

  • @Mix-op9if
    @Mix-op9if 2 года назад +4

    Отлично, от тебя и ждал так как все понятно и просто обесняешь)

  • @dimalukashenko4865
    @dimalukashenko4865 2 года назад +2

    Спасибо, давно ждал такого хорошего урока по ООП на примере JavaScript.

  • @alexanderalexander7722
    @alexanderalexander7722 2 года назад +10

    Спасибо за твои труды! Шикарное видео!
    Как все просто на самом деле! Столько разных роликов на эту тему и книг, а понять что-либо из них крайне тяжело. Все заумно и запутанно. А здесь и просто, и понятно.
    Евгений, у тебя явно талант преподавания! Может стоит этим заняться профессионально?
    PS: очень не хватает именно твоих уроков по алгоритмам и структурам данных, желательно на примере JavaScript. Уверен: желающих на эту тему будет немало.

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +2

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

  • @WhiteHeterosexualMenHere
    @WhiteHeterosexualMenHere 2 года назад +6

    Это наверное самое лёгкое объяснение ООП на русском ютубе

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +1

      👍

    • @WhiteHeterosexualMenHere
      @WhiteHeterosexualMenHere 2 года назад

      @@andynaz7044 нет, включал фоном, когда смотреть нечего было

    • @WhiteHeterosexualMenHere
      @WhiteHeterosexualMenHere 2 года назад

      @@andynaz7044 я же там написал, что наверное или какие-то проблемы с восприятием текстовой информации?

    • @WhiteHeterosexualMenHere
      @WhiteHeterosexualMenHere 2 года назад

      @@andynaz7044 или что ты хочешь созвониться и помочь мне понять? Видеосвязь по телеграмму устроит?

    • @WhiteHeterosexualMenHere
      @WhiteHeterosexualMenHere 2 года назад

      @@andynaz7044 или этот комментарий к комментарию с чем-то связан? Для чего он тут?

  • @vitaliilushyn9854
    @vitaliilushyn9854 2 года назад +1

    В примере с наследованием на 8:30 после переопределения this.model = `${model} Model`; и вызвав родительский метод teslaAuto.getAutoType() мы получим
    //Tesla 3 Model - 2019, а не //Tesla 3 - 2019 как на скрине у ТС.
    Видео класс, спасибо автору.

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Спасибо за отзыв, да отпечатался в выводимом результате

  • @Kiddjan
    @Kiddjan 2 года назад +1

    Очень долго ждал подобное видео с твоей подачей, спасибо большое)

  • @konstantin6524
    @konstantin6524 2 года назад +7

    Прекрасное видео, обычно не оставляю комментарии, но здесь никак иначе, продолжайте в том же духе! п.с. из этой серии посмотрел бы такое же видео про ФП, может быть интересно

  • @yaroslavoz
    @yaroslavoz 2 года назад +1

    Супер! Спасибо! Наглядно очень

  • @mixm1572
    @mixm1572 2 года назад

    дзякуй

  • @mgblstmgblst3236
    @mgblstmgblst3236 2 года назад +1

    Шикарное видео, приятно от каждого слова! =)

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Спасибо большое за отзыв!

  • @SM-xp8tw
    @SM-xp8tw Год назад

    Один из лучших видосов про ооп, коротко, понятно, без лишней воды и тягомотины. Автору спасибо !

  • @webxcryptoit7308
    @webxcryptoit7308 2 года назад

    Спасибо, за твои уроки. С удовольствием смотрю.
    Немного уточнить хотел. На 20:27 в последней строке const mi8 = ....
    Там наверное ты хотел указать new Helicopter(... ?

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Да, там должен быть класс вертолёт

  • @Signtone
    @Signtone 2 года назад

    То что нужно! Спасибо Евгений!

  • @valeramitar9022
    @valeramitar9022 2 года назад

    Вперёд в топы, отлично все объяснено!)

  • @555522ish
    @555522ish 2 года назад +1

    Спасибо, было очень доступно

  • @arcadiibabici7655
    @arcadiibabici7655 8 месяцев назад

    Спасибо за твои труды!

  • @pavelluck3973
    @pavelluck3973 2 года назад

    Как же это вовремя) заранее спасибо!) приступаем к просмотру)

  • @Evgenij_Toporkov
    @Evgenij_Toporkov 2 месяца назад

    Действительно - простое и доходчивое объяснение!

  • @geek7807
    @geek7807 2 года назад

    Очень подробно разжёвано. Я аж даже на мгновение почувствовал себя умным)

  • @SobolevMsta
    @SobolevMsta 2 месяца назад

    Спасибо за старания! У тебя талант не только в разработке, но и к преподаванию.

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 месяца назад

      Спасибо большое за отзыв

  • @iskendev
    @iskendev 2 года назад

    Респект, спасибо за качественный материал.

  • @TarasovFrontDev
    @TarasovFrontDev 8 месяцев назад

    Спасибо за видео! Ты смог объяснить концепции. Но примеры - тихий ужас. Вот как свойство VIN может быть приватным свойством класса, если вин должен быть уникальным у каждого инстанса?

  • @ruden6623
    @ruden6623 5 месяцев назад

    Супер, только вот тема инкапсуляции и сокрытия, как по мне, не очень раскрыта. Точнее там используется слово, которое можно по разному трактовать(по крайней мере, я так думаю). Самое главное, что нужно запомнить: инкапсуляция обеспечивает сокрытие, но не является им!

    • @YauhenKavalchuk
      @YauhenKavalchuk  5 месяцев назад

      Спасибо за уточнение и пояснение

  • @turalinov
    @turalinov Год назад

    Очень доступно, спасибо!

  • @user-ue4hy9so3l
    @user-ue4hy9so3l 2 года назад +1

    Хорошее видео. Сложная тема простым языком.

  • @user-jh9qx7fy1o
    @user-jh9qx7fy1o Год назад

    Супер подача, спасибо

  • @neov5055
    @neov5055 2 года назад +1

    Очень ждём курс по js. Спасибо!!

  • @user-bw4xg8tb9r
    @user-bw4xg8tb9r 2 года назад

    Хорошее видео. Спасибо!
    Но почему не была затронута тема ассоциации?) Она же вроде рука об руку идёт с агрегацией.

  • @lutinik
    @lutinik 2 года назад +1

    На 15:20, наверное, должно быть new AutoFactory

  • @swayze_0
    @swayze_0 Год назад

    9:14 При обращению к классу подобным образом консоль выводит undefined (за исключением Auto.name = "Auto" имя класса), в TS вообще так обратиться нельзя. А даже если найдется пользователь который через инструменты разработчика найдет наш класс и что-то там поменяет, какая разница ведь при перезагрузке страницы все сбросится. То же самое если пользователь нажмет f12 и начнет удалять теги.
    Концепция инкапсуляции занятна, но разве она широко относится к JavaScript? Может что-то не понимаю, но по ощущениям вся инкапсуляция в js сводится к не использованию метода eval в пользовательском вводе.
    Полиморфизм - зачем нам создавать несколько дочерних классов с одним и тем-же методом и из них брать метод родительского? Можно на основе класса Auto создать объекты, скидать их в массив и так же проитерироваться по элементам с вызовом функции. Эффект тот же, кода и путаницы меньше. Или это своего рода диверсификация активов?)

    • @alexeikravchuk
      @alexeikravchuk Год назад

      Через имя класса можно обратиться к статическим свойствам и методам.

  • @umrbekxudayarov2459
    @umrbekxudayarov2459 Год назад

    Отличное видео, спасибо.

  • @bekturmuratov7853
    @bekturmuratov7853 2 года назад

    Отличное объяснения теперь стало ясно как работает ООП

  • @olehy5000
    @olehy5000 2 года назад

    Спасибо. Полезно.

  • @Albert_Hall
    @Albert_Hall Год назад

    Очень очень Чётко! 🌠🛠️

  • @EugeneShperl
    @EugeneShperl Год назад

    А ты хорош

  • @andriizilnyk4927
    @andriizilnyk4927 2 года назад

    топчик бро, люблю смотреть твои видосики

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Спасибо

    • @andriizilnyk4927
      @andriizilnyk4927 2 года назад

      @@YauhenKavalchuk было б здорово еще упомянуть статические поля и модификатор доступа protected

  • @slavamelanko5992
    @slavamelanko5992 2 года назад

    Немного отсебятины добавлю. Изначально я С++ дев и когда изучал JS, то пытался все делать через ООП. Чуть мозг не сломал 🙂 Как-то не очень получалось даже с ES6 апдейтом. В TS уже лучше. По-моему ООП стоит изучать с С++ (включая Java и C#), но это мое мнение

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Да, в JS ООП очень не похоже на всё остальное, даже с учётом нового синтаксиса классов. А когда узнаешь, что под капотом прототипы, то усё…)

    • @bulsond
      @bulsond 2 года назад

      В С++, Java,. C# - объект и инстанс класса есть одно и тоже. А для Javascript приходиться еще выделять объект в отдельную сущность из-за заложенного в этот язык прототипного наследования. Я согласен с вами полностью, чистое ООП надо начинать изучать не с JS, а именно с Java или C#, которые были изначально спроектированы под данную парадигму. А вот с C++ все сложнее, там заложено множественное наследование, и сам язык все-таки ближе к процедурности чем к ООП.

  • @alekkhalex
    @alekkhalex Год назад

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  Год назад

      Я встречал минимум 3 разных объяснения. А то что вы описали немного похоже на Dimond problem

    • @orionpro79
      @orionpro79 Год назад

      ну вообще да, полиморфизм в js это когда в классе родителя определён метод, и когда в дочернем классе мы переопределяем этот метод , то мы получаем результат для этого дочернего т.е. способность объекта использовать один метод для производных классов, получая разный результат

  • @goodman8044
    @goodman8044 2 года назад

    Ты хороший

  • @andygr1n1
    @andygr1n1 2 года назад

    качественно, спасибо!

  • @oleksandrvoron_ko580
    @oleksandrvoron_ko580 2 года назад

    Принципи ООП класно описано, але в кінці, то вже hight level! Дякую за контент!

  • @ookhands3843
    @ookhands3843 2 года назад +1

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +1

      А напишите прям комментом различия!) Думаю всем будет полезно

  • @alexunder629
    @alexunder629 2 года назад

    Благодарю!

  • @user-gp2vk8xn8t
    @user-gp2vk8xn8t Год назад

    на 8:31 в последней строке будет "Tesla 3 Model - 2019"

  • @evan_kirk
    @evan_kirk 8 месяцев назад

    4:40 А как же перегрузка конструктора? В C# такое есть.

  • @user-bb8ce2fi9l
    @user-bb8ce2fi9l 2 года назад

    Отличное видео

  • @shittywizzard5727
    @shittywizzard5727 2 года назад

    Спасибо!

  • @user-zp9iq1po5o
    @user-zp9iq1po5o Год назад +2

    Функциональное программирование и процедурное программирование не одно и тоже. Функциональное программирование возможно в JS благодаря наличию так называемых "функций первого класса".

  • @stwebbox5691
    @stwebbox5691 Год назад

    Инкапсуляция - это объединение данных и функций в одном объекте, а также сокрытие данных там, где это есть. В js и python нет сокрытия данных

    • @YauhenKavalchuk
      @YauhenKavalchuk  Год назад

      ок

    • @princessmary5556
      @princessmary5556 Год назад

      Нет, объединение данных и методов их обработки - это определение понятия класса, а не инкапсуляции. Кроме того, инкапсуляция ничего ни от кого не скрывыет. Нет такой задачи. Например: приватная секция классов ничего ни от кого не скрывает. Любой желающий может полюбоваться деталями реализации.

  • @JavaScriptcher
    @JavaScriptcher 2 года назад

    #1

  • @zakeck
    @zakeck 2 года назад +1

    No entendí pero sigue así xD

  • @rasplili129
    @rasplili129 2 года назад

    Еще бы на английском найти такое видео , с таким хорошим обьяснением

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      А почему не подходит вариант на русском?

    • @rasplili129
      @rasplili129 2 года назад

      @@YauhenKavalchuk подходит чтобы понять. Но интервью на английсом придется проходить

  • @user-jc7qz6oy2q
    @user-jc7qz6oy2q 2 года назад

    Мб я чего-то не знаю, но вроде как появились в жс рельса, только вроде ещё не всё поддерживает, полифил нужен

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Что-то я не совсем понял о чём вы говорите(

    • @user-jc7qz6oy2q
      @user-jc7qz6oy2q 2 года назад

      @@YauhenKavalchuk про модификаторы в js, # добавили

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Да, добавили, только они даже пока ещё не в стандарте. В следующем году должны добавить

  • @user-ur4sp3vy3b
    @user-ur4sp3vy3b Год назад

    Түсіне алмай жүр едім, мен үшін қиын болып еді,керемет түсіндіріп бердің,үлкен рахмет!

  • @Brinzovik
    @Brinzovik 2 года назад

    Возможно самое понятное видео про ООП
    ООП парадигма инкапсуляция наследование полиморфизм агрегация композиция интерфейс айпскрипт Джаваскрипт js ts typeScript JavaScript

  • @ridl27
    @ridl27 2 года назад

    годно!

  • @huge-s
    @huge-s 2 года назад

    Не многовато О подряд?

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Многовато, но по другому никак

  • @rahimkhatsiev2851
    @rahimkhatsiev2851 2 года назад

    Годно

  • @kirillk5479
    @kirillk5479 2 года назад

    Лойс

  • @alexeikravchuk
    @alexeikravchuk Год назад

    Вроде как понятно, но запутано. 9:13 Через имя класса множно обратиться только к статическим свойствам и методам.

  • @user-us5uf9tt8i
    @user-us5uf9tt8i 2 года назад

    18:55 не классы создаются а экземпляры этих классов. т.е. объекты

  • @fade1186
    @fade1186 3 месяца назад

    Полиморфизм показанн неправильно !
    Не была учтена перегрузка методов что является ключевым моментом в полиморфизме.

    • @YauhenKavalchuk
      @YauhenKavalchuk  3 месяца назад +1

      👍 согласен, есть такой нюанс

  • @Enterprise_IT_support
    @Enterprise_IT_support Год назад

    👍

  • @norwinlol
    @norwinlol 2 года назад

    Топчик

  • @arzievsultan
    @arzievsultan 2 года назад +1

    функциональное программирование ≠ процедурное программирование

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +1

      Об этом уже написали, но не указали отличия

  • @umidullo
    @umidullo 2 года назад

    видео хорошее, но допущено 3 опечатки((
    8:30, 15:20, 20:23

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

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

  • @unhandled_error
    @unhandled_error 2 года назад

    об

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +1

      Да, я знаю правила русского языка, просто сам видеокаст называется «просто о», поэтому и не стал менять

    • @unhandled_error
      @unhandled_error 2 года назад

      @@YauhenKavalchuk я дико извиняюсь, может назвать рубрику "просто про" ?

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +1

      Уже снято 9 выпусков, нет смысла переименовывать

  • @rin2004able
    @rin2004able Год назад

    "Об ООП"

    • @YauhenKavalchuk
      @YauhenKavalchuk  Год назад

      Видеокаст называется «Просто О»

  • @Seacrest.
    @Seacrest. 2 года назад

    Ну блин джаваскрипт это ж скрипт и своей терминологии скрипт это процедура. Все ооп в js это слово this и прототип

  • @Max-cn9po
    @Max-cn9po 2 года назад

    Ничего не понял

  • @user-bu7ut2ys4v
    @user-bu7ut2ys4v 2 года назад

    Видно как у всех, тупо перечитал книгу

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад +3

      Ну попробуйте рассказать то, чего нету в книгах и других аналогичных видео. Я с удовольствием посмотрю, или почитаю

  • @es-gr7qr
    @es-gr7qr 2 года назад

    Как-то много неточностей, часто тест кода просто неправилен или написано лишнее. Дизлайк.

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 года назад

      Пересмотрев видео я заметил только 3 неточности, это много?

    • @es-gr7qr
      @es-gr7qr 2 года назад

      @@YauhenKavalchuk для человека, которых других обучает, это очень много.

  • @scottjenkinsjr
    @scottjenkinsjr 10 дней назад

    в композиции у меня не работает почему-то метод start() для объекта, созданного через new Car(). пишет "undefined".
    если вызывать методы внутренних объектов по отдельности, например engine.start(), то работает.
    в чём же может быть дело?

    • @scottjenkinsjr
      @scottjenkinsjr 10 дней назад

      понял, в чём дело. метод start() срабатывает, но никаких значений не возвращает. ожидал, что вернёт разом всё, что возвращают методы start() всех вложенных объектов: Engine is started, Wiring is started, FuelPump is started

    • @YauhenKavalchuk
      @YauhenKavalchuk  7 дней назад

      Хорошо что разобрались самостоятельно!