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

Sdílet
Vložit
  • čas přidán 22. 10. 2013
  • Шаблоны разработки ПО. (Design patterns) Шаблоны GoF. Abstract Factory, Factory method
    Все материалы по курсу можно найти здесь: www.slideshare.net/SergeyNemch...
    Курсы Android bit.ly/2DLYpcG
    Курсы Front-End bit.ly/2zpZ14M
    Сайт учебного центра: bit.ly/2Dw4dbD

Komentáře • 31

  • @nikitos23kh
    @nikitos23kh Před rokem +2

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

    • @alexandrapersukova
      @alexandrapersukova Před rokem +1

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

  • @rakymzhankenzhegul8630
    @rakymzhankenzhegul8630 Před 2 lety +1

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

  • @glebovskimalcovich207
    @glebovskimalcovich207 Před 11 měsíci +1

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

  • @maksim7093
    @maksim7093 Před 10 lety +1

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

  • @user-sz2yh3rp6z
    @user-sz2yh3rp6z Před 3 lety +9

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

  • @romantsyupryk3009
    @romantsyupryk3009 Před 4 lety

    Thanks so much for this video tutorial.

  • @MaceUA
    @MaceUA Před 9 lety +5

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

  • @D6t1qO2rZZ_9DcHLg
    @D6t1qO2rZZ_9DcHLg Před 3 lety +1

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

  • @user-wd8sc4ix2m
    @user-wd8sc4ix2m Před 7 lety +2

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

  • @xfg9183
    @xfg9183 Před 3 lety +4

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

    • @askolit1458
      @askolit1458 Před 2 měsíci

      Мне с трудом удалось разобрать ваш текст, но, кажется, что именно это лекция и подразумевала. По поводу свитчей - в 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;
      }
      Паттерны не имеют цели убрать ифы или свитчи, там все про композицию и правильное взаимодействие между обьектами, что само по себе делает количество ифов меньшим, а саму програму понятной, легко расшираемой и гибкой.

  • @123teddybear321
    @123teddybear321 Před 4 lety +1

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

  • @septembercult985
    @septembercult985 Před 3 lety

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

  • @ventilyator
    @ventilyator Před 5 lety +5

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

  • @ruslankudriachenko5673
    @ruslankudriachenko5673 Před 9 lety +2

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

    • @antonbandarchyk4198
      @antonbandarchyk4198 Před 6 lety +1

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

  • @philimonovoleg
    @philimonovoleg Před 10 lety +3

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

  • @ComradePashka
    @ComradePashka Před 5 lety +3

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

  • @ShurikProg
    @ShurikProg Před 2 lety

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

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  Před 2 lety

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

    • @ShurikProg
      @ShurikProg Před 2 lety

      @@SergeyNemchinskiy Спасибо!

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 Před 3 lety +2

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

    • @user-ek9bv1ek9c
      @user-ek9bv1ek9c Před 3 lety +1

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

    • @konstantinchvilyov9602
      @konstantinchvilyov9602 Před 3 lety +1

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

    • @konstantinchvilyov9602
      @konstantinchvilyov9602 Před 3 lety +1

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

  • @kn1ght-blockstrike507
    @kn1ght-blockstrike507 Před 5 lety

    777

  • @user-is4ji8mr7j
    @user-is4ji8mr7j Před 8 lety

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

  • @mykolagg706
    @mykolagg706 Před 5 lety +3

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