Шаблоны разработки ПО. Шаблоны GoF. Часть 1

Поделиться
HTML-код
  • Опубликовано: 14 окт 2024
  • Шаблоны разработки ПО. (Design patterns) Шаблоны GoF. Abstract Factory, Factory method
    Все материалы по курсу можно найти здесь: www.slideshare....
    Курсы Android bit.ly/2DLYpcG
    Курсы Front-End bit.ly/2zpZ14M
    Сайт учебного центра: bit.ly/2Dw4dbD

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

  • @nikitos23kh
    @nikitos23kh 2 года назад +4

    На данный момент, это лучшее что есть на ютубе про патерны, Сергей, респект

    • @alexandrapersukova
      @alexandrapersukova 2 года назад +1

      Спасибо :). У нас 1.11 стартует новый поток по GRASP & GOF DESIGN PATTERNS. В пакете Platinum есть проверка заданий, участие в онлайн вебинарах с Сергеем и перезаписанные в качестве лекции.

  • @glebovskimalcovich207
    @glebovskimalcovich207 Год назад +1

    Очень полезно про factory method. Сколько я читал в интернете про factory method до меня ни как не доходило зачем для создания каждой реализации интерфейса создавать отдельный класс создатель, оказалось просто незачем, и лучше пользоватся simple factory.

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

    Сильно объяснили, особенно по теме Factory Method. Спасибо большое.

  • @АндрейРогацкий
    @АндрейРогацкий 4 года назад +10

    0:33 - О шаблонах GoF
    1:59 - Типы шаблонов
    5:13 - Абстрактная фабрика
    26:53 - Абстрактная фабрика. Критика
    30:20 - Фабричный метод

  • @MaceUA
    @MaceUA 9 лет назад +6

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

  • @xfgweb
    @xfgweb 4 года назад +4

    Неверно объясняет фабричный метод. В GoF подразумевалось, что когда внутри некоторого класса требуется использовать объект другого класса и при этом мы не хотим завязываться на конкретную реализацию, то можно создать фабричный метод, а сам класс сделать абстрактным. Таким образом получается что вся логика находится в абстрактном классе, а наследники абстрактного класса реализуя фабричный метод могут подменять объект, который используется в родительском классе. Шаблон позволяет переложить выбор конкретного объекта на классы наследники, а не принимать это решение на этапе проектирования родительского класса. Этот шаблон лучше объяснять после шаблона Template method, потому что они похожи и я думаю что в головах авторов template method и являлся прародителем фабричного метода. То что автор объяснил это не фабричный метод, это процедурная лапша на свитчах.

    • @askolit1458
      @askolit1458 5 месяцев назад

      Мне с трудом удалось разобрать ваш текст, но, кажется, что именно это лекция и подразумевала. По поводу свитчей - в GoF есть подобная реализация, и, по моему, вам не стоило бы говорить, что они подразумевали, когда писали книгу, потому что это ваще субьективное мнение. Но есть реальность, где в книге есть пример с процедурной лапшой на свитчах (на ифах):
      class Creator {
      public:
      virtual Product* Create(ProductId);
      };
      Product* Creator::Create (ProductId id) {
      if (id == MINE) return new MyProduct;
      if (id == YOURS) return new YourProduct;
      // repeat for remaining products...
      return 0;
      }
      Паттерны не имеют цели убрать ифы или свитчи, там все про композицию и правильное взаимодействие между обьектами, что само по себе делает количество ифов меньшим, а саму програму понятной, легко расшираемой и гибкой.

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

    Спасибо, очень подробно и понятно!

  • @123teddybear321
    @123teddybear321 4 года назад +1

    23:23. "Почему не скомпилируется? это скомпилируется. Это С++. Просто при попытке вызова вот здесь будет exception" - .. эммм.... да, скомпилируется, но не слинкуется. так что exception там не будет. exception - это run-time, а запускать будет нечего, ибо раз не слинкуется, то не будет бинарника. Вот именно что это с++. В остальном - спасибо, красиво и точно изложено.

  • @АлександрЛебедько-д6м

    Здравствуйте, Сергей!
    Есть ли оптимальный способ реализации factory method при постоянно растущей иерархии наследников? Нормально ли, постоянно увеличивающееся количество if в фабричном методе ?
    Заранее спасибо!

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

    Thanks so much for this video tutorial.

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

    О блин, капец. В это время он ещё не был Сергеем Немчинским

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

    А чем Абстрактная фабрика отличается от Стратегии? В стратегии ведь также объявляется интерфейс и в него подставляются нужные реализации. Здесь тоже есть абстрактный класс файбрики, в которую подставляются конкретные реализации ВинФабрики и МакФабрики.

  • @ventilyator
    @ventilyator 6 лет назад +5

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

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

    Не очень то мне нравится что то factory method...
    Выходит что базовый класс обязан знать всех своих наследников. Как то не очень удобно. Добавляя новый класс, прийдется дописывать базовый, что не айс. :)
    А так, очень даже интересно :)

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

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

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

    Если классы наследуются не для полиморфизма, а для наследования общей логики, и вдруг в клиенте нужен геттер именно конкретного класса, то приходится использовать приведение типа к конкретному классу. Вся логика рушится, клиент зависит еще и от наследника. Как развязать? Ставить всем наследникам геттер с заглушками, проверять потом NULL или смириться с приведением?

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

      геттер вообще не очень хорошее решение. Попробуйте использовать принцип Tell, dont ask

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

      @@SergeyNemchinskiy Спасибо!

  • @philimonovoleg
    @philimonovoleg 11 лет назад +3

    Плохо, что билдера пропустили...

  • @ComradePashka
    @ComradePashka 5 лет назад +3

    1:52 случайно включил титры:
    "...так что видели сразу низкой где этом книжка порно львов -- википедия спасет всех"
    :-) так дальше еще веселее -- микрофончик бы Вам.

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 4 года назад +2

    Сергей, спасибо. Но остался самый важный для меня вопрос. Это точно не попытка уколоть, а желание разобраться в происходящем. Поэтому прошу не обижаться и ответить на него: Почему вы в лекции употребляете жаргоны и иностранные слова вместо наиболее точных и широко понятных русских слов?
    Дело в том, что таким образом вы закладываете использование таких слов в среде Ваших учеников. Очевидно, это способствует Вашей популярности и авторитету в среде обучающейся молодёжи, притоку учеников. Но это мешает пониманию значения и сути употребляемых слов. А как следствие приводит к абстрактному значению высказываемых ими предложений, сложности ясно понять и однозначно описать задачу. И как результат появляются проблемы взаимодействия при построении большой сложной системы так обученными программистами. А это уменьшает вероятность успешной автоматизации и создания надёжной удобной системы.

    • @Алекс-ы4с2п
      @Алекс-ы4с2п 4 года назад +1

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

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

      ​@@Алекс-ы4с2п Рад за остроту Вашего зрения и обоняния.
      Английский язык действительно поможет во многих случаях. Но
      лекция на русском языке. И употребление в ней, например, слова паттерны, вносит путаницу сразу с 2 словами: шаблоны и patterns. Это добавляет лишней работы головному мозгу для поиска наиболее подходящего слова для понимания смысла, отсекание связей с менее подходящими словами.
      Кроме того запоминание слова "паттерны" вместо patterns вряд ли поможет взаимодействовать с зарубежными заказчиками или программистами.
      Проясните, пожалуйста, "пример употребления" кем и чего Вы меня спрашиваете?

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

      В ожидании ответа мои мозги не перестали работать и нашли свой:
      Я думаю, что причина в плохом переводе с иностранного языка.
      Затрудняясь подобрать наиболее подходящее слово переводчик делает заимствование иностранного слова. Читатель также не может ясно понять смысл этого слова, но боится показать своё незнание. Поэтому додумывает смысл сам как получится. И использует именно это слово, чтобы не ошибиться в переводе. Заимствование постепенно становится известным словом и даже стандартом в узком кругу..
      Похоже на действительность? :)

  • @mykolagg706
    @mykolagg706 5 лет назад +3

    Лектор не знаєт что такое абстрактная фабрика, одним словом больше теоретик чем практик, уверен что если ему дать написать код то он не сделает Абстрактную фабрику без подказок с интернет.

  • @ПашаХЗ-м8й
    @ПашаХЗ-м8й 8 лет назад

    В С++ методы называют функциями-член

  • @kn1ght-blockstrike507
    @kn1ght-blockstrike507 6 лет назад

    777