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

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ก.ย. 2024
  • Подписка на Boosty: boosty.to/engi... Донаты на развитие: pay.cloudtips.... Курсы от EngineerSpock: www.engineersp...
    Это серия роликов из курса по Паттернам (шаблонам) проектирования на 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.engineersp...
    Канал Дмитрия Нестерука на TH-cam: / @soloondotnet
    Видео курсы Дмитрия на Udemy: www.udemy.com/...
    #it #программирование #айти #ityoutubersru #engineerspock #программирование #программист #разработка

ความคิดเห็น • 34

  • @МурадАхмедов-ч1с
    @МурадАхмедов-ч1с 7 หลายเดือนก่อน +6

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

  • @alexanderprokopenko8198
    @alexanderprokopenko8198 2 ปีที่แล้ว +17

    Них*я не понял. Но очень интересно.

  • @justafish_
    @justafish_ ปีที่แล้ว +4

    18:36 то есть если все таки нужно внести изменения, то мы просто говорим "ну, я сейчас как будто бы переместился в прошлое и добавил эту функциональность в самом начале"? Почему нельзя было так сделать с фильтрами?

    • @nylinary
      @nylinary 8 หลายเดือนก่อน

      Потому что новые фильтры могут прилететь от бизнеса через пол года. А переопределение оператора явно сделали бы в самом начале.
      Ну а если также прошло пол года, то переопределение оператора было бы нарушением OCP. Тут это для наглядности было нужно

  • @to5116
    @to5116 8 หลายเดือนก่อน +2

    Было бы хорошо если бы выкладывали код по ссылке

  • @ДмитрийКрашенинников-г7ш
    @ДмитрийКрашенинников-г7ш 2 หลายเดือนก่อน

    У меня аж 8 битный мозжечок напрягся как струна от того, что приходилось перематывать взад, чтоб увидеть ранний код. Выложи код в репозиторий так будет проще всем.

  • @womi1141
    @womi1141 9 หลายเดือนก่อน

    Почему не изпользовать статические ovveride методы для filter чтобы не создавать обєкты

  • @普京的手机
    @普京的手机 6 หลายเดือนก่อน

    11:28 можно ли список products записать в Product.products, куда при создании экземлера класса будут добавляться новые продукты? Будет ли так лучше?
    И можно ли Filter и Specification называть абстрактными классами в вашем примере?

    • @bamboleo8951
      @bamboleo8951 2 หลายเดือนก่อน

      1. Нет, так не будет лучше, потому что тогда, имо, нарушается srp. Продукт - это продукт, а продукт, в котором еще продукты -- это совсем другая сущность.
      2. Да, можно сказать, что это абстрактные классы.

  • @alcoholism322
    @alcoholism322 2 ปีที่แล้ว +1

    А кто озвучивал?

    • @EngineerSpock
      @EngineerSpock  2 ปีที่แล้ว +1

      Специалист по озвучке

  • @zeroiq6401
    @zeroiq6401 10 หลายเดือนก่อน

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

    • @EngineerSpock
      @EngineerSpock  10 หลายเดือนก่อน

      В том-то и дело, что мы пишем новый код, а не меняем старый.

    • @zeroiq6401
      @zeroiq6401 10 หลายเดือนก่อน

      @@EngineerSpock так открытость для дополнения то где? Отдельный класс не есть дополнение.

    • @EngineerSpock
      @EngineerSpock  10 หลายเดือนก่อน

      @@zeroiq6401 отдельный класс это и есть расширение. Это и есть открытость для расширения

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 8 หลายเดือนก่อน

    В общем наследуйтесь от интерфейсов миксин🥴 заодно I принцип выполните

  • @causasgwirionedd6271
    @causasgwirionedd6271 2 ปีที่แล้ว

    1:33 как вы делаете быстрое присвоение?

  • @black_grizzly
    @black_grizzly 2 ปีที่แล้ว

    Илья, 👋привет. Подскажи, пожалуйста. Нигде не найду внятной инфы. Если хочу учить питон с перспективной работы в вебе, Джанго, фласк. Нужно ли мне начинать обучение с информации где спикеры (книга, курс) учат работать в Jupyter? С вычислениями и алгоритмами. Насколько понял, Юпитер используется в Data. То есть применить это обучение выходит получится в области data, а у меня миссия другая. И я в силу неопытности сейчас не понимаю, если этому обучаться == получать базу и общее понимание для разработки на питоне, либо это изучение питона для той области которая мне сейчас не интересна и стоит начать искать сразу что-то профильное? Присматриваюсь к твоему 📦пакету. Заранее спасибо. Кто в теме, ребят, не стесняйтесь, пишите.

    • @EngineerSpock
      @EngineerSpock  2 ปีที่แล้ว +1

      У меня в курсе жупитер но просто потому что он проще для многих новичков, чем навороченные ide. В конце курса переходим к pycharm. Жупитер как таковой вам не нужен

    • @black_grizzly
      @black_grizzly 2 ปีที่แล้ว

      @@EngineerSpock ответ на вопрос ❓к сожалению не был дан. Понимаю, что проще в джупитере, просто здесь получается учишься в узком направлении, так как он для вычислений предназначен. И у новичка, ну по крайней мере мыслящего появляются вопросы. Мне кажется проще то оно проще, но больше проще для препода)
      На том же степике подобные курсы.

    • @EngineerSpock
      @EngineerSpock  2 ปีที่แล้ว

      @@black_grizzly да что учишь то? Что там учить? Мы не учим жупитер. Мы учим питон. Это грубо говоря на процесс обучения не влияет никак от слово совсем с точки зрения затрат времени

    • @black_grizzly
      @black_grizzly 2 ปีที่แล้ว

      @@EngineerSpock ну в этом и вопрос. Обучение питону на джупитере закладывает общую базу по изучению языка или узконаправленную? Ориентированную на дата саенс и т.д.
      Насколько это эффективно и полезно если будущий разраб выбирает для себя ветку веба на начальном этапе.

    • @EngineerSpock
      @EngineerSpock  2 ปีที่แล้ว

      @@black_grizzly на эффективности никак не отразится

  • @aiat122
    @aiat122 8 หลายเดือนก่อน

    слишком сложно

  • @777xxxWeltonxxx777
    @777xxxWeltonxxx777 ปีที่แล้ว +4

    То есть в первом подходе мы генерим бесконечное количество фильтров, а во втором мы генерим бесконечное количество классов-спецификаций (ColorSpecification, SizeSpecification и т.д.) ? =)

    • @EngineerSpock
      @EngineerSpock  ปีที่แล้ว

      Я уже не помню конкретику. Но скорее всего смысл в том что добавлять новое проще чем модифицировать старое. Тупые фильтры подвержены изменениям

    • @Chel1k7
      @Chel1k7 ปีที่แล้ว

      @@EngineerSpock почему фильтры тупые? ты их не уважаешь ?

    • @EngineerSpock
      @EngineerSpock  ปีที่แล้ว

      @@Chel1k7 лол)))

    • @пользак
      @пользак 5 หลายเดือนก่อน +2

      Ты не понял, количество добавления новых методов при каждом N фильтре в первом случае растет к бесконечности (смотри точную формулу комбинаторики все сочетания из n), а во втором случае для каждого нового фильтра создается всего один класс

  • @chupa00
    @chupa00 2 ปีที่แล้ว +2

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

    • @alcoholism322
      @alcoholism322 2 ปีที่แล้ว +3

      Новичкам нельзя такой код, потому что он простой
      ГЕНИЙ