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

Поделиться
HTML-код
  • Опубликовано: 1 ноя 2024

Комментарии • 61

  • @hameltomor
    @hameltomor 9 лет назад +52

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

  • @AlluringStuff
    @AlluringStuff 7 лет назад +12

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

  • @danielginzburg2924
    @danielginzburg2924 4 года назад +6

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

  • @denistalko6585
    @denistalko6585 3 года назад +2

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

  • @dmytrodemydenko
    @dmytrodemydenko 6 лет назад +2

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

  • @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 на уровне конкретного языка. Другие модификаторы доступа можно получить с помощью комбинации имеющихся (не лучший вариант) или использовать диаграммы для конкретного языка, где уже придуманы свои обозначения.

  • @АндрейСолонцевой
    @АндрейСолонцевой 5 лет назад +21

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

  • @dmitrypopov5056
    @dmitrypopov5056 10 лет назад +4

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

  • @serjchernyh8715
    @serjchernyh8715 10 лет назад +1

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

  • @viktorsoroka4510
    @viktorsoroka4510 9 лет назад +2

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

  • @SHURmandroid
    @SHURmandroid 10 лет назад +2

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

  • @cyrilanisimov
    @cyrilanisimov 3 года назад

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

  • @YasnaKo
    @YasnaKo 3 года назад +1

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

  • @farenoy6848
    @farenoy6848 3 года назад +2

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

  • @olek_tar
    @olek_tar 10 лет назад +2

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

  • @kolobokhexopod5423
    @kolobokhexopod5423 10 лет назад +7

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

    • @0imax
      @0imax 6 лет назад +2

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

  • @NorthSea-xb7jk
    @NorthSea-xb7jk 8 месяцев назад

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

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Год назад

    Спасибо!

  • @Mike19910711
    @Mike19910711 4 года назад

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

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 года назад

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

  • @АндрейБалакирев-ц6ы
    @АндрейБалакирев-ц6ы 4 года назад +4

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

    • @codingfox
      @codingfox 4 года назад +1

      и не говори)

    • @паносниглайдер
      @паносниглайдер 4 года назад

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

    • @0imax
      @0imax 3 года назад +1

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

  • @faridnadirov5472
    @faridnadirov5472 6 лет назад +1

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

  • @ЕвгенийЛазарев-ь9п
    @ЕвгенийЛазарев-ь9п 5 лет назад +2

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

    • @vlad_apostol
      @vlad_apostol 5 лет назад +5

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

  • @kirillkir6268
    @kirillkir6268 Год назад

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

  • @rusnickk
    @rusnickk 8 лет назад

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

  • @global_silence2623
    @global_silence2623 6 лет назад

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

  • @MrSergeyUSA
    @MrSergeyUSA 8 лет назад

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

    • @MrSergeyUSA
      @MrSergeyUSA 8 лет назад

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

    • @Ma_X64
      @Ma_X64 6 лет назад

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

  • @sergeyltk
    @sergeyltk 4 года назад +1

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

  • @kaynsolo
    @kaynsolo 6 лет назад +2

    Like!

  • @1Cry1987
    @1Cry1987 7 лет назад

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

  • @1Cry1987
    @1Cry1987 7 лет назад +1

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

  • @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. Но это и не оригинальная реализация паттерна, а лишь его интерпретация

  • @Megapixxxell
    @Megapixxxell 5 лет назад

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

    • @helavin4ik
      @helavin4ik 5 лет назад

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

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 2 года назад

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

  • @leon4uk
    @leon4uk 9 лет назад +3

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

  • @maddjimi8854
    @maddjimi8854 7 лет назад +3

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

    • @ЛешаБежелев
      @ЛешаБежелев 7 лет назад +1

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

    • @0imax
      @0imax 5 лет назад

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

    • @владимирсенцов-р1ю
      @владимирсенцов-р1ю 5 лет назад

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

  • @g19m74
    @g19m74 2 года назад

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

  • @libx75
    @libx75 6 лет назад +1

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