Пять принципов SOLID с примерами на Java

Поделиться
HTML-код
  • Опубликовано: 20 дек 2024

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

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

    Это самое прекрасное объяснение SOLID, которое я когда-либо видел!

  • @wivernx9449
    @wivernx9449 Месяц назад +1

    Шикарное объяснение, спасибо!

  • @Николай-х3б4ф
    @Николай-х3б4ф 8 месяцев назад +8

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

  • @ivmmos
    @ivmmos Год назад +5

    Однозначно недооцененный лайками ролик. Благодарность автору!

  • @ALEXZANDR_GAMES
    @ALEXZANDR_GAMES 2 месяца назад +1

    Автор молодец! 👍 Объясняет просто и доходчиво(но достаточно подробно).
    Лайк и подписка однозначно.

  • @profesor2009
    @profesor2009 Год назад +17

    04:12 Принцип единственной ответственности
    13:26 Принцип открытости-закрытости
    20:48 Принцип подстановки Барбары Лисков
    27:09 Разделение интерфейса
    32:20 Принцип инверсии зависимости

  • @dmitrelkin9256
    @dmitrelkin9256 2 года назад +23

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

  • @eron
    @eron 2 года назад +15

    Супер, отличное объяснения принципов SOLID, на отличных понятных примерах. Спасибо большое!

  • @skyx5691
    @skyx5691 9 месяцев назад +4

    Даже сам мой кайф получил кайф от этого видео! 🎉Сергей, осторожно, так нельзя ! Ваши видео слишком кайфовые! Я чуть не начал биться в конвульсиях от кайфа при просмотре!!!
    Если серьёзно то спасибо Вам огромное за то как доходчиво, ясно и приятно Вы всё объясняете! Огромная благодарность и уважение Вам!

  • @pavelbbb
    @pavelbbb Год назад +3

    В джава есть не только интерфейсы, но и абстрактные классы, но за урок спасибо.

  • @Мишаня-в7ф
    @Мишаня-в7ф 10 месяцев назад

    Серёга рассказывает как солит и не испортить свой проект 😂. Классное видео! Благодарю! Серьезно, очень ему благодарен- очень многому научился по его видео и курсам! Здоровья тебе, уважаемый Сергей. Уважаю тебя, Человечище!!! 🤝🙂

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

    посмотрел весь курс ООП. лучший канал, с ПОНЯТНОЙ информацией. Буду смотреть теперь другие плейлисты канала и преисполняться в своем познании))))

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

    Это просто классно. Взаимодействие классов примеры отличные. Побольше таких уроков. СПАСИБО

  • @wEssyy_Wsyy
    @wEssyy_Wsyy 11 месяцев назад +1

    Друг мой, ты вообще классно все обьяснил

  • @andredru4278
    @andredru4278 9 месяцев назад +1

    Спасибо. Познавательно и доступно.

  • @revillnik1092
    @revillnik1092 11 месяцев назад +1

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

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

    Вот это супер полезное видео! А я как раз дошел до того, что начал задумываться о правильном построение ПО! Спасибо!

  • @taran_dm
    @taran_dm Месяц назад

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

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

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

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

    Очень доступное объяснение принципов.

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

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

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

    Эталон обучающей информации!

  • @Hellen-qx3lb
    @Hellen-qx3lb 9 месяцев назад +1

    Очень хорошее объяснение

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

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

  • @navalenstar
    @navalenstar Год назад +2

    Спасибо за видио - это и остальные - приятная подача - приятно смотреть) А теперь немного критики - класс лучше назвать не SaveComputer а ComputerSaver или ComputerStorage - должно быть существительное, т.к. в человеческом языкие именно существительные обозначают объекты мира которые мы моделируем с помощью классов. И когда не получается придумать нормальное название для класса это часто признак что с классом чтото не так (например он перегружен ответственностью)

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

    спасибо большое, очень полезный канал

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

    Самое понятное объяснение этих принципов. Спасибо за видео!)

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

    Идеально, спасибо огромное!
    Я понял. И кажется понял нафига оно надо. Постараюсь сделать свой код лучше.

  • @ЖекаКабанов-э6ь
    @ЖекаКабанов-э6ь 2 года назад +2

    Буковки для продвижения. Автор красавчик.

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

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

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

    Спасибо! Это лучшее объяснение из всех, которые я видел!

  • @ДмитрийСергеев-л6г
    @ДмитрийСергеев-л6г 2 года назад +1

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

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

    Хорошее объяснение. Все четко и доходчиво.

  • @d1ns_799
    @d1ns_799 5 месяцев назад +1

    Очень хорошее видео, познавательное, но учить новичков тому, что интерфейс = абстрактный класс - НЕ хорошо! Если это кто-то читает, то основное (главное) отличие абстрактного класса от интерфейса - это state. У абстрактного класса может быть состояние, у интерфейса - нет. За видео поставил лайк!

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

    Спасибо, все наглядно и понятно!

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

    Замечательный голос и содержание видео !

  • @ДмитрийСергеев-л6г
    @ДмитрийСергеев-л6г 2 года назад +3

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

  • @fomka_wyverno
    @fomka_wyverno Год назад +2

    19:00 так, а зачем для того что бы сохранить в БД путь к файлу? - А если допустим в облако, то нужно ещё дополнительные данные, тогда или просто убрать нужно path с аргумента интерфейса. Потому что для разных типов сейвов/лоадов нужны свои доданые фишки.
    Тогда вердикт такой что в методе должен быть только Компютер класс, но ни как не путь к файлу, так как это уже часть для самого сейвера который реализует только сейв в файл, а для дб и для облока, он не нужен

  • @АлексейПротасов-п6э
    @АлексейПротасов-п6э 2 года назад +7

    Лайк не глядя)

  • @ДмитрийНувахов
    @ДмитрийНувахов Год назад +1

    Лучшее объяснение, спасибо!

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

    Спасибо! Отличный курс! 💥💥💥

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

    Ура, побольше java!

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

    Супер, дуже класне відео!

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

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

  • @3ple-ash
    @3ple-ash 2 года назад +9

    Все же не стоит интерфейсы относить к абстрактным классам. Посредством интерфейсов реализуется полиморфизм(не считая интерфейсы маркёры, функциональные интерфейсы), а функционал абстрактных классов чаще используется в наследовании как суперкласс. Если кто-то запомнит этот тезис и на собеседовании скажет что интерфейс это абстрактный класс, то быть беде.

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

      А как можно сказать ,что интерфейс = класс ?
      Тут сама риторика говорит об этом ,что это разные объекты

    • @КириллЧе-я5ы
      @КириллЧе-я5ы 11 месяцев назад

      Не стоит, но в тех же плюсах интерфейсы реализуются чистыми абстрактными классами

    • @dadadada-zc6nk
      @dadadada-zc6nk 11 месяцев назад

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

    • @mrakobes228
      @mrakobes228 9 месяцев назад

      А посредством абстрактных классов полиморфности разве не будет?
      Конечно будет.

    • @3ple-ash
      @3ple-ash 9 месяцев назад

      @@mrakobes228 конечно не будет, полиморфизм это связывание разных классов с общим поведением, наследование от абстрактного класса это расширение супер класса.
      Рыба может плыть и тапок может плыть, может ли тапок быть потомком рыбы или все же у них есть обобщенное поведение, которое можно объединить через интерфейс добавив полиморфизм?

  • @Watcherfromfar
    @Watcherfromfar 8 месяцев назад +1

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

  • @marines8725
    @marines8725 Месяц назад +1

    спасибо!

  • @Konstantin_Stalnov
    @Konstantin_Stalnov Год назад +3

    Второй Принцип: Закрытости / Открытости.
    Это тот принцип, благодаря которому раздувается ПО в геометрической прогрессии, а функционал в арифметической!

    • @Watcherfromfar
      @Watcherfromfar 8 месяцев назад +1

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

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

    Очень понятно объяснил 👌 спасибо😀

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

    Круто, спасибо! Хотелось бы на питоне, конечно, так как смотрю с плейлиста по ООП питону. Но, насколько я понял, ярче всего эти принципы работают со строго-типизированными языками. Так что так, полагаю, лучше

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

    Очень понравилось, спасибо! Единственное может быть слишком быстро? и конечно для закрепления нужно больше практики.

  • @Andrei-t8j
    @Andrei-t8j Год назад +2

    абстрактный класс != интерфейс

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

    Когда объясняли зависимость интерфесов, нужно наверное было создать интерфейс DrawGeometry с абстрактным методом Draw. При наследовании мы бы получилиLine.Draw(), Circle.Draw(), Rectangle.Draw().если не ошибаюсь,то это был бы паттерн фабрика. По паттернам будет обучение?

  • @8-Artem-8
    @8-Artem-8 2 года назад +5

    Как можно определить, что разработчик пришел из питона? - Стиль написания snack_case. В java, особенно в энтерпрайз проектах, по -дефолту, используется camelCase. Но видео, как всегда, классное. Спасибо!

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

      это привычка, последнее время много на питоне писал ))

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

    по solid много видео и на русском, но это имхо лучшее

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

    С примерами на пайтон будет?) спасибо 🙏

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

    Классно, с возвращением... Java'у?)

  • @SB-pk2ss
    @SB-pk2ss 9 месяцев назад +6

    Самая основная проблема подобных видосов это чрезмерное упрощение примеров. Информация вроде подается хорошо. Но вот эти вот "Ну, я просто для примера, напишу вот такие методы, какая разница" или "Ну, назову класс SaveComputer, можно было бы поумнее, но какая разница" очень портят качество. Ну придумайте вы нормальные полноценные законченные примеры, близкие к реальным, без вот этих вот "допущений". Это сильно поднимет качество роликов.

  • @ДмитрийБузницкий-б3н
    @ДмитрийБузницкий-б3н 11 месяцев назад +1

    Спасибо за данное видео. Хотел бы задать следующий вопрос, который больше относится к программированию на С++. Считается ли нарушением принципа подстановки Барбары Лисков, если мы в базовом классе определим виртуальную функцию, с одним поведением, а уже в её классе наследнике мы эту виртуальную функцию переопределяем, т.е. задаём другое поведение? Ведь виртуальные функции и нужны для того чтобы их переопределять.

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

    Сергей, такой вопрос: разве в показанном примере на 18:00 код не нарушает принцип DRY? Ведь, по сути, при дальнейшем расширении программы, мы будем иметь множество классов с практически идентичным функционалом. Пусть это и нарушит принцип единой ответственности, но почему создать отдельный класс Saver, который будет реализовать все функции, связанные с сохранением, нельзя? Разве так не проще?

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

      Конечно, это сильно упрощенные примеры. Принципы SOLID для серьезных проектов. Я здесь лишь показываю идею. Конечно в этих програмках городить такие огороды ни к чему )) Я это сделал лишь для простоты изложения материала - идей принципов SOLID

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

      @@selfedu_rus В таком случае не очень хорошо закрепляется материал, так как пример не отражает "боевую" ситуацию, которая действительно может произойти. Не могли бы Вы привести пример из своего личного опыта, когда Вы использовали этот принцип в своем проекте и он действительно помог в обозримом будущем?

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

    Жду разбор шаблонов проектирования GoF.))

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

    А можно, тоже самое, но на python?

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

    К такому меня жизнь не готовила!

  • @pocomaxa8612
    @pocomaxa8612 8 месяцев назад +1

    Не понятно одно,почему Сергей во всех роликах про ооп использовал python,а в последнем перешёл на java ?А так все доступно и понятно разъяснил.

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

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

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

      @@shoislom2200 Про абстрактные классы я знаю,но все же

  • @димашапка-у4л
    @димашапка-у4л 9 месяцев назад +1

    Круто

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

    последнее вообще не понял, мы создали IForm интерфейс но при этом от куда нам брать тогда информацию для записи? То что они просто связаны на том что они одного интерфейса, но допустимо как его тогда сохранить если нету информации. Вообще не понял что происходит

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

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

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

    ничего не понятно, но очень интересно...

  • @АлександрКаптуров-с8и

    Сергей, снимите пожалуйста видео про SOLID для Python. Спасибо!

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

      А в чём разница? Эти принципы едины для всех ЯП.

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

    спасибо

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

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

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

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

  • @АндрейСкворцов-з6ш
    @АндрейСкворцов-з6ш 2 года назад +2

    Ура!!!!

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

    Может быть курс по Java сделаете?😅

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

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

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

      как один из примеров да, подходит

  • @pepesh9
    @pepesh9 8 месяцев назад +1

    букву S разве не модно было как - то подругому сделать например у класса SHAPE просто оставить метод DRAW и тогда получилось что в классах нужно было бы просто переопределить метод DRAW нежели создавать 3 лишних интерфейса которые наоборот нагружают память

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

    нравится Java) думаю в качестве компилируемого языка начну изучать ее) у вас не планируется вводный курс по ней?

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

      уже есть, см. плейлист на этом канале )

    • @skyx5691
      @skyx5691 9 месяцев назад

      Джава компилируемый язык только наполовину (до создания байт кода). Далее после этого, во время чтения байт кода - это уже гибридный язык , так как работает одновременно и JIT компилятор и интерпретатор в паре чтобы транслировать файл класса (байт код) в исполняемый файл на машинном языке.
      Чисто компилируемые языки это C, C++, Rust, Go и тд

    • @zakirovio
      @zakirovio 9 месяцев назад

      @@skyx5691 да теперь уже знаю, спасиб

  • @АлексейПротасов-п6э
    @АлексейПротасов-п6э 2 года назад +1

    Заметил интересное(в java базовый класс может хранить ссылку на объект класса-наследника), а что касается методов и переменных класса-наследника?Можно ли их использовать через базовый класс?

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

      нет, только после приведения типа к дочернему классу

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

    Сергей, вы добавили это видео в плейлист по ооп питона?

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

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

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

    Есть что то подобное не для ООП, а для процедурного программирования?

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

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

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

    а почему не на Python как раз после курса ОПП

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

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

  • @Name-ko3qb
    @Name-ko3qb 2 года назад +1

    Добрый день, планируются еще видео по чистой архитектуре? Спасибо!

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

      Пока не думал об этом, я вообще планов таких не строю, как идет, так и делаю ))

  • @ДмитрийАверьянов-щ4г
    @ДмитрийАверьянов-щ4г 2 года назад +1

    Здравствуйте. А что, планируются уроки по Java?

  • @ДмитрийАлексеев-ц5щ

    Есть же к.с abstract для создания абстрактных классов, почему автор заостряет внимание именно на интерфейсах, что через них реализуются абстрактные классы?

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

      да, в Java interface - это аналог абстрактных классов

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

      @@selfedu_rus абстрактные классы и интерфейсы - различные понятия

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

      @@danilaminecraftcity поэтому употребил слово "аналог"

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

      @@selfedu_rus хорошо, я уж быть подумал, что вы умеете ввиду его полное соответствие.

    • @КириллЧе-я5ы
      @КириллЧе-я5ы 11 месяцев назад

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

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

    Канал хороший смотрю плейлист по питону и по си. Вопрос аа почему принципы Solid по java? будите делать по этому языку плейлист как по си? Или эти принципы к другим языкам то же подходят?

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

      Спасибо! Просто на Java было проще всего показать эти принципы, а так да, они едины для всех языков, где есть ООП.

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

      @@selfedu_rus ясно спасибо)⚡⚡⚡

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

    Лайк с вертухана

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

    Solid - это только для ООП?
    Если я программирую, например, в процедурном стиле?

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

      4:05 услышал ответ.

    • @КириллЧе-я5ы
      @КириллЧе-я5ы 11 месяцев назад

      Нет, философия солид - не только про ооп

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

    8:55 это реально применяется и делается например визитором но этот вариант тоже нарушает SRP потому что при изменении класса вам надо изменить и сам класс и его лоадер который будет брать его структуру, так что не факт что такое выделение чище по дизайну. А не вот на ходу придумалось решение что самым чистым был бы класс универсального лоадера, который через "что то типа рефлекции" если это про Жабу, смотрит структуру любого обьектаи сохраняет данные типа как JSON. Если надо сохранять не все поля то в классе прописывается какие поля надо сохранять.
    Не надо в лекции по SOLID говорить белиберду. Отдельно класс который сохраняет специфический обьект специфическим образом непрактично потому что у вас будет n * m таких классов где n количество классов а m виды сохранения.

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 11 месяцев назад +1

    Все же лучше называть класс не действием - это ведь сущность. Здесь, в примере с Computer, имхо достаточно рассмотреть навязшую в зубах mvc. Есть область хранилища, есть само представление сущности, и есть какой-то контроллер, обеспечивающий взаимодействие хранилища и представления. Имхо🥴

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

    08:11

  • @7778-d2i
    @7778-d2i 2 года назад +1

    👍🏻

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

    Так может надо было на питоне и делать эту рубрику...

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

      там не покажешь так явно интерфейсы как в Java

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

    Курс клёвый , но конец подкачал
    Нету абстрактных методов..

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 11 месяцев назад +1

    Первый принцип - фактически о том, насколько удачно вы декомпозицировали задачу…

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

    Потчем тут ява к пайтону?

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

      это не про Python, а про SOLID, а SOLID - про все ООП

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

      @@selfedu_rus вот только это в плейлист
      ООП python

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

      он во всех плейлистах по ООП, не только в Python

  • @hazartilirot1014
    @hazartilirot1014 8 месяцев назад +1

    Мне кажется, что автор не правильно объяснил принцип подстановки Лисков.

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

      Прошу прощения, последний принцип тоже, мне кажется, объяснили не правильно.

  • @ДмитрийГрозный-ь3ш
    @ДмитрийГрозный-ь3ш 2 года назад

    Интерфейс и абстрактный класс в джаве две совершенно разные сущности

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

    Ще б паттернів і побільше...

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

    22:3

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 11 месяцев назад +1

    Ну, проект из нескольких классов как бы надо уже на масштабирование закладывать…🥴

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

    ну, в общем-то, типичные ошибки (странно, что человек, перед тем как учить кого-то, не может просто даже вики открыть - не то что, открыть книжку мартина, где всё это подробно расписано):
    1) принцип единственной *ОТВЕТСТВЕННОСТИ* не про то, что класс или метод должен отвечать за одну вещь. даже на вики написано: "A class should have only one reason to change" R. Martin. и где тут что-то про работу класса? принцип о том (и на ютубе есть видео, где дядюшка это поясняет на примерах), что класс должен иметь ОДИН ИСТОЧНИК ДЛЯ ИЗМЕНЕНИЙ. т.е. если этот класс создан по заказу бухгалтерии, для их расчетов, то он не должен меняться по приказу отдела кадров. в противном случае, существует вероятность, что после изменений для кадров, у бухгалтерии отвалится жопа.
    2) osp - самое простое. но даже тут чувак нарушает принцип наименования интерфейсов (как и в целом в видео). интерфейс - это прилагательное (или существительное, если это группа объектов). отвечает на вопрос: "какой?". отвечает ли SaveInterface на вопрос "какой?" - вопрос риторический. и ладно бы он придерживался такого написания везде - но нет: тут добавляет Interface, потом пишет интерфейс Shape, без добавления Interface, потом вообще пишет ICircle. чувак, определись уже.
    3) принцип лисков не о том, что дочерний класс должен ПОЛНОСТЬЮ повторять ФУНКЦИОНАЛ. вон, в комментах у людей тоже вопрос - "нафига тогда есть переопределение метода?". принцип о том, что дочерний метод должен соответствовать той же БАЗОВОЙ СИГНАТУРЕ, что и родительский. т.е. если у тебя базовый метод принимает число, как аргумент, и возвращает число, то и дочерний метод должен делать то же самое: иметь ПЕРВЫМ аргументом число, и возвращать число. но это не значит, что я в дочерний метод не могу вторым аргументом добавить строку, например. и это не означает, что в теле метода я не могу реализовать другую работу, нежели в базовом. если у меня базовый класс возвращает число, путем возведения аргумента в квадрат, то я в дочернем классе могу вернуть число, путем умножения аргумента на самого себя. или умножить его на 2. или на 10. да, результат будет неправильным, но он будет соответствовать ожидаемому типу. но если ты переопределишь метод, но сделаешь возвращаемый тип строкой, то при подстановке, у тебя сломается программа, если ты захочешь использовать результат, как число, но получишь строку.
    да, в видео правильно сказано, что изменение свойств класса в переопределенном методе тоже нарушает этот принцип. но это лишь его часть.
    4) тут всё понятно, кроме нейминга интерфейсов
    5) опять проблемы с наименованием. как язык программирования (sql) может быть типом базы данных? если ты делаешь абстракцию базы данных, то и называй ее DB. базой данных может быть и локальное хранилище - каким боком оно тогда относится к sql?