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

Поділитися
Вставка
  • Опубліковано 28 гру 2024

КОМЕНТАРІ • 407

  • @alexandrkruglyak
    @alexandrkruglyak 4 роки тому +58

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

  • @pavloskuibida6292
    @pavloskuibida6292 3 роки тому +108

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  3 роки тому +7

      🤣

    • @zakharkulbachenko3433
      @zakharkulbachenko3433 3 роки тому +16

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

    • @DENDYTWOO
      @DENDYTWOO 3 роки тому

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

    • @extrageniuz
      @extrageniuz 3 роки тому +5

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

    • @immortal_lnight
      @immortal_lnight 2 роки тому +6

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

  • @sea-lucky7143
    @sea-lucky7143 Рік тому +1

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

  • @АлексейЕфимов-к4о
    @АлексейЕфимов-к4о 5 років тому +18

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

  • @grommaks
    @grommaks 5 років тому +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  5 років тому +3

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

    • @12345_qwerty
      @12345_qwerty 4 роки тому +2

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

    • @grommaks
      @grommaks 4 роки тому +3

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

  • @dmitryfokin5205
    @dmitryfokin5205 4 роки тому +4

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

  • @ЕгорФедоренко-с2щ
    @ЕгорФедоренко-с2щ 4 роки тому +3

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

  • @СергейК-б9е
    @СергейК-б9е 4 роки тому +3

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  4 роки тому

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

  • @eugenekuzmin4825
    @eugenekuzmin4825 2 роки тому

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

  • @dmitryfokin5205
    @dmitryfokin5205 4 роки тому +1

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

  • @256b
    @256b 3 місяці тому

    Благодарю. Хорошее объяснение.

  • @albertrain7093
    @albertrain7093 4 роки тому +120

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

    • @dmytrokucheriavyi605
      @dmytrokucheriavyi605 4 роки тому +4

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

    • @Skyfauer
      @Skyfauer 4 роки тому +1

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

    • @alexeybobr4537
      @alexeybobr4537 4 роки тому +5

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

    • @ИванКрасуля-г5ы
      @ИванКрасуля-г5ы 4 роки тому +3

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

    • @NonAmericanFood
      @NonAmericanFood 4 роки тому

      @@ИванКрасуля-г5ы в твоём случае ты о шарпе, так.

  • @Demasification
    @Demasification 5 років тому +12

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

  • @quieteroks
    @quieteroks 5 років тому +95

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

    • @АлександрКундрюков-и7с
      @АлександрКундрюков-и7с 4 роки тому

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

    • @MOLOKOKEFIR
      @MOLOKOKEFIR 4 роки тому

      @@АлександрКундрюков-и7с если найдешь скинь пожалуйста)

    • @artemtereza669
      @artemtereza669 4 роки тому +10

      @@АлександрКундрюков-и7с ota-solid.now.sh/

    • @artemtereza669
      @artemtereza669 4 роки тому +5

      ota-solid.now.sh/

    • @justasid001
      @justasid001 4 роки тому +1

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

  • @ВасилийВасильев-ш4т

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  3 роки тому

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

  • @grolcoon8798
    @grolcoon8798 2 роки тому

    спасибо)

  • @ВладимирЗайчиков-т6и

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

  • @eugeniuszjarocki109
    @eugeniuszjarocki109 5 років тому +7

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

  • @denisklyachenko292
    @denisklyachenko292 4 роки тому +1

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

  • @CrueL54
    @CrueL54 3 роки тому +1

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

  • @Cleannetcode
    @Cleannetcode 4 роки тому +2

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

  • @ЯрославВапничний
    @ЯрославВапничний 5 років тому +1

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

    • @user-vk6te2eb4p
      @user-vk6te2eb4p 4 роки тому +1

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

  • @IvanFedulov
    @IvanFedulov 5 місяців тому

    6:32 надеюсь у вас опечатка. ф-я getPrice принимает только каталог машин, и во-первых, у нее нет аргумента определающего фильтр. во-вторых ф-я ничего не возвращает, просто в цикле вызывает геттер класса CarPrice. как к этому относиться?

  • @РоманКазаченко-ю4ю
    @РоманКазаченко-ю4ю 3 роки тому +1

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

  • @O_Hat
    @O_Hat 2 роки тому

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

  • @ЕрвандАгаджанян-в3к

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  3 роки тому

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

  • @temirlanalmassov9408
    @temirlanalmassov9408 2 роки тому

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

  • @alex330k47
    @alex330k47 3 роки тому +1

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

  • @АлексейТишаков-с1ц
    @АлексейТишаков-с1ц Місяць тому

    спаибо весьма позновательно. У меня вот вопрос по ' O ' , а можно ли считать реализацию декораторов в тс и native декоратор в жс реализацией данного пункта ?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Місяць тому

      Я скажу так, по описанию похоже, но концептуально немного другое

  • @dizelvinable
    @dizelvinable 4 роки тому

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

  • @alexaxenov974
    @alexaxenov974 4 роки тому

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

  • @АндрейКолмогоров-б9ы

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

  • @Ledrunning
    @Ledrunning 2 роки тому

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

  • @Gelen794
    @Gelen794 3 роки тому

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

  • @sanzharabdurahmanov5082
    @sanzharabdurahmanov5082 2 роки тому

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

  • @Jorjeee
    @Jorjeee 4 роки тому +1

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

  • @SochnayaShaurma
    @SochnayaShaurma 5 років тому +5

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

    • @alexandertarasenko3038
      @alexandertarasenko3038 4 роки тому +1

      OOP в JS? :D

    • @andriikrashivskiy7140
      @andriikrashivskiy7140 4 роки тому +2

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

  • @raul_duken
    @raul_duken Рік тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  Рік тому

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

  • @blagumur.kratos
    @blagumur.kratos 3 роки тому

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

  • @devcrghome7061
    @devcrghome7061 4 роки тому +1

    SOLID противоречит KISS
    и как их совместить?

    • @YauhenKavalchuk
      @YauhenKavalchuk  4 роки тому

      Никак. Различные принципа - это лишь рекомендации, которые периодически могут противоречить. Всё не применить)

  • @romanhrechuk7775
    @romanhrechuk7775 4 роки тому

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

  • @Epenckorn
    @Epenckorn 4 роки тому +4

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

    • @wickedtorpedo75
      @wickedtorpedo75 2 роки тому

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

  • @zeb2296
    @zeb2296 2 роки тому

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

  • @vskovzgird
    @vskovzgird Рік тому

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

  • @bigdnotation
    @bigdnotation 2 роки тому

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

  • @vadimm3077
    @vadimm3077 4 роки тому

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

  • @awwwesoman
    @awwwesoman 2 роки тому

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

  • @dmytrolambru2984
    @dmytrolambru2984 5 років тому +6

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

  • @sergiopuccini
    @sergiopuccini 4 роки тому +15

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

  • @engel8486
    @engel8486 5 років тому

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

  • @teamplay5921
    @teamplay5921 4 роки тому +1

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

  • @MartinEden-ps6ld
    @MartinEden-ps6ld 2 роки тому

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

  • @sanyastorm
    @sanyastorm 4 роки тому

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

  • @kerimamanov7760
    @kerimamanov7760 4 роки тому

    Zdorovo!
    Tol'ko u menya voprosov stalo bol'she?

  • @romanbush5164
    @romanbush5164 3 роки тому +1

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

  • @dsalodki
    @dsalodki 5 років тому +5

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

    • @SlavaCh
      @SlavaCh 5 років тому

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

  • @Arman_127
    @Arman_127 2 роки тому

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

  • @ПолдиСинтин
    @ПолдиСинтин 4 роки тому

    А зачем на скриншоты листингов приклеен какой-то светофорчик вверху?

  • @t3m8ch79
    @t3m8ch79 5 років тому

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

  • @vr4836
    @vr4836 3 роки тому

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

  • @Elator11777
    @Elator11777 4 роки тому

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

  • @Ingvarsson-Ukr
    @Ingvarsson-Ukr Рік тому

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

  • @JavaScriptcher
    @JavaScriptcher 3 роки тому

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

  • @leoabalckin8270
    @leoabalckin8270 Рік тому

    У меня вопрос насчет принципа единственной ответственности (кстати, слова "единый" и "единственный" - паронимы, я бы не стал их взаимозаменять).
    Итак,
    "2:20 - итак принцип единой ответственности звучит он как у модуля должна быть только одна причина для изменения или класс должен отвечать только за что-то одно".
    А вот цитата из Роберта Мартина "Чистая архитектура":
    "Из всех принципов SOLID наиболее трудно понимаемым является прин цип единственной ответственности (Single Responsibility Principle, SRP). Это, вероятно, обусловлено выбором названия, недостаточно точно соот ветствующего сути. Услышав это название, многие программисты решают: оно означает, или класс должен отвечать только за что-то одно".
    Самое интересное, что такой принцип действительно существует. Он гласит: функция должна делать что-то одно и только одно. Этот принцип мы исполь зуем, когда делим большие функции на меньшие, то есть на более низком уровне. Но он не является одним из принципов SOLID - это не принцип единственной ответственности."
    Тут возникает сразу несколько вопросов, и самый первый - кому же верить?

  • @user-genderZi
    @user-genderZi 5 років тому

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

  • @КоляСолдат
    @КоляСолдат Рік тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  Рік тому +1

      Решил не усложнять дополнительной абстракцией

  • @eugeniar7101
    @eugeniar7101 4 роки тому +1

    5:36 вообще не понимаю суть функции
    по всему циклу же не пройдет, на первом же єлементе попадет либо в case, которьій подходит, либо в default
    откуда сразу же return
    вообще не поняла смьісл

  • @dmitryfokin5205
    @dmitryfokin5205 4 роки тому +1

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

  • @user-ei9jd7pw4s
    @user-ei9jd7pw4s 2 роки тому

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

  • @ПетрИльяш-ь6з
    @ПетрИльяш-ь6з 2 роки тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 роки тому +1

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

    • @ПетрИльяш-ь6з
      @ПетрИльяш-ь6з 2 роки тому

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

  • @yuriytheone
    @yuriytheone Рік тому

    4:00 и ещё переписать весь код, который работал со старым классом... 🎉
    Вообще, твоё объяснение SOLID самое лучшее в русском сегменте... Видно, что ты знаешь о чем рассказываешь в отличие от дебила Серёжи немчинского, например... От меня лайк. Спасибо!

  • @Rapterlol
    @Rapterlol 5 років тому

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

  • @lexflex8677
    @lexflex8677 Рік тому

    А что за музыка на фоне в начале?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Рік тому

      Уже не помню, что-то из медиатеки UA-cam

    • @lexflex8677
      @lexflex8677 Рік тому

      @@YauhenKavalchuk 😢

  • @МаксКондратенко-ц2е
    @МаксКондратенко-ц2е 5 років тому +1

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

    • @dmitry.gashko
      @dmitry.gashko 5 років тому +1

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

  • @ФлексГрид
    @ФлексГрид 3 роки тому

    Получается класс Rectangle ( в примере принципа Барбары Лисков ) противоречит принципу единственной ответственности? Ведь у него как минимум 3 метода для изменения

    • @YauhenKavalchuk
      @YauhenKavalchuk  3 роки тому

      И кстати это вполне нормальная ситуация когда сделав код по одному принципу, конфликтуешь с другим. Но в примере противоречия нет - все 3 метода работают с параметрами одной сущности и нет каких-то «левых» манипуляций

    • @ФлексГрид
      @ФлексГрид 3 роки тому

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

  • @olegpristashkin9078
    @olegpristashkin9078 4 роки тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  4 роки тому

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

  • @Radik7159
    @Radik7159 4 роки тому

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

    • @whins
      @whins 4 роки тому

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

  • @denisbielishev
    @denisbielishev 3 роки тому

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

  • @PC-mv5jj
    @PC-mv5jj Рік тому

    👍

  • @andreygokhan6893
    @andreygokhan6893 5 років тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  5 років тому +1

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

    • @GreyFoxTube
      @GreyFoxTube 4 роки тому

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

    • @andreygokhan6893
      @andreygokhan6893 4 роки тому

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

    • @GreyFoxTube
      @GreyFoxTube 4 роки тому

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

  • @ТуралИскендерли
    @ТуралИскендерли 4 роки тому

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

  • @alex330k47
    @alex330k47 3 роки тому +1

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  3 роки тому +1

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

  • @flashbackmovie8792
    @flashbackmovie8792 3 роки тому

    Вроде все так знакомо, но синтаксис какой-то непонятный ... не C++ ли это часом?

  • @O_Hat
    @O_Hat Рік тому

    Принцип подстановки Барбары Лисков.
    Я бы изобразил абстракцию реализовав в ней метод расчета площади и от неё наследовался бы, реализуя метод установки ширины и высоты.
    Вопрос. Это же тоже сохраняет принцип подстановки. Нет?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Рік тому

      Если я правильно понял описание, то нет

  • @yaroslavsvitlitskyi1864
    @yaroslavsvitlitskyi1864 3 роки тому

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

  • @andrerussian4016
    @andrerussian4016 2 роки тому

    Пример с квадратом считаю "высосанным из пальца"\некорректным
    В функции setWidth можно было сделать "пустое" тело, у функции setHeight сделать только this.height = height, а также переопределить функцию areaOf: areaOf() { return this.height * this.height}
    Тогда никаких ошибок бы не возникло

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 роки тому +1

      Возможно… но это самый распространённый пример

  • @vladyan01
    @vladyan01 2 роки тому

    Вот вроде бы понимаю все, но при написании программы не могу применять этот ООП, выходит процедурный способ всегда

  • @ercefwxdx
    @ercefwxdx 2 роки тому

    Дякую

  • @bierenika
    @bierenika 4 роки тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  4 роки тому

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

  • @sfiirwuejnn
    @sfiirwuejnn 4 роки тому

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

  • @Евгений-у2е8ы
    @Евгений-у2е8ы 5 років тому +4

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

  • @Brick87Game87
    @Brick87Game87 5 років тому

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

  • @yuripalienko6259
    @yuripalienko6259 3 роки тому

    это typescript?

  • @backend1937
    @backend1937 5 років тому

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  5 років тому

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

  • @MrSevenZZZ
    @MrSevenZZZ 3 роки тому

    В примере про общий интерфейс у фигуры не должно быть установки ширины и высоты, фигура может быть и окружность и треугольник. Там должен быть только метод получения площади.

  • @cherimolah9493
    @cherimolah9493 2 роки тому

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

  • @Wivern11
    @Wivern11 Рік тому

    11:53 проще сделать AutoSet с единственным методом set()

  • @soversus5374
    @soversus5374 4 роки тому +1

    Класс для каждого типа авто? Даже не знаю, стоит ли дальше смотреть...

  • @Max-kr4ie
    @Max-kr4ie 5 років тому

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

  • @A.Floatrx
    @A.Floatrx 2 роки тому

    "L": не сразу понял, но потом дошло! совместимость это да, это правильно! гласное не нарушать при этом "S" (не штамповать "универсальных солдат" в коде)!