Шаблоны разработки. ООП и основы UML

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 ก.ย. 2024
  • Обновленный курс GRASP and GoF Design patterns - bit.ly/3m8T19A
    💪 ПРОКАЧАЙ СВОИ ХАРД-СКИЛЛЫ ЗА 2 МЕСЯЦА!
    Вводная лекция курса "Шаблоны разработки программного обеспечения". Основы ООП. Основы UML. Плейлист: • Шаблоны разработки. Вв...
    Все материалы курса лекций (включая конспект лекций) на моем канале на SlideShare: www.slideshare....
    Изучение C#/.Net bit.ly/2P5JKuM
    Изучение Blockchain developer bit.ly/2KF1Y60
    Сайт учебного центра: bit.ly/2N3ckw6

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

  • @hameltomor
    @hameltomor 9 ปีที่แล้ว +52

    Это самые лучшие лекция которые я только видел! Легко, доступно и понятно. Большое Вам спасибо)

  • @АндрейСолонцевой
    @АндрейСолонцевой 5 ปีที่แล้ว +21

    Полиморфизм - это поддержка нескольких реализаций на основе общего интерфейса. Matt Zandstra

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil ปีที่แล้ว

      Слишком общо. Не передаёт суть

  • @dutnum5766
    @dutnum5766 9 ปีที่แล้ว +35

    Обозначение уровня доступа на UML диаграммах:
    + public
    - private
    # protected
    ~ package

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

      internal?
      protected internal?
      private protected?
      sealed?

    • @hristy-A
      @hristy-A 3 ปีที่แล้ว

      @@AnaRxistBoD package - это и есть internal, только package - это абстрактно, на уровне диаграмм UML, а internal на уровне конкретного языка. Другие модификаторы доступа можно получить с помощью комбинации имеющихся (не лучший вариант) или использовать диаграммы для конкретного языка, где уже придуманы свои обозначения.

  • @kolobokhexopod5423
    @kolobokhexopod5423 10 ปีที่แล้ว +7

    Перегрузка методов и функций (в случае C++) также считается полиморфизмом, но только статическим (compile time). Виртуальные методы класса обеспечивают динамический полиморфизм (runtime). Полиморфизм - это когда один и тот-же кусок кода выполняет разную работу в зависимости от внешних факторов - конкретного типа объекта скрывающегося за указателем на базовый класс, типа аргумента при вызове функции, и тп. Заменили один указатель на базовый класс на другой, и при вызове виртуальной функции через этот указатель код уже делает что-то другое. Или при вызове функции поменяли аргумент одного типа на аргумент другого типа - получили совсем другое поведение (пример статического полиморфизма).
    Я понимаю полиморфизм, как способность оперировать объектами разных типов в обобщенном виде, способность писать общие алгоритмы для обработки объектов являющихся потомками некоторого базового класса.
    Инкапсуляция позволяет поддерживать объекты и части системы в непротиворечивом состоянии.
    Наследование - инструмент, позволяющий обобщать свойства и поведение объектов.
    Строго говоря, полиморфизм не является прерогативой объектно-ориентированного подхода. Можно использовать полиморфизм программируя на чистом C. Например, используя указатели на функции можно получить такой-же эффект как от полиморфизма в ОО языках.

    • @0imax
      @0imax 6 ปีที่แล้ว +2

      Да, в книжках по C++ перегрузку часто называют статическим полиморфизмом.
      Но мне кажется, не стОит смешивать понятия "перегрузка" и "полиморфизм", дабы не было путаницы.
      Перегрузка обычно используется, чтобы одной и той же функции можно было скормить разные типы данных, но при этом действия над ними производились одинаковые или очень похожие.
      Полиморфизм в контексте ООП преследует другие цели - менять поведение *объекта* в зависимости от типа самого объекта, при том что входные данные одного типа.
      Можно построить полиморфизм на перегрузке, но это будет коряво и бессмысленно)

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

    нам не важно сколько ты проектов успешных сделал, не важно, что на твоем софте работают бесперебойно серьезные объекты (не те которые в ООП, а те, где живут и трудятся сотни и даже тысячи людей - в режиме реалтаим). нам надо чтобы ты знал что такое паттерны

  • @AlluringStuff
    @AlluringStuff 7 ปีที่แล้ว +12

    Смотрю на одном дыхании! Лучшей подачи материала я еще не видел!

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

    Сергей вы молодец! Вы один из лучших лекторов. Большое вам спасибо!

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

    Прекрасные лекции! Спасибо огромное, очень интересно и полезно! Рассказывается доступно, живо, невероятно интересно. Очень классно!

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

    Все хорошо, вот только OrderItem и Good это DTO, а распределение калькуляции это нарушение Сингл Респонсибилити калькулятора)

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

    Вывела для себя тезис:
    - Наследование строить снизу вверх, а не сверху вниз.

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

    Я ❤️ Сергея Немчинского

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

    А разве язык программирования (Java / c++) и способ очистки памяти является ключевым критерием в определении того, какой тип ассоциации использовать? Там вроде логический критерий, когда лучше агрегация, а когда композиция. В агрегации плюсом идёт гибкость, а в композиции - скрытие от глаз клиента деталей реализации. Ну, это моё понимание.

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

    Большое спасибо за лекции, они шикарны.

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

    Как ребятам повезло. Педагог с большой буквы

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

    Спасибо за "продолжение мучений"... :-)

  • @ЕвгенийЛазарев-ь9п
    @ЕвгенийЛазарев-ь9п 5 ปีที่แล้ว +2

    На слайдах везде 2008. Сейчас актуально все?

    • @vlad_apostol
      @vlad_apostol 5 ปีที่แล้ว +5

      безусловно, парадигма не стареет

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

    Здорово! И с юмором и, что самое главное, все по делу. Спасибо)

  • @NorthSea-xb7jk
    @NorthSea-xb7jk 7 หลายเดือนก่อน

    сабскрайбнулся, досмотрю , оценю

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

    Еще раз огромное спасибо за лекции.Век живи, век учись.Многое для себя открыл.Понял, что был "хитрым программистом" :)

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

    А лектор фанат группы Amaranthe ;)

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

    Классная лекция! Спасибо!

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

    Like!

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 2 ปีที่แล้ว

    Вообще-то жесткая зависимость - агрегация… has a. Relationship “is a” less then aggregation

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

    Заканали фоновые бла бла бла

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

    Разве creator не конфликтует с принципом инверсией зависимости? Каждый раз когда один класс напрямую порождает объект другого класса между ними возникает жесткая связь.

    • @0imax
      @0imax 3 ปีที่แล้ว

      Любое создание объектов нарушает IoC, поскольку в итоге всё-равно нужно явно указать конкретный класс, будь это обычное создание класса, через фабрику или ещё как-то.
      Так что ничего страшного в этом нарушении нет. Принципы можно и нужно нарушать, если это делается во благо, как, например, тот же Factory method нарушает принцип Low coupling: класс, создающий подклассы, знает о всех своих наследниках.

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

      ​@@0imax Именно из-за нарушения DIP создание объектов и инкапсулируется в фабрики. Принцип creator действительно нарушает DIP, так как создает объекты в runtime, а не на этапе инициализации программы (Clean code, глава 11). Фабричный же метод (в оригинале) DIP не нарушает, так как все зависимости в самой программе направлены на абстракции, а реализацию создания объекта можно подменить, подставив другую реализацию создающего объекта (фабрики). Если реализовывать паттерн, как рассказывал Сергей (через статичные методы), то да, это нарушение DIP. Но это и не оригинальная реализация паттерна, а лишь его интерпретация

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil ปีที่แล้ว

    Спасибо!

  • @1Cry1987
    @1Cry1987 7 ปีที่แล้ว

    Шаблон Creator предполагает, что публичный интерфейс калькулятора будет содержать все методы, необходимые для манипулирования сокрытых классов. Хорошо. А если сокрытых классов 10? 20? Это же будет God Class, не иначе.
    И к тому же, если ListItem будет создаваться напрямую в Calculator, как тестировать этот код?

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

    аааааа! волосатый Немчинский!! Привет из 2021

  • @rusnickk
    @rusnickk 8 ปีที่แล้ว

    спасибо за интересную лекцию, возник такой вопрос: если для получения price необходимо обращение к базе данных для чего используется экземпляр класса, скажем, DataBaseProvider, до как передается ссылка на этот объект экземпляру OderItem?

  • @global_silence2623
    @global_silence2623 6 ปีที่แล้ว

    Правильно ли я понял, что "Агрегацию" нужно рисовать между классами А и В ромбиком в сторону класса А, если А содержит поле List?
    И еще. Верно ли я понимаю, что если мы воспринимаем обычную стрелочку, как создание экземпляра класса и вызова каких-то методов, то стартовый класс main может быть просто утыкан этими обычными стрелками?

  • @АндрейБалакирев-ц6ы
    @АндрейБалакирев-ц6ы 4 ปีที่แล้ว +4

    6 лет прошло!
    До сих пор актуально

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

      и не говори)

    • @паносниглайдер
      @паносниглайдер 4 ปีที่แล้ว

      Лекция вроде от 2008 года

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

      И будет ещё лет 20 минимум.

  • @Mike19910711
    @Mike19910711 4 ปีที่แล้ว

    Про UML. Стрелка Association показывает, что один объект (от которого идёт стрелка) содержит в поле другой объект (тот, куда направлена стрелка). Аналогичная стрелка, но прерывистая (Dependency) означает, что класс, от которого идёт стрелка, в одном из методов принимает в качестве параметра или возвращает в каком-нибудь методе объект класса, на который направлена стрелка.

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 ปีที่แล้ว

      Я вам рассказал то, как эти стрелки будут читать ваши коллеги. Как они задуманы разработчиками - всем пофиг. Реальная жизнь говорит - вот так :) Можно ее игнорировать, но смысл?

  • @MrSergeyUSA
    @MrSergeyUSA 8 ปีที่แล้ว

    Спасибо за видео!
    Скажите по вашему какое отношение больше подходит для классов Директория и Файл?

    • @MrSergeyUSA
      @MrSergeyUSA 8 ปีที่แล้ว

      +Sergey Nemchinsky с точки зрения может ли существовать абстрактный файл без абстрактного каталога вообще, если каталогами считать все устройства с их корневыми папками.

    • @Ma_X64
      @Ma_X64 6 ปีที่แล้ว

      На уровне файловой системы всё есть файл. и каталог - тоже файл, и порт - файл (в линухе уж точно), и принтер - файл. Тем не менее, в ОС ведь всегда существует корневая директория. Потому что это удобно и с точки зрения пользователя выглядит логично. Поэтому нужно выбирать тот вариант, который будет удобен с точки зрения конечного пользователя того, что ты пишешь.

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

    Народ вот хвалит, а я так думаю зря...
    Объяснение, например, полиморфизма крайне плохое и косноязычное.
    Если человек уже не знает, что это такое ни хрена не будет понятно.

    • @ЛешаБежелев
      @ЛешаБежелев 7 ปีที่แล้ว +1

      суть курса в том, что люди уже знают основы

    • @0imax
      @0imax 5 ปีที่แล้ว

      Mad Djimi
      Курс паттернов следует смотреть, зная основы ООП, а лучше проработав пару лет, чтобы было понятно вообще о чём речь.
      Не зря этот курс находится у Сергея в плейлисте "для опытных разработчиков" :)

    • @владимирсенцов-р1ю
      @владимирсенцов-р1ю 5 ปีที่แล้ว

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

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

    Лучший лектор!

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

    Да никто не спрашивает на собеседованиях к примеру что такое полиморфизм и вообще про парадигмы. Все пытаются спросить подковыристый вопрос даже не на тему абстракции, а типа - есть хомяк, а утром его нет. Куда делся хомяк. Вот смотря как ответишь, так и возьмут тебя на работу. А еще спросят про китайский язык.

  • @Megapixxxell
    @Megapixxxell 5 ปีที่แล้ว

    ссылка на материалы лекций не SlideShare не работает =(

    • @helavin4ik
      @helavin4ik 5 ปีที่แล้ว

      Работает, только что скачал

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

    раз уж начал - досмотрел до конца. но больше никаких лекций от этого автора ни за что.