SOLID принципы на Python: OCP - Принцип открытости / закрытости
HTML-код
- Опубликовано: 15 дек 2021
- Подписка на 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...
Канал Дмитрия Нестерука на RUclips: / @soloondotnet
Видео курсы Дмитрия на Udemy: www.udemy.com/user/dmitrinest...
#it #программирование #айти #ityoutubersru #engineerspock #программирование #программист #разработка
Самая главная проблема, когда уже наговнокодили а потом ты пытаешься это исправить, особенно если прошло уже месяца 3
Них*я не понял. Но очень интересно.
18:36 то есть если все таки нужно внести изменения, то мы просто говорим "ну, я сейчас как будто бы переместился в прошлое и добавил эту функциональность в самом начале"? Почему нельзя было так сделать с фильтрами?
Потому что новые фильтры могут прилететь от бизнеса через пол года. А переопределение оператора явно сделали бы в самом начале.
Ну а если также прошло пол года, то переопределение оператора было бы нарушением OCP. Тут это для наглядности было нужно
11:28 можно ли список products записать в Product.products, куда при создании экземлера класса будут добавляться новые продукты? Будет ли так лучше?
И можно ли Filter и Specification называть абстрактными классами в вашем примере?
То есть в первом подходе мы генерим бесконечное количество фильтров, а во втором мы генерим бесконечное количество классов-спецификаций (ColorSpecification, SizeSpecification и т.д.) ? =)
Я уже не помню конкретику. Но скорее всего смысл в том что добавлять новое проще чем модифицировать старое. Тупые фильтры подвержены изменениям
@@EngineerSpock почему фильтры тупые? ты их не уважаешь ?
@@Chel1k7 лол)))
Ты не понял, количество добавления новых методов при каждом N фильтре в первом случае растет к бесконечности (смотри точную формулу комбинаторики все сочетания из n), а во втором случае для каждого нового фильтра создается всего один класс
Почему не изпользовать статические ovveride методы для filter чтобы не создавать обєкты
Было бы хорошо если бы выкладывали код по ссылке
1:33 как вы делаете быстрое присвоение?
А кто озвучивал?
Специалист по озвучке
В общем наследуйтесь от интерфейсов миксин🥴 заодно I принцип выполните
Илья, 👋привет. Подскажи, пожалуйста. Нигде не найду внятной инфы. Если хочу учить питон с перспективной работы в вебе, Джанго, фласк. Нужно ли мне начинать обучение с информации где спикеры (книга, курс) учат работать в Jupyter? С вычислениями и алгоритмами. Насколько понял, Юпитер используется в Data. То есть применить это обучение выходит получится в области data, а у меня миссия другая. И я в силу неопытности сейчас не понимаю, если этому обучаться == получать базу и общее понимание для разработки на питоне, либо это изучение питона для той области которая мне сейчас не интересна и стоит начать искать сразу что-то профильное? Присматриваюсь к твоему 📦пакету. Заранее спасибо. Кто в теме, ребят, не стесняйтесь, пишите.
У меня в курсе жупитер но просто потому что он проще для многих новичков, чем навороченные ide. В конце курса переходим к pycharm. Жупитер как таковой вам не нужен
@@EngineerSpock ответ на вопрос ❓к сожалению не был дан. Понимаю, что проще в джупитере, просто здесь получается учишься в узком направлении, так как он для вычислений предназначен. И у новичка, ну по крайней мере мыслящего появляются вопросы. Мне кажется проще то оно проще, но больше проще для препода)
На том же степике подобные курсы.
@@black_grizzly да что учишь то? Что там учить? Мы не учим жупитер. Мы учим питон. Это грубо говоря на процесс обучения не влияет никак от слово совсем с точки зрения затрат времени
@@EngineerSpock ну в этом и вопрос. Обучение питону на джупитере закладывает общую базу по изучению языка или узконаправленную? Ориентированную на дата саенс и т.д.
Насколько это эффективно и полезно если будущий разраб выбирает для себя ветку веба на начальном этапе.
@@black_grizzly на эффективности никак не отразится
Хоть бы примеры были серьезные, рефакторинг кода с гита, например, иначе для кого это? Новичкам нельзя такой код показывать, просто потому что он типо простой.
А по примеру, можно написать только одну дженерик функцию, которая принимает список объектов и предикат для фильтрации, тогда и простыня этих классов без состояний не нужна.
Новичкам нельзя такой код, потому что он простой
ГЕНИЙ
Если для каждого фильтра мы будем создавать свой класс, то где принцип открытости для дополнения?
В том-то и дело, что мы пишем новый код, а не меняем старый.
@@EngineerSpock так открытость для дополнения то где? Отдельный класс не есть дополнение.
@@zeroiq6401 отдельный класс это и есть расширение. Это и есть открытость для расширения
слишком сложно