Тёмный

SOLID: принципы и паттерны проектирования | Объясняю простыми словами | Примеры на Python 

Сурен Хоренян
Подписаться 11 тыс.
Просмотров 4,3 тыс.
50% 1

Опубликовано:

 

28 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 36   
@mzaytsev
@mzaytsev Год назад
Лисков не о том, а о замене функциональности в наследнике
@SurenKhorenyan
@SurenKhorenyan Год назад
Так я же как раз показываю, что можно заменить содержимое метода в наследнике, главное чтобы он был совместим с тем, что ожидается от родителя 🙂
@mzaytsev
@mzaytsev Год назад
@@SurenKhorenyan У вас там два разных метода, с разными названиями (для кота и льва) и их вызов в сторонней ф-ии. Это проблема никак не связана с принципом Барбары Лисков, это просто какая-то сторонняя проблема в коде которая могла возникнут по десятку причин (ошибка проектирования интерфейса, проблема отсутствия адаптеров, нарушение связанности слоёв абстракции и пр.). Принцип Барбары Лисков гласит, что не стоит изменять функционал наследника так, чтобы его использование вместо родителя приводило к ошибкам или не очевидному поведению. Пример: у вас есть класс Person с методом moveForward(), который перемещает персонажа на клетку вперёд. Потом вы создаёте наследника StandingNPC extends Person и у него переопределяете метод moveForward() так что он никак не перемещает персонажа. Вот это и есть нарушение принципа Барбары
@SurenKhorenyan
@SurenKhorenyan Год назад
@@mzaytsev Спасибо, это хороший пример! Я не догадался привести такой пример, в будущем учту. Надеюсь, зрителю будет понятна сама идея и в том виде, что я показал
@mzaytsev
@mzaytsev Год назад
@@SurenKhorenyan Удачи вам Сурен
@mzaytsev
@mzaytsev Год назад
@@SurenKhorenyan На всякий случай отпишу лучше ещё тут вторую ошибку. Принцип разделения интерфейсов он не в выделении общего наследника и превращении его в интерфейс (это не верное понимание интерфейса), а в выделении множества интерфейсов на каждую характеристику будущего класса. Класс - это всегда некоторая сущность (даже если класс абстрактный) Интерфейс - это характеристика (в вашем примере это было бы два интерфейса, что-то вроде SmsSendible, EmailSendible) и уже имплементация каждого интерфейса в классах PDA, Smartphone и пр. Однако на этом примере сложно понять в чём плюс этого подхода, его легче рассмотреть на примере когда возникает проблема необходимости множественного наследования, аля Horse extends Animal, Vehicle
@timurotube
@timurotube 23 дня назад
Супер контент, как всегда, собственно. Сурен, просто молодец
@SurenKhorenyan
@SurenKhorenyan 23 дня назад
@@timurotube спасибо большое! Очень приятно 🥰
@antonzuzlov2046
@antonzuzlov2046 Год назад
Супер контент, жду побольше подобного) особенно может быть что-то связанное с fast json api
@SurenKhorenyan
@SurenKhorenyan Год назад
спасибо! про FastAPI JSON:API обязательно сделаю ролики. мы как раз сейчас готовим крупное обновление библиотеки, будет о чем рассказать 🙂
@antonzuzlov2046
@antonzuzlov2046 Год назад
крутые примеры, но я помню их не понимал до определенного опыта. было приятно вспомнить
@SurenKhorenyan
@SurenKhorenyan Год назад
Спасибо! Да, хоть какое-то понимание программирования нужно, чтобы понять примеры
@kseniasunny8910
@kseniasunny8910 Год назад
Спасибо, заценила мем с котом)
@SurenKhorenyan
@SurenKhorenyan Год назад
Хаа, пожалуйста!
@photo_graf_khv
@photo_graf_khv Месяц назад
Спасибо 🤝💪👍
@SurenKhorenyan
@SurenKhorenyan Месяц назад
Пожалуйста!
@bernardsoul8936
@bernardsoul8936 2 месяца назад
Ещё было бы неплохо на реальных примерах разобрать
@SurenKhorenyan
@SurenKhorenyan 2 месяца назад
@@bernardsoul8936 да, вполне
@MsSkylines
@MsSkylines Год назад
Думаю, на деле функция включения лампочки будет реализована конкретно под лампочку, а не под все световые приборы. Хотя мб в рамках одного производителя и под все)
@SurenKhorenyan
@SurenKhorenyan Год назад
Всё зависит от ситуации. Лампочка же тоже бывает разная. Или представьте у вас дома один выключатель для лампочки, а другой для вентиляции. Выключатели же одинаковые. Так и в коде может быть пересечение. Но в частных случаях, конечно, может быть по-разному
@ГубкаБоб-р8ъ
@ГубкаБоб-р8ъ Год назад
Я всегда думал что D это don't repeat yourself
@ИннаЛиксакова-о4н
рассказываете топ, но очень быстро, на 0.75 скорости смотрится хорошо
@SurenKhorenyan
@SurenKhorenyan Год назад
Хах, извините 😅 Хорошо, что есть замедление
@АндрейСусарев-ю3л
Как все это ПОНЯТЬ ?!!! (Новичку) 😂😂😂😂😢
@SurenKhorenyan
@SurenKhorenyan Год назад
Хмм, а что именно было непонятно? Неужели "вообще ничего непонятно"? Про какой принцип было непонятно? Догадываюсь, что если вы совсем не знаете про классы, то сложно понять всё, что было про наследование. Может быть понятие интерфейсов не очень понятно. А ещё?
@АндрейСусарев-ю3л
@@SurenKhorenyan я только начинаю входить в программирование. Поэтому мне и не понятно. Простите.
@SurenKhorenyan
@SurenKhorenyan Год назад
@@АндрейСусарев-ю3л ничего страшного! Я рад объяснить, вы только скажите, что именно непонятно. Соглашусь, если вы только-только начинаете, может быть не всё понятно. Но когда вы будете сталкиваться с подобными проблемами, уже будете узнавать в них знакомые паттерны и легче находить решение
@archi-zeus
@archi-zeus Год назад
Со временем будет понятнее и понятнее, просто продолжайте развиваться, изучать чужой код, и разрабатывать свой, и все придет со временем!
@SurenKhorenyan
@SurenKhorenyan Год назад
@@archi-zeus всё так! Главное не останавливаться
Далее
Все о принципах SOLID
16:07
Просмотров 30 тыс.
Просто о SOLID (Принципы SOLID)
15:54
Просмотров 221 тыс.
PYTHON )))))
34:22
Просмотров 131 тыс.