Просто о SOLID (Принципы SOLID)

Sdílet
Vložit
  • čas přidán 28. 06. 2024
  • #YauhenK #webDev #ПростоО #SOLID
    Всех приветствую в новом видео касте «Просто о».
    Добро пожаловать в пилотный выпуск нового видеокаста, который я назвал «Просто о».
    В нём я постараюсь простыми словами объяснять сложные вещи, которые можно встретить в программировании и разработке.
    Например, SOLID, CI/CD, Agile, Scrum и Kanban, Mutable и Immutable, Critical Rendering Path, парадигмы ООП и ещё много чего интересного.
    И в сегодняшнем выпуске мы поговорим о таком принципе ООП, как SOLID.
    ✒ Timeline:
    ✔ 0:00 - Введение
    ✔ 0:59 - Общение сведения
    ✔ 2:23 - Принцип единой ответственности
    ✔ 4:42 - Принцип открытости и закрытости
    ✔ 7:16 - Принцип подстановки Барбары Лисков
    ✔ 10:11 - Принцип разделение интерфейсов
    ✔ 12:12 - Принцип инверсии зависимостей
    ✒ Полезные ссылки:
    ✔ Конспект лекции: github.com/YauhenKavalchuk/us...
    ✒ Полный список готовых и планируемых курсов:
    ✔ Trello: trello.com/b/R6rD7qq8
    ✒ Автор курса:
    ✔ CZcams: / yauhenkavalchuk
    ✔ Instagram: / yauhenkavalchuk
    ✔ Twitter: / yauhenkavalchuk
    ✔ VK: YauhenKavalchuk
    ✔ LinkedIn: / yauhenkavalchuk
    ✔ GitHub: github.com/YauhenKavalchuk
    ✔ VK (Группа): webdevcom
    ✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...

Komentáře • 395

  • @alexandrkruglyak
    @alexandrkruglyak Před 4 lety +56

    Принципы SOLID можно изучать вечно и каждый раз познавать что то новое, особенно когда применяешь часто на практике) Спасибо!

  • @user-tz8qo8tk8p
    @user-tz8qo8tk8p Před 4 lety +17

    Евгений выражаю вам мою искреннюю благодарность за ваш труд! Как всегда все коротко, информативно, и разложенно по полочкам, лайк без вопросов!

  • @pavloskuibida6292
    @pavloskuibida6292 Před 3 lety +97

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +7

      🤣

    • @zakharkulbachenko3433
      @zakharkulbachenko3433 Před 3 lety +15

      Сегодня на собеседовании слил этот вопрос) три тим лида ржали с меня

    • @DENDYTWOO
      @DENDYTWOO Před 2 lety

      @@zakharkulbachenko3433 прошел собес?

    • @extrageniuz
      @extrageniuz Před 2 lety +4

      @@DENDYTWOO видимо он умер

    • @immortal_lnight
      @immortal_lnight Před 2 lety +6

      Я ЧУДОМ не зная почти ничего стал Джуниором, сейчас смотрю на остальные вакансии и жёстко дристаю понимая что я почти нихера не знал и попал на работу :). Сейчас хочу выучить ВСЁ по требованиям, набрать коммерческого опыта и жить спокойно

  • @user-qp8bt7gq4b
    @user-qp8bt7gq4b Před 4 lety +3

    Отличное видео. Оно настолько минималистично, насколько это нужно, чтобы быть максимально понятным. Эталон. Спасибо.

  • @user-lu8ul6rr9q
    @user-lu8ul6rr9q Před 4 lety +3

    Спасибо коллега, побольше такого контента и если можно расскажи про CI/CD

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 4 lety

      Это следующее видео в этом плейлисте, проверяй!

  • @engel8486
    @engel8486 Před 4 lety

    Отличное объяснение, хоть и с нюансами некоторыми) спасибо, жду ещё видео такого формата

  • @grommaks
    @grommaks Před 4 lety +32

    Тема крутая. Однозначно лукас :)
    6:27 стрелочная функция getPrice не возвращает цену (нет return)
    10:51 какая цель иметь интерфес с геттерами для все моделей автомобилей. Только недавно на sOlid говорил же что ненадо так делать
    10:50 Класс реализует интерфейс. Интерфейс может наследовать другой интерфейс...
    12:00 Итого мы получили три независимых класса...хотя цель была разделить интерфейсы..
    Условно если у нас есть API ядро, которое ожидало этот класс с тремя методами, то теперь такого больше нет...
    Результат должен был быть
    class Foo implements BarInterface, BazInterface, BazzzInterface { ... }
    При условии что при плохой архитектуре было
    class Foo implements FooInterface { ... }
    где FooInterface это сумма методов и свойст из BarInterface, BazInterface, BazzzInterface
    Все остальное мне понравилось, и примеры интересные

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 4 lety +3

      Спасибо за детальные объяснения нюансов!

    • @12345_qwerty
      @12345_qwerty Před 4 lety +2

      А в инверсии зависимостей так ли нужны два класса XmlHttpService и XmlHttpRequestService? Почему не реализовать один класс абстракцию с реализацией всего что нужно?

    • @grommaks
      @grommaks Před 4 lety +3

      @@12345_qwerty Как я понимаю это был пример, который илюстрировал что зависимость от наследника - плохо.
      В супер классе могла быть логика, и могло быть еще несколько наследников...для примера все упрощено
      Однако с именами классов чересчур напутано...на то он и плохой пример, который нельзя делать в проекте :)

  • @romanhrechuk7775
    @romanhrechuk7775 Před 4 lety

    Спасибо за Ваш труд! Жду с нетерпением следующее видео!

  • @dizelvinable
    @dizelvinable Před 4 lety

    Супер! Много читал/смотрел из разных источников. И мало что понимал. Теперь почти всё понял. Спасибо!)

  • @Demasification
    @Demasification Před 4 lety +11

    Спасибо! Может в будущих видео будет время рассказать о low, high level modules. Пока что нет четкого понятия. Супер что будут уроки по TypeScript!

  • @sea-lucky7143
    @sea-lucky7143 Před 9 měsíci +1

    Спасибо за видео. Было бы прикольно посмотреть все эти принципы в функциональном программирование)

  • @dmitryfokin5205
    @dmitryfokin5205 Před 4 lety +4

    Принцип инверсии зависимостей - хороший принцип, главное не увлекаться уровнями абстракций.

  • @dmytrolambru2984
    @dmytrolambru2984 Před 4 lety +6

    Спасибо большое за видео!
    Можно было бы разбить на короткие, но более подробные видео как с паттернами, но это все мои хотелки ...
    Ждем продолжения серии ! :)

  • @crashoverride9681
    @crashoverride9681 Před 4 lety

    Спасибо!

  • @Jorjeee
    @Jorjeee Před 4 lety +1

    Супер , я вообще не знал что есть такие понятия. Случайно наткнулся та это видео. Спасибо большое))

  • @dmitryfokin5205
    @dmitryfokin5205 Před 4 lety +1

    Принцип подстановки Барбары Лисков - хороший принцип. На практике, обычно, соблюдается сам собой. В голове держать надо.

  • @Elator11777
    @Elator11777 Před 4 lety

    Как раз то, что искал - спасибо!

  • @user-genderZi
    @user-genderZi Před 4 lety

    Классно объяснил! Спасибо. Все очень понятно. Зачот!

  • @Rapterlol
    @Rapterlol Před 4 lety

    Спасибо! Полезная информация!

  • @user-uk3mc9vd3w
    @user-uk3mc9vd3w Před 3 lety

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

  • @quieteroks
    @quieteroks Před 4 lety +93

    Все здорово, но принцип Лисков не раскрыт, как и проблема квадрат прямоугольник. В вашем примере проблема осталась.

    • @user-vd9eu5vh5f
      @user-vd9eu5vh5f Před 4 lety

      Подскажите где посмотреть более корректный пример?

    • @MOLOKOKEFIR
      @MOLOKOKEFIR Před 4 lety

      @@user-vd9eu5vh5f если найдешь скинь пожалуйста)

    • @artemtereza669
      @artemtereza669 Před 4 lety +10

      @@user-vd9eu5vh5f ota-solid.now.sh/

    • @artemtereza669
      @artemtereza669 Před 4 lety +5

      ota-solid.now.sh/

    • @justasid001
      @justasid001 Před 3 lety +1

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

  • @user-ve5xx8dr5l
    @user-ve5xx8dr5l Před 4 lety +1

    Спасибо за полезное видео. Интересно также увидеть как можно реально применить принципы solid в проекте например на react.

    • @user-vk6te2eb4p
      @user-vk6te2eb4p Před 4 lety +1

      Да какой там ооп в реакте? Какой solid? Я уже забыл, когда использовал последний раз слово class в реакте, создавая компонент. Все на функциях и хуках.
      Не, из пальца там, наверное, можно что-то высосать и с умным лицом задвигать об этом, используя непонятные слова.
      Но на реальных проектах в реальном мире, - я вас умоляю.

  • @user-fv3su4yn3i
    @user-fv3su4yn3i Před 3 lety +1

    Мужик, очень здорово объяснил. Чудесная подача материала, ты большой молодец, продолжай в том же духе)
    Успехов!

  • @klyukvach
    @klyukvach Před 28 dny

    спасибо!

  • @albertrain7093
    @albertrain7093 Před 4 lety +120

    Наследовать машины от цены - это ООП курильщика ))) Они не являются ценами, они имеют цены. Соответственно грамотнее будет использовать композицию, или агрегацию вместо наследования :)

    • @dmytrokucheriavyi605
      @dmytrokucheriavyi605 Před 4 lety +4

      а еще лучше , если это Typescript, добавить интерфейс/абстактный клас, который будет содержать метод getPrice.

    • @Skyfauer
      @Skyfauer Před 4 lety +1

      @@dmytrokucheriavyi605 А этого в этом видео разве не делает автор?

    • @alexeybobr4537
      @alexeybobr4537 Před 3 lety +5

      Согласен. Пример с ценами крайне неудачный

    • @user-tq9ho2dp5p
      @user-tq9ho2dp5p Před 3 lety +3

      Это вполне нормальное решение, просто сделано чуть через жопу. В идеале создается интерфейс IPriceProcessable например, у него есть метод getPrice который и реализуется классом. Я правда хз, как с этим обстоят дела в TS.

    • @NonAmericanFood
      @NonAmericanFood Před 3 lety

      @@user-tq9ho2dp5p в твоём случае ты о шарпе, так.

  • @Cleannetcode
    @Cleannetcode Před 3 lety +2

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

  • @Brick87Game87
    @Brick87Game87 Před 4 lety

    Круто, спасибо за видео

  • @eugeniuszjarocki109
    @eugeniuszjarocki109 Před 4 lety +7

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

  • @vadimm3077
    @vadimm3077 Před 4 lety

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

  • @user-wz1tn7fn4s
    @user-wz1tn7fn4s Před 4 lety +4

    Спасибо, очень круто, думаю на repeat будет долго))) про ооп было бы тоже не плохо в таком формате:) огромное спасибо!

  • @CrueL54
    @CrueL54 Před 2 lety +1

    Спасибо за видео, отличное объяснение.

  • @eugenekuzmin4825
    @eugenekuzmin4825 Před 2 lety

    Особлива подяка за приклади на TS

  • @blagumur.kratos
    @blagumur.kratos Před 2 lety

    Просто и понятно, супер пояснение, спасибо!

  • @teamplay5921
    @teamplay5921 Před 4 lety +1

    Понравилось, спасибо! Лисков немного подкачал.... палец вверх!

  • @user-jr5hw4gx1y
    @user-jr5hw4gx1y Před 3 lety

    Спасибо, очень коротко, доступно и понятно

  • @sanyastorm
    @sanyastorm Před 4 lety

    Супер
    Коротко и ясно
    Спасибо

  • @alexaxenov974
    @alexaxenov974 Před 3 lety

    Очень качественное обьяснение спасибо огромное !!!)))

  • @Ledrunning
    @Ledrunning Před rokem

    Классное видео! Спасибо за работу!

  • @fisherenok
    @fisherenok Před 4 lety

    Как всегда годно)

  • @sanzharabdurahmanov5082

    Идеально понятное объяснение принципа SOLID, оргомнейший лайкос !!!

  • @sergeyivanov3351
    @sergeyivanov3351 Před 4 lety +15

    "Реально хочу надеяться..." клевый оборот речи

  • @PC-mv5jj
    @PC-mv5jj Před rokem

    👍

  • @dsalodki
    @dsalodki Před 4 lety +5

    действительно просто, подписчиков мало
    ещё бы разобрать grasp и gof

    • @SlavaCh
      @SlavaCh Před 4 lety

      Нормально подписчиков для it канала, очень хороший результат

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n Před 3 lety

    Спасибо большое! Поскольку я не знаю языка, на котором были примеры, то понятными для меня оказались лишь первые два принципа. Но, и на этом большое спасибо!

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Пожалуйста. Язык TypeScript - он просто добавляет типизацию

  • @awwwesoman
    @awwwesoman Před rokem

    Спасибо за классный разбор принципов SOLID

  • @denisklyachenko292
    @denisklyachenko292 Před 4 lety +1

    Очень неплохо. OCP вроде немного не о том, этот принцип говорит о том, что некоторые модули, чье API используется другими, должны закрываться для изменения, чтобы не влиять на тех, кто его использует. LSP - это из области контрактного программирования, если по-простому, то наследники должны расширять базовый класс, а не сужать или изменять его. Кстати, если квадрат и прямоугольник будут неизменяемыми, то наследование возможно. Для понимания SRP неплохо прочитать про Low coupling/ High cohesion, т.к. SRP именно эти принципы пытается описать другими словами.

  • @yuriiabramovych1400
    @yuriiabramovych1400 Před 4 lety

    Спасибо, ждем следующий видео))

  • @MartinEden-ps6ld
    @MartinEden-ps6ld Před 2 lety

    за теслу лайк) А объяснение очень компатное и понятное, спасибо)

  • @bigdnotation
    @bigdnotation Před 2 lety

    Спасибо, всё предельно понятно)

  • @user-nc7zt9rj9e
    @user-nc7zt9rj9e Před 4 lety

    И все таки спасибо мне как раз для собеседования и нужно было хоть какое то представление иметь))

  • @O_Hat
    @O_Hat Před rokem

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

  • @t3m8ch79
    @t3m8ch79 Před 4 lety

    Отличный и понятный ролик

  • @SochnayaShaurma
    @SochnayaShaurma Před 4 lety +5

    Ничего не понятно, но очень интересно. Видимо я один тут плохо понимаю объяснение. Судя по всему надо ООП в js хорошо знать.

    • @alexandertarasenko3038
      @alexandertarasenko3038 Před 4 lety +1

      OOP в JS? :D

    • @andriikrashivskiy7140
      @andriikrashivskiy7140 Před 4 lety +2

      в чистом js нет понимания интерфейсов и абстракции. Typescript - это мощь, синтаксис учится буквально за пару дней, а с ним ООП станет намного понятнее и ближе

  • @zeb2296
    @zeb2296 Před rokem

    Отлично объяснил. Спасибо!

  • @user-lf7mp6fv1u
    @user-lf7mp6fv1u Před 4 lety

    спасибо, то что нужно

  • @Andrew-strong
    @Andrew-strong Před 4 lety +2

    Спасибо! Очень круто! Наберусь наглости и нескромно спрошу: а по SSR (в частности по Next.js) у тебя нет планов на курс?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 4 lety +3

      Есть, возможно, даже в этом году появится курс

  • @user-ez2yf3yd3z
    @user-ez2yf3yd3z Před 2 lety

    OK!

  • @ercefwxdx
    @ercefwxdx Před rokem

    Дякую

  • @user-qb5cj6px7q
    @user-qb5cj6px7q Před rokem

    Спасибо, интересно послушать о solid с примерами на родном js)

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem +1

      Я ж объяснил в самом начале, почему описанные подходы проблематично показывать на JS). Там везде только объекты, максимум класс. Ни абстракций, ни интерфейсов

    • @user-qb5cj6px7q
      @user-qb5cj6px7q Před rokem

      @@YauhenKavalchuk , имел ввиду typescript, конечно. Спасибо, что поправили

  • @sainco3036
    @sainco3036 Před 4 lety

    Спасибо.

  • @alex330k47
    @alex330k47 Před 3 lety +1

    Для демонстрации принцыпа подстановки Лисков используется крайне спорный пример, обсуждаемый во многих форумах. Главная претензия к этому примеру в том, что нельзя наследовать квадрат от прямоугольника так как они используют разные параметры. От сюда вытекает нарушение принцыпа Лисков, так как методы использующие прямоугольник не подходят (без модефикаций) к Квадрату

  • @user-ei9jd7pw4s
    @user-ei9jd7pw4s Před rokem

    Спасибо огромное!

  • @sfiirwuejnn
    @sfiirwuejnn Před 3 lety

    В Liskov subtitution подразумевается же, что класс-наследник не должен менять при переопределении поведение метода родительского класса

  • @Epenckorn
    @Epenckorn Před 4 lety +4

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

    • @wickedtorpedo75
      @wickedtorpedo75 Před rokem

      самый лучший примеры для таких принципов слишком сложны для понимание к примеру исходные коды фреймворов Laravel и Symfony и они в открытом доступе, просто наследуешь базовой контроллер и твой контроллер превращается в супер мутант монстра который способен на все, аналогично работает все компоненты этих фреймворков

  • @evisotskiydev
    @evisotskiydev Před 4 lety +1

    Да, принцип подстановки Лисков всё-равно не понял. Но в любом случае, спасибо за старания

  • @temirlanalmassov9408
    @temirlanalmassov9408 Před 2 lety

    Отличное видео, вкратце и понятно, но думаю разрабам с низким уровнем будет сложновато, и возможно стоит посмотреть более подробный разбор принципов

  • @user-tg1yr1dt4n
    @user-tg1yr1dt4n Před 2 lety

    Готовлюсь к собеседованию и такие видео очень сильно помогают огромное спасибо

  • @backend1937
    @backend1937 Před 4 lety

    У вас очень крутой канал, спасибо за ваш труд.
    У меня возник такой вопрос: В примере Open-closed, функция getPrice изначально выводила цену конкретного автомобиля, после применения на ней рефакторинга, метод стал выводить цены всех автомобилей, а как применить open-closed к задаче с выводом конкретной цены автомобиля?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 4 lety

      А зачем вам тогда функция? У вас есть класс, который уже отдаёт цену

  • @Ingvarsson-Ukr
    @Ingvarsson-Ukr Před rokem

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

  • @user-rg5wh3fx2q
    @user-rg5wh3fx2q Před 4 lety +1

    Спасибо за видио, с меня лайк.
    Если вы пишите в TS interface, вы ведь просто делаете описание данных, и когда создаете сущности показываете чему они должны соответствовать, в противном случае ts начнет ругаться. Не совсем понял почему мы имплементируемся в классах от интерфейса

    • @dmitry.gashko
      @dmitry.gashko Před 4 lety +1

      Вы как раз описали почему)
      Интерфейсы это в первую очередь "описание интерфейса", и по класике их кроме как с классами и не использовать. Это в ts можно просто сказать, что какой-то объект имплементирует какой-то интерфейс

  • @romanbush5164
    @romanbush5164 Před 2 lety +1

    Принцыпы сухпайка)

  • @Fioletka_YT
    @Fioletka_YT Před 2 lety

    крутой

  • @yaroslavsvitlitskyi1864

    Спасибо за видео

  • @demidovmaxim1008
    @demidovmaxim1008 Před 4 lety

    Спасибо

  • @artyomovanton
    @artyomovanton Před 7 měsíci

    13:55 оговорка про реализацию в интерфейсе

  • @vskovzgird
    @vskovzgird Před 8 měsíci

    Хорошее объяснение. Не зная тайп скрипт я даже всё понял. Про OCP только поверхностно. Как расширять классы не рассказал

  • @aleksandrHz
    @aleksandrHz Před 4 lety

    Основы чистой архитектуры

  • @nadianoirnp
    @nadianoirnp Před 3 lety

    Женя, какие есть идеи по применению SOLID принципов относительно чистого JavaScript, а не TypeScript ? нет интерфейсов, есть прототипы, ну и классы как синтаксический сахар. Однако очень требуется SOLID )

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Ну нет интерфейсов, это не проблема. Используйте всё с классами)

  • @rikkicase
    @rikkicase Před 4 lety +13

    9:52 в итоге проблема с 9:30 ведь осталась.

    • @user-vd9eu5vh5f
      @user-vd9eu5vh5f Před 4 lety

      Подскажите где посмотреть более корректный пример?

    • @user-iq5gz2rd9w
      @user-iq5gz2rd9w Před 4 lety

      @@user-vd9eu5vh5f В wikipedia идеальное описание этого принципа

  • @vladakymov2123
    @vladakymov2123 Před 3 lety

    Спасибо, Чувак!

  • @yuriiabramovych1400
    @yuriiabramovych1400 Před 4 lety

    Не думали о том, чтобы выпускать курсы на udemy? У вас отлично получается)

  • @raul_duken
    @raul_duken Před rokem

    Подскажиье. 2 пригцип. Если не создавать интерфейс, а в класс ауто добавить ф-ю getPrice(), которая возвращала бы цену, заданую в конструкторе при создании new Auto(name, price). Это можно считать теми же я только в профиль, или есть ращница? Спасибо

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem

      Ну по сути можно, но это уже нарушает принцип ООП об абстракции

  • @vr4836
    @vr4836 Před 2 lety

    Невероятно !! )

  • @markostr
    @markostr Před 6 měsíci

    огромное спасибо!

  • @iharbakhanovich
    @iharbakhanovich Před 4 lety

    Хороший видос

  • @JavaScriptcher
    @JavaScriptcher Před 2 lety

    Предлагаю тему к следующему видео: Просто о шаблоне MVC

  • @user-kp7mt1qr8r
    @user-kp7mt1qr8r Před 3 lety

    10:21 Сущности не должны зависеть от интерфейсов , которые они используют? Или которые не используют? Или которые они не используют?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      сущности НЕ должны зависеть от интерфейсов, которые НЕ используют

  • @Gelen794
    @Gelen794 Před 3 lety

    Я не понял проблематику которая затрагивалась в примере принципа Барбары Лисков.
    У нас есть класс прямоугольника и класс квадрата, и если мы отдадим инстанс класса квадрата в функцию changeShapeSize. То как вообще интерфейс решит проблему того, что в квадрате будут меняться сразу и высота и ширина?

  • @crashbandi584
    @crashbandi584 Před 2 lety

    You did a great job 👍

  • @denisbielishev
    @denisbielishev Před 2 lety

    Про grasp ещё можно рассказать

  • @andreygokhan6893
    @andreygokhan6893 Před 4 lety

    А в javascript есть что-то похожее на interface и implement или есть какой-то способ их имитации?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 4 lety +1

      Нет. В JS это всё классы

    • @GreyFoxTube
      @GreyFoxTube Před 4 lety

      Javascript динамически типизированный язык, и соответственно интерфейсы там не нужны / не реализуемы. Те цели которые достигаются посредством интерфейсов, а это лёгкое тестирование и другие о которых говорил автор, для JS не является проблемой. Динамическая природа JS одновременно и сила и слабость

    • @andreygokhan6893
      @andreygokhan6893 Před 4 lety

      @@GreyFoxTube То что интерфейсы в javascript не реализуемы - согласен, а то что не нужны - сомневаюсь. Наверно было бы неплохо знать набор интерфейсов, которым следует объект, чтобы точно знать, что в данном объекте необходимые методы точно реализованы и их можно вызывать. Например, если у этого объекта класса Car есть интерфейс "плавание", то значит инкапсулировано свойство герметичность и реализован и доступен метод плыть(). А если есть интерфейс "полёт" ...

    • @GreyFoxTube
      @GreyFoxTube Před 4 lety

      @@andreygokhan6893, я лично согласен, что динамически типизированным языкам не хватает строгости. Но в целом, в индустрии разработки, где используются динамически типизированные языки, прибегают к соглашениям (конвенциям) в компании и частично обходятся линтерами. Без компиляторов и статических анализаторов, конечно, не так эффективно. Тем не менее работают

  • @Radik7159
    @Radik7159 Před 4 lety

    13:08 прошупрощения, не понимаю почему в параметры конструктура передается интерфейс с модификатором private

    • @whins
      @whins Před 4 lety

      kendaleiv.com/typescript-constructor-assignment-public-and-private-keywords/

  • @dmitryfokin5205
    @dmitryfokin5205 Před 4 lety +1

    Принцип открытости и закрытости - тут нужно ловить баланс. Пример, изменился функционал цены, что лучше? Бегать по всем классам и изменять? Или, как в "неправильном примере", в одном классе в одной функции поменять. Очень сложный вопрос! Если функционал сложный и имеет множество условий в плоть до комбинаторики, то лучше разнести по классам. Если логика попроще, лучше запихнуть в один класс. Еще ошибка - решать данный принцип классами, а не структурой данных. В правильном примере зачем создавать кучу классов? Когда можно решить вопрос объектом содержащим все цены с ключами ссылками, при этом цикл гонять не надо {audi:{tradePrice:100, retailPrice:200}, bmw:{tradePrice:150, retailPrice:250}}. Ну и принцип O противоречит принципу S разбивая функциональность на несколько классов.

  • @cherimolah9493
    @cherimolah9493 Před 2 lety

    6:24 почему нельзя сделать класс, в котором атрибутами объекта будут являться название и цена? Массив соответственно будет из инстансов этого класса. Функция будет забирать значение цены из атрибута

  • @eugeniyseliverstov1998

    Как можно установить такой же стиль оформления кода для VS Code. Кто знает, подскажите, плиз)

  • @kl45gp
    @kl45gp Před 2 lety

    О Г О Н Ь !

  • @yuryzhuravlev2312
    @yuryzhuravlev2312 Před 3 lety

    Самое интересное что если отказаться от TS обратно к JS то это все будет не нужно. )))
    Статическая типизация - напридумывали себе проблем а потом героически боремся с ними.

  • @alex330k47
    @alex330k47 Před 3 lety +1

    10:00 в коде ошибка, написано
    interface Figure {
    setWidth(width: number): void;
    setHeight(width: number):void;
    }
    А должно быть setHeight(height: number): void;

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +1

      Да, пропустил( Исправлю в репозитории

  • @user-ri7gb2gs9z
    @user-ri7gb2gs9z Před 4 lety +1

    Начало 1:48

  • @olegpristashkin9078
    @olegpristashkin9078 Před 3 lety

    А вот по принципу Single Responsibility, сколько методов может содержать класс?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Сколько угодно, ограничений нет. Главное что-бы класться отвечал за что-то одно