Базовые сведения о шаблонах проектирования

Шаблоны (или паттерны) проектирования (design patterns) – это многократно используемые решения распространённых проблем, возникающих при разработке программного обеспечения. По мере накопления личного опыта и профессионального роста программист обычно замечает сходство новых задач проектирования с задачами, решёнными им ранее. В дальнейшем приходит осознание того, что решения похожих проблем представляют собой повторяющиеся шаблоны[1]. Зная эти шаблоны, опытные программисты распознают ситуации их применения и сразу используют готовое решение, не тратя времени на предварительный анализ проблемы.

Историю шаблонов проектирования принято начинать с книг архитектора Кристофера Александера (Christopher Alexander). В семидесятых годах двадцатого века он составил набор шаблонов для применения в строительной архитектуре и городском планировании. Однако в области архитектуры эта идея не получила такого развития, как позже в области программной разработки. В 1987 году Кент Бек (Kent Beck) и Уорд Каннингем (Ward Cunningham) использовали некоторые идеи Александера и разработали несколько шаблонов на языке Smalltalk. В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую работу при Цюрихском университете об общей переносимости методики Александера на разработку программ. В 1991 году Гамма заканчивает свою диссертацию и в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и Джоном Влиссидсом (John Vlissides) публикует книгу «Design Patterns: Elements of Reusable Object-Oriented Software»[2]. В книге были описаны 23 шаблона проектирования. «Design Patterns» стала причиной роста популярности шаблонов, а сами шаблоны из книги начали называть классическими. В дальнейшем список шаблонов пополнялся и адаптировался для различных языков программирования.

Рассмотрим аргументы «за» и «против» применения шаблонов проектирования. Главная польза каждого отдельного шаблона состоит в том, что он описывает решение целого класса абстрактных проблем. Тот факт, что каждый шаблон имеет своё имя, облегчает дискуссию между разработчиками. Таким образом, за счёт шаблонов производится унификация терминологии, названий модулей и элементов проекта. Однако есть мнение, что слепое применение шаблонов из справочника, без осмысления причин и предпосылок выделения шаблона, замедляет профессиональный рост программиста, так как подменяет творческую работу механической подстановкой. Люди, придерживающиеся данного мнения, считают, что знакомиться со списками шаблонов следует тогда, когда программист «дорос» до них в профессиональном плане. Хороший критерий нужной степени профессионализма – выделение шаблонов самостоятельно, на основании собственного опыта. При этом, разумеется, знакомство с теорией, связанной с шаблонами, полезно на любом уровне профессионализма и направляет развитие программиста в правильную сторону.

Далее будут рассмотрены основные шаблоны проектирования, разбитые на группы. Существует несколько способов группировки шаблонов. Ниже представлена классификация в зависимости от назначения:

1. Структурные шаблоны (structural patterns) – показывают, как объекты и классы объединяются для образования сложных структур.

2. Порождающие шаблоны (creational patterns) – контролируют процесс создания и жизненный цикл объектов.

3. Шаблоны поведения (behavioral patterns) – используются для организации, управления и объединения различных вариантов поведения объектов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: