SOLID принципы на Python: OCP - Принцип открытости / закрытости

  Рет қаралды 9,429

EngineerSpock - IT & программирование

EngineerSpock - IT & программирование

2 жыл бұрын

Подписка на Boosty: boosty.to/engineerspock Донаты на развитие: pay.cloudtips.ru/p/1f080f72 Курсы от EngineerSpock: www.engineerspock.com/offer-y...
Это серия роликов из курса по Паттернам (шаблонам) проектирования на Python за авторством Дмитрия Нестерука. EngineerSpock визировал перевод и озвучку. Как получилось - судить вам.
SOLID принципы - это большАя часть современной теории ООП (объектно-ориентированного программирования). Впервые сам термин предложил дядя Боб (Uncle Bob), хотя основы для выведения принципов были известны до него и разбирались, например, в известном труде Бертрана Мейера ("Объектно-ориентированное конструирование программных систем").
SOLID расшифровывается так:
S - Single Responsibility Principle (SRP) - Принцип единственной ответственности
O - Open Closed Principle (OCP) - Принцип открытости/закрытости
L - Liskov Substitution Principles (LSP) - Принцип подстановки Барбары Лисков
I - Interface Segregation Principle (ISP) - Принцип разделения интерфейса
D - Dependency Inversion Principle (DIP) - Принцип инверсии зависимости
Следование принципам SOLID в программировании имеет огромную роль с точки зрения написания чистого кода и как следствие максимизации простоты поддержки кода.
В этом ролике мы поговорим об OCP - Open Closed Principle или Принцип открытости / закрытости.
Курсы от EngineerSpock: www.engineerspock.com/offer-y...
Канал Дмитрия Нестерука на KZbin: / @soloondotnet
Видео курсы Дмитрия на Udemy: www.udemy.com/user/dmitrinest...
#it #программирование #айти #ityoutubersru #engineerspock #программирование #программист #разработка

Пікірлер: 32
@user-uw8hy1lc4p
@user-uw8hy1lc4p 3 ай бұрын
Самая главная проблема, когда уже наговнокодили а потом ты пытаешься это исправить, особенно если прошло уже месяца 3
@alexanderprokopenko8198
@alexanderprokopenko8198 2 жыл бұрын
Них*я не понял. Но очень интересно.
@user-mobilnik
@user-mobilnik 3 ай бұрын
11:28 можно ли список products записать в Product.products, куда при создании экземлера класса будут добавляться новые продукты? Будет ли так лучше? И можно ли Filter и Specification называть абстрактными классами в вашем примере?
@justafish_
@justafish_ 10 ай бұрын
18:36 то есть если все таки нужно внести изменения, то мы просто говорим "ну, я сейчас как будто бы переместился в прошлое и добавил эту функциональность в самом начале"? Почему нельзя было так сделать с фильтрами?
@nylinary
@nylinary 4 ай бұрын
Потому что новые фильтры могут прилететь от бизнеса через пол года. А переопределение оператора явно сделали бы в самом начале. Ну а если также прошло пол года, то переопределение оператора было бы нарушением OCP. Тут это для наглядности было нужно
@777xxxWeltonxxx777
@777xxxWeltonxxx777 11 ай бұрын
То есть в первом подходе мы генерим бесконечное количество фильтров, а во втором мы генерим бесконечное количество классов-спецификаций (ColorSpecification, SizeSpecification и т.д.) ? =)
@EngineerSpock
@EngineerSpock 11 ай бұрын
Я уже не помню конкретику. Но скорее всего смысл в том что добавлять новое проще чем модифицировать старое. Тупые фильтры подвержены изменениям
@Chel1k7
@Chel1k7 10 ай бұрын
@@EngineerSpock почему фильтры тупые? ты их не уважаешь ?
@EngineerSpock
@EngineerSpock 10 ай бұрын
@@Chel1k7 лол)))
@user-yj7zf7gf4w
@user-yj7zf7gf4w Ай бұрын
Ты не понял, количество добавления новых методов при каждом N фильтре в первом случае растет к бесконечности (смотри точную формулу комбинаторики все сочетания из n), а во втором случае для каждого нового фильтра создается всего один класс
@womi1141
@womi1141 5 ай бұрын
Почему не изпользовать статические ovveride методы для filter чтобы не создавать обєкты
@causasgwirionedd6271
@causasgwirionedd6271 2 жыл бұрын
1:33 как вы делаете быстрое присвоение?
@alcoholism322
@alcoholism322 Жыл бұрын
А кто озвучивал?
@EngineerSpock
@EngineerSpock Жыл бұрын
Специалист по озвучке
@to5116
@to5116 5 ай бұрын
Было бы хорошо если бы выкладывали код по ссылке
@black_grizzly
@black_grizzly 2 жыл бұрын
Илья, 👋привет. Подскажи, пожалуйста. Нигде не найду внятной инфы. Если хочу учить питон с перспективной работы в вебе, Джанго, фласк. Нужно ли мне начинать обучение с информации где спикеры (книга, курс) учат работать в Jupyter? С вычислениями и алгоритмами. Насколько понял, Юпитер используется в Data. То есть применить это обучение выходит получится в области data, а у меня миссия другая. И я в силу неопытности сейчас не понимаю, если этому обучаться == получать базу и общее понимание для разработки на питоне, либо это изучение питона для той области которая мне сейчас не интересна и стоит начать искать сразу что-то профильное? Присматриваюсь к твоему 📦пакету. Заранее спасибо. Кто в теме, ребят, не стесняйтесь, пишите.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
У меня в курсе жупитер но просто потому что он проще для многих новичков, чем навороченные ide. В конце курса переходим к pycharm. Жупитер как таковой вам не нужен
@black_grizzly
@black_grizzly 2 жыл бұрын
@@EngineerSpock ответ на вопрос ❓к сожалению не был дан. Понимаю, что проще в джупитере, просто здесь получается учишься в узком направлении, так как он для вычислений предназначен. И у новичка, ну по крайней мере мыслящего появляются вопросы. Мне кажется проще то оно проще, но больше проще для препода) На том же степике подобные курсы.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
@@black_grizzly да что учишь то? Что там учить? Мы не учим жупитер. Мы учим питон. Это грубо говоря на процесс обучения не влияет никак от слово совсем с точки зрения затрат времени
@black_grizzly
@black_grizzly 2 жыл бұрын
@@EngineerSpock ну в этом и вопрос. Обучение питону на джупитере закладывает общую базу по изучению языка или узконаправленную? Ориентированную на дата саенс и т.д. Насколько это эффективно и полезно если будущий разраб выбирает для себя ветку веба на начальном этапе.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
@@black_grizzly на эффективности никак не отразится
@user-pg8ry1tm3t
@user-pg8ry1tm3t 4 ай бұрын
В общем наследуйтесь от интерфейсов миксин🥴 заодно I принцип выполните
@chupa00
@chupa00 Жыл бұрын
Хоть бы примеры были серьезные, рефакторинг кода с гита, например, иначе для кого это? Новичкам нельзя такой код показывать, просто потому что он типо простой. А по примеру, можно написать только одну дженерик функцию, которая принимает список объектов и предикат для фильтрации, тогда и простыня этих классов без состояний не нужна.
@alcoholism322
@alcoholism322 Жыл бұрын
Новичкам нельзя такой код, потому что он простой ГЕНИЙ
@zeroiq6401
@zeroiq6401 7 ай бұрын
Если для каждого фильтра мы будем создавать свой класс, то где принцип открытости для дополнения?
@EngineerSpock
@EngineerSpock 7 ай бұрын
В том-то и дело, что мы пишем новый код, а не меняем старый.
@zeroiq6401
@zeroiq6401 7 ай бұрын
@@EngineerSpock так открытость для дополнения то где? Отдельный класс не есть дополнение.
@EngineerSpock
@EngineerSpock 7 ай бұрын
@@zeroiq6401 отдельный класс это и есть расширение. Это и есть открытость для расширения
@aiat122
@aiat122 4 ай бұрын
слишком сложно
SOLID принципы на Python: LSP - Принцип подстановки Лисков / Liskov Substitution Principle
8:11
ASMR SOUNDS OF HANDS IN LATEX GLOVES | PRIMARY SATISFACTION
8:49
Каха инструкция по шашлыку
01:00
К-Media
Рет қаралды 7 МЛН
New Gadgets! Bycycle 4.0 🚲 #shorts
00:14
BongBee Family
Рет қаралды 16 МЛН
Меняла стек в IT 7 раз - делюсь опытом!
34:49
IT-Собеседница
Рет қаралды 14 М.
Паттерны проектирования на Python: Паттерн Прототип
9:01
EngineerSpock - IT & программирование
Рет қаралды 10 М.
Искусственный интеллект, ChatGPT и распознавание образов / Шелия Губерман
39:49