Как вы должны объяснять шаблоны проектирования людям за пределами мира программного обеспечения

10

Я хочу объяснить шаблон дизайна моей племяннице, но всегда борюсь за это. Во многом это связано с отсутствием у меня четкого понимания шаблонов проектирования. Как вы предлагаете объяснять шаблоны, такие как MVC, Singleton, Factory, Repository и т. Д., В таких простых терминах, которые могут понять даже дети 10 лет.

Я ищу примеры, которые могут помочь в понимании моделей. Примеры с игрушками, фильмами, музыкой и т. Д.

gizgok
источник
2
Шаблоны проектирования относятся к разработке программного обеспечения, как теория категорий к математике. , , по крайней мере, так я бы объяснил это математику.
Эрик Уилсон,
Это похоже на чтение разделов с ответами в книгах-головоломках. Вы не будете знать ответ на каждую головоломку, но вы будете знать больше всего, и вы будете знать, с чего начать головоломку, ответ на которую вы еще не видели.
StuperUser

Ответы:

7

Я думаю, что начало статьи в Википедии, вероятно, хорошее начало:

A design pattern is a general reusable solution to a commonly occurring problem.

Или вы хотите объяснить специфику этих конкретных моделей?

Чарли
источник
ищу конкретику
гизгок
1
Есть также простая википедия: secure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
Джефф Уэллинг,
2
@gizgok: "особенности"? Это нелепо. Уточните - подробно - что еще можно пожелать. Желание "специфики" расплывчато.
С.Лотт
5

Это зависит от того, почему вы хотите это объяснить. Если вы просто хотите объяснить идею шаблонов, я бы использовал примеры из архитектуры в A Pattern Language. Эти исследователи обнаружили, что определенные аспекты здания или комнаты заставляют людей получать удовольствие от жизни или работы в этом здании или комнате - во всем мире в разных культурах, с разными строительными материалами и в разных районах. Например, «Свет на двух сторонах». Комнаты с окнами на двух стенах гораздо приятнее, чем комнаты с одним (или ни с одним). Подобные шаблоны существуют и в программном обеспечении - даже при использовании разных языков программирования некоторые шаблоны повторяются. И даже в совсем другом программном обеспечении - игра, что-то для финансовых расчетов, движок внутри Facebook и так далее.

Затем, если вы хотите поговорить о конкретном паттерне (не знаю почему, для десятилетнего ребенка), вы могли бы начать с примеров его использования, прежде чем пытаться объяснить, как он работает. Таким образом, Composite позволяет избежать явной рекурсии, когда вы вычисляете вес чемодана, суммируя вес контейнера и сумму всех контейнеров и незакрепленных вещей, которые он содержит, но он также работает для расчета бремени зарплаты в корпорации. или мощность в производственном комплексе. Если это даже немного интересно для десятилетнего ребенка, вы можете попытаться объяснить, как это работает.

Кейт Грегори
источник
1
Потому что 10 лет хочет стать хакером
gizgok
2

Шаблоны проектирования существуют потому, что некоторые люди поняли, что есть способы заставить части программного обеспечения хорошо работать вместе, и хотели поделиться своим мнением.

Вы можете думать о шаблонах дизайна так же, как о группах людей. Например, иногда у нас есть один человек, который помогает всем нашим встречам. Это похоже на шаблон контроллера, который облегчает взаимодействие между объектами.

Или представьте себе аудиторию, где кто-то в передней части комнаты наблюдает за людьми, поднимающими руки, затем повторяет вопрос, чтобы все остальные могли слышать, или, возможно, реагирует, отвечая на него. Это было бы похоже на шаблон Subject / Observer.

Существуют шаблоны, которые ведут себя как трансляторы (шаблон адаптера), как охранники (прокси-сервер), как эксперты в поле (Singletons) или как люди, которые проверяют, работает ли ваша машина (валидаторы).

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

Lunivore
источник
1

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

kett_chup
источник
1

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

Vartec
источник
1
Большинство шаблонов проектирования - это инструкции о том, как использовать правильные абстракции для решения конкретной проблемы. По сути, они не являются частью объектно-ориентированного дизайна.
Пемдас
@Pemdas: возьмите Фабрику для примера. Какой смысл это имеет вне ООП?
vartec
ООП - это то место, где больше всего говорят о шаблонах, но у других языков есть свои собственные наборы шаблонов. Например, монады (часто встречающиеся в функциональных языках, иногда могут быть выполнены в ООП) сами по себе являются паттернами и включают другие паттерны. Кроме того, как уже упоминалось, шаблоны проектирования пришли в программирование из архитектуры.
Чарли
Шаблоны проектирования не имеют ничего общего с ООП. Шаблоны проектирования - это проблемы, которые возникают снова и снова, и стратегии, разработанные для решения проблем. Если стратегия разрабатывается неоднократно, то у вас есть шаблон. Если стратегия многократно работает, то вы называете это шаблоном проектирования, а если она несколько раз терпит неудачу, вы называете ее анти-шаблоном. Изучение шаблонов проектирования означает изучение стратегий, которые неоднократно работали в прошлом. Видишь, как я вообще не упоминал программирование, а тем более ООП?
gnasher729
0

Шаблоны проектирования были впервые описаны для архитектуры. Такие вещи, как расположение площади, здания и другие, как правило, повторяющиеся макеты. Вы можете начать там. Такие вещи, как главный вход, выходят на улицу, дверь в угол комнаты и все, что только можно придумать. Оригинальные авторские образцы не получили широкого распространения. Сообщается, что теперь он заявляет, что самих моделей недостаточно.

Обсудите перемещение предметов по комнате. Поставьте стул перед дверью. Имеет ли смысл перенести окна или двери в другое место. Почему или почему нет?

Попробуйте что-то вроде установки места за столом. Попробуйте расположить вещи по размеру, удаляясь от вас. Не нормальная картина и трудно работать. Настройте это нормально. Это подходящий макет для быстрого стакана сока? Шаблоны не всегда уместны.

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

BillThor
источник
0

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

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

Стивен Эверс
источник
0

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

одиночка

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

Википедия

MVC

Этот шаблон используется, чтобы сохранить модульность вещей со всеми вытекающими отсюда преимуществами. Представление - это «пользовательский интерфейс», Модель - это данные (включая бизнес-логику), а Контроллер - это то, как действия пользователя манипулируют моделью. Благодаря этой модульности ничто не мешает мне иметь несколько представлений / контроллеров для работы с одной и той же моделью. Для упрощенного примера я могу взаимодействовать со своей электронной почтой («модель») через веб-сайт, настольное приложение и мой iPhone («виды + контроллеры»). Если у меня есть общий почтовый ящик группы, я мог бы создать контроллер, который не будет отправлять электронную почту, и повторно использовать тот же вид приложения и электронную почту. (да слишком упрощенно, но, надеюсь, понятно :))

Кроме того, при этом четко определенном разделении проблем изменения в одном (в идеале) не требуют изменений в другом. Конкретный пример: если мне нужно поддерживать чтение / запись в базу данных MySQL вместо базы данных Oracle, мне нужно будет только изменить мою модель, и мой взгляд / контроллер не изменится.

Википедия

завод

Здесь нужно быть осторожным, так как есть много похожих шаблонов, называемых Фабрикой ... Я расскажу об Абстрактной Фабрике , но вы должны знать, что существует также шаблон Фабричного Метода .

По сути, я бы использовал Абстрактную Фабрику, когда знаю, какие шаги я хочу выполнить, но шаги по выполнению этих отдельных шагов могут отличаться. Например, я мог бы создать приложение, в котором мне нужно создать диалоговое окно с кнопкой на нем. Поскольку мой код использует гипотетическую фабрику пользовательского интерфейса, если мне нужен мой код на Mac или Linux вместо Windows, я просто предоставляю другую фабрику, а остальная часть моего кода не меняется. В качестве более дикого примера, я мог бы создать Web Factory, и внезапно большая часть кода, поддерживающего мое настольное приложение, теперь также питает богатый веб-сайт :) (хорошо, непрактично по другим причинам, но в теории :))

Чарли
источник
0

Для 10-летнего, который хочет быть хакером - я бы сказал.

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

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

Но в основном ей нужно учить их через наставничество.

Стивен Бейли
источник