2020 Практика программирования на Python, лекция №9

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ก.ย. 2024
  • Практика: cs.mipt.ru/python

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

  • @iritaka
    @iritaka 3 ปีที่แล้ว +48

    Тайм-коды: ООП, Наследование, принципы S.O.L.I.D.
    1:03 5 принципов создания классов: S.O.L.I.D.
    4:36 принцип единственной ответственности классов
    6:20 класс Пушка
    8:48 иллюстрация на доске Пушка. Расширение функционала
    11:03 несколько осей изменений не должны проходить через один класс
    14:35 антипаттерн божественный объект GodObject. Шаблон проектирования программы
    22:33 Иерархия
    27:04 принцип подстановки Барбары Лисков
    27:23 Подкласс (производный). Класс наследник. Надкласс (базовый)
    30:37 Абстрактный класс
    32:51 Ассоциация между классами
    35:15 Наследование. Выстраивает иерархию типов
    35:36 абстрактные методы
    36:45 принцип инверсии зависимостей
    40:24 принцип подстановки Барбары Лисков
    48:33 код. Иерархия Hierarchy.py
    50:03 явный вызов конструктора надкласса. Конструктор производного класса обязательно должен звать конструктор базового
    53:37 метод super() - это функция, которая возвращает надкласс
    57:38 gun.py
    1:01:20 код
    1:03:39 второй механизм в ООП как вести себя с множеством объектов
    1:09:20 добавление в код иерархии
    1:13:23 в конструкторе подкласса, при вызове super().__init__(), не нужно прописывать свойства конструктора надкласса, оно само
    1:23:03 Агрегация. Класс-агрегат содержит в себе объекты других классов

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

      и сюда лайки накидайте) каждому 10му лайку питон в подарок

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

      @@rioriocccp5929 )))

  • @expertkmsdv84
    @expertkmsdv84 3 ปีที่แล้ว +30

    кто ждет новый выпуск? поставь лайк Тимофею! самый крутой бесплатный курс обучения.

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

      К сожалению, у лайфхаков и котиков популярность выше(

  • @ДобродейНиколай
    @ДобродейНиколай 2 ปีที่แล้ว +2

    Очень признателен вам, Тимофей, за ваш труд и старания! 👍

  • @fortnitelifechannel6994
    @fortnitelifechannel6994 3 ปีที่แล้ว +10

    Как всегда - приятно слушать и смотреть)

  • @crissquest3258
    @crissquest3258 3 ปีที่แล้ว +11

    У вас есть объект - Автомобиль. В нём есть метод -> Пуск ! Этот метод знает о классе -> Двигатель , и умеет его запустить. Класс Двигатель - имеет свойство - Температура , и исходя из значения этого свойства -> может обратиться к Классу -> Вентилятор , и вызвать у него метод ПУСК. При должной организации приватности - всё будет работать безопасно . Если вы всё напишите в одно ПОЛОТНО , или в одну функцию , помимо того , что будет сложно уследить\понять\изменять\ , то ещё и кто то сможет напрямую запустить вентилятор , или обратиться и изменить свойство двигателя - температура. Специально - или как бывает чаще - нечаянно .

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

      Добавлю, что при увеличении детализации задачи, её более точного описания у вас будут появляться новые классы, а старые станут "вспомогательными". Если у вас есть не только датчик температуры, а датчик оборотов, датчик давления топлива в рампе, давления в турбине - это всё будут классы. Оперировать объектами этих классов из класса "двигатель" неправильно. Так у вас появится класс ЭБУ. В классе ЭБУ вероятно, понадобятся подклассы отвечающие за топливную смесь, трекшн контроль, распределение момента, и т.д.
      Старайтесь документировать каждый класс, каждый метод, даже если он ВАМ кажется простым и понятным. Это очень важный аспект, который отличает хороших программистов от говнокодеров.

    • @crissquest3258
      @crissquest3258 3 ปีที่แล้ว

      @@Deli_Berate разумеется - правильное проектирование архитектуры - как фундамент и высокого здания.

  • @валерийсоколов-п4я
    @валерийсоколов-п4я 3 ปีที่แล้ว +3

    Прекрасная подача материала

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

    Когда я изучал SOLID, для меня самым легким пунктом для запоминания был Open-Closed, именно второй, А LSP, наверное, самым трудным, который постоянно вылетал из головы.

  • @vi__kawaii
    @vi__kawaii 3 ปีที่แล้ว +13

    56:05
    Когда зашел в vim:
    - Я не понимаю как мне теперь выйти

    • @СергейКапран-я7п
      @СергейКапран-я7п 3 ปีที่แล้ว +2

      Войти в режим редактирования: I или клавиша Insert
      Выйти из режима редактирования: Esc
      Записать и выйти из vim: :wq (двоеточие, write, quit) либо ZZ (shift + zz)
      Выйти без записи из vim: :q! либо ZQ (принцип с shift сохраняется)
      По vim много документации и видео по настройке

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

      качественный коммент

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

    Нормально лекция началась: "Что-то я это не помню, да и хрен бы с ним" ))

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

    Лучший!

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

    Спасибо🙏

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

    👍

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

    Надо погуглить для нашего друга все заголовки принципа solid, гы гы гы..))
    Подняли настроение прямо вначале.

  • @ВикторБородин-р6с
    @ВикторБородин-р6с 3 ปีที่แล้ว +2

    Кто-нибудь знает, можно ли исправить неправильную отрисовку графиков с помощью numpy? Можно взять к примеру график 1/x. Ветви гиперболы не уходят асимптотически вверх и вниз, вместо этого отрисовывается странный зигзак. Есть так же проблема с поиском предела. Я возможно, неправ, но lim ( x -> 0 ) 1/x не равен бесконечности, как об этом говорит sympy. Предел в любом случае не существует, но то, что в этой точке пределы слева и справа равны -оо и +oo, как я помню, не позволяют написать то, что lim ( x -> 0 ) 1/x = oo

  • @dutik
    @dutik 3 ปีที่แล้ว +1

    За электриков было обидно:))))
    Я про момент с бутылкой водки)))

  • @ИгорьНагибин-у2ж
    @ИгорьНагибин-у2ж 4 หลายเดือนก่อน

    топ

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

    дайте ссылку на GIT плз

  • @SeriesWOT
    @SeriesWOT 3 ปีที่แล้ว +1

    Одобряю

  • @ВалерийКетрис
    @ВалерийКетрис 3 ปีที่แล้ว

    Здравствуйте. У меня вопрос: есть три вида лекций Тимофея( практика программирования на пайтоне, алгоритмы на пайтоне и анализ данных на пайтоне). Я так понимаю, что это один курс по возрастанию сложности. я правильно понимаю? Как он проходит в университете? Я имею ввиду: по каким семестрам и на каких курсах?

    • @svitq368
      @svitq368 3 ปีที่แล้ว

      Если еще нужно , то я так понял 1(возможно начало 2) семестр 1 курса

  • @ПетрНестерович-е5я
    @ПетрНестерович-е5я 3 ปีที่แล้ว +4

    чтобы сделать матрешку надо сделать матрешку...

    • @Мишаня-в7ф
      @Мишаня-в7ф 3 ปีที่แล้ว +1

      чтобы понять матрешку, надо мыслить как матрешка...

  • @АлександрВалерьевич-ц6щ
    @АлександрВалерьевич-ц6щ 3 ปีที่แล้ว +2

    ПОдскажите а где все эти лекции посмотреть, в плейлисте пайтон 20202 только 1 лекция, а на транляции не успеваю никак(

    • @lavrost
      @lavrost 3 ปีที่แล้ว +1

      Они остаются на этом канале

  • @glazalmaz8512
    @glazalmaz8512 3 ปีที่แล้ว +1

    И был класс Таргет.
    И не мог он двигаться.
    И тогда создал Бог класс МовинТаргет.
    Но так как был немного выпимши, то метод Мов прицепил к классу Таргет.
    Зачем он так сделал? Чтобы менеджер мог ДВИГАТЬ НЕПОДВИЖНЫЕ ТАРГЕТЫ!!!
    :facepalm:

  • @xvaleriuc
    @xvaleriuc 3 ปีที่แล้ว +1

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

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

      Я бы сначала русскому языку научился. А так вбиваешь в поисковике «основы программирования», куча ссылок будет. Но я не советую тебе тратить на это время, если даже поиск в интернете у тебя вызывает трудности. Программистам часто приходится искать ответы на их вопросы в интернете и это уже не так просто найти, как основы.

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

      Можно просмотреть гарвардский курс CS50(th-cam.com/video/SW_UCzFO7X0/w-d-xo.html) в переводе от JavaRush, там как раз основы

  • @МаксимНиколаевичЧубин
    @МаксимНиколаевичЧубин 3 ปีที่แล้ว +1

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

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

    Вообще про ООП не понятно ничего

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

    Когда ООПу еще не учили, а его приходилось изучать самому, не было никаких СОЛИД. Были три принципа ООП: наследование, инкапсуляция, полиморфизм. Объекты не для хранения данных, они для исполнения определенного поведения! Координаты х и у никакого отношения к поведению не имеют. Это "коммерческая тайна" объектов как они будут реализовывать своё поведение. Поэтому писать под именем класса в первую очередь данные и лишь во вторую методы - не только не по ООПшному, но и вредно при объяснении ООП.
    Правильно было бы не координаты и скорость вписывать в прямокгольники классов, а вот как:
    - снаряд _появляется_ на экране, _перемещается_ по нему и в конце концов _исчезает_
    - таргет _появляется_ на экране, _перемещается_ по нему, может _исчезнуть_ и _сбросить_ бонбу
    - бонба _появляется_ на экране, _перемещается_ по нему и в конце концов _исчезает_
    - кэннон _появляется_ вместе с экраном, может _стрельнуть_ и может _исчезнуть_
    - все объесты в любое время _показаны_ на экране

    • @ZZZ5204
      @ZZZ5204 3 ปีที่แล้ว

      @GlazAlmaz фигню какую-то пишете, имхо. Вы в своих примерах вообще забыли про атрибуты классов и объектов. Судя по вашему комментарию, под классом вы понимаете ТОЛЬКО КОД(набор методов), при этом игнорируете атрибуты

    • @glazalmaz8512
      @glazalmaz8512 3 ปีที่แล้ว

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

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

    что он пишет?) ввобще ничего не понятно что к чему)

  • @boobubuo
    @boobubuo 3 ปีที่แล้ว +1

    про агрегирование .. так можно любую переменную за агрегирование подтянуть .. тоесть тот же вопрос И ЧО ?

  • @boobubuo
    @boobubuo 3 ปีที่แล้ว +1

    нихера не понял .. про лизу эту .. тоесть есть сын который делает тоже самое .. плюс типа он делает это так же без дополнительных требований .. и ЧО ? в чем суть то ?? ну делает .. дальше ЧТО ? зачем об этом вааабще говорить .. может добавить еще требование что он в космос так же не летает ?