Лучшие вопросы
Таймлайн
Чат
Перспективы

Шаблон проектирования

Из Википедии, свободной энциклопедии

Remove ads

Шаблон проектирования (паттерн, от англ. design pattern) — повторяемая архитектурная конструкция в сфере проектирования программного обеспечения, предлагающая решение проблемы проектирования в рамках некоторого часто возникающего контекста.

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

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

На наивысшем уровне существуют архитектурные шаблоны, они охватывают собой архитектуру всей программной системы.

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

Remove ads

История

Суммиров вкратце
Перспектива

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

В 1987 году Кент Бэк (Kent Beck) и Вард Каннингем (Ward Cunningham) взяли идеи Александера и разработали шаблоны применительно к разработке программного обеспечения для разработки графических оболочек на языке Smalltalk.

В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую диссертацию при Цюрихском университете об общей переносимости этой методики на разработку программ.

В 1989—1991 годах Джеймс Коплин (James Coplien) трудился над разработкой идиом для программирования на C++ и опубликовал в 1991 году книгу «Advanced C++ Idioms».

В этом же году Эрих Гамма заканчивает свою докторскую диссертацию и переезжает в США, где в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и Джоном Влиссидесом (John Vlissides) публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software. В этой книге описаны 23 шаблона проектирования. Также команда авторов этой книги известна общественности под названием «Банда четырёх» (англ. Gang of Four, часто сокращается до GoF). Именно эта книга стала причиной роста популярности шаблонов проектирования.

Remove ads

Плюсы

В сравнении с полностью самостоятельным проектированием шаблоны обладают рядом преимуществ. Основная польза от использования шаблонов состоит в снижении сложности разработки за счёт готовых абстракций для решения целого класса проблем. Шаблон даёт решению своё имя, что облегчает коммуникацию между разработчиками, позволяя ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация деталей решений: модулей, элементов проекта, — снижается количество ошибок. Применение шаблонов концептуально сродни использованию готовых библиотек кода. Правильно сформулированный шаблон проектирования позволяет, отыскав удачное решение, пользоваться им снова и снова. Набор шаблонов помогает разработчику выбрать возможный, наиболее подходящий вариант проектирования.[1]

Remove ads

Минусы

Суммиров вкратце
Перспектива

Хотя легкое изменение кода под известный шаблон может упростить понимание кода, по мнению Стива Макконнелла, с применением шаблонов могут быть связаны две сложности. Во-первых, слепое следование некоторому выбранному шаблону может привести к усложнению программы. Во-вторых, у разработчика может возникнуть желание попробовать некоторый шаблон в деле без особых оснований (см. Золотой молоток).[2]

Многие шаблоны проектирования в объектно-ориентированном проектировании можно рассматривать как идиоматическое воспроизведение элементов функциональных языков[3]. Питер Норвиг утверждает, что 16 из 23 шаблонов, описанных в книге «Банды четырёх», в динамически-типизируемых языках реализуются существенно проще, чем в C++, либо оказываются незаметны[4]. Пол Грэхэм считает саму идею шаблонов проектирования — антипаттерном, сигналом о том, что система не обладает достаточным уровнем абстракции, и необходима её тщательная переработка[5]. Нетрудно видеть, что само определение шаблона как «готового решения, но не прямого обращения к библиотеке» по сути означает отказ от повторного использования в пользу дублирования. Это, очевидно, может быть неизбежным для сложных систем при использовании языков, не поддерживающих комбинаторы и полиморфизм типов, и это в принципе может быть исключено в языках, обладающих свойством гомоиконичности (хотя и не обязательно эффективно), так как любой шаблон может быть реализован в виде исполнимого кода[6].

Типы шаблонов проектирования

Суммиров вкратце
Перспектива

Основные

Подробнее Название, Оригинальное название ...


Частные

Шаблоны параллельного программирования

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

Подробнее Название, Оригинальное название ...

Шаблоны генерации объектов

Шаблоны программирования гибких объектов

Шаблоны выполнения задач

Шаблоны архитектуры системы

Enterprise

  • Active Record — способ доступа к данным реляционных баз данных в объектно-ориентированном программировании.
  • Business Delegate.
  • Composite Entity/Составная Сущность.
  • Composite View.
  • DAO (Data Access Object) Объект Доступа к Данным.
  • Dispatcher View.
  • Front Controller.
  • Intercepting Filter.
  • Registry.
  • Service Activator.
  • Service Locator/Локатор Служб.
  • Service to Worker.
  • Session Facade/Фасад Сессии.
  • Transfer Object Assembler.
  • Transfer Object/Объект Перемещения.
  • Value List Handler/Обработчик Списка Значений.
  • View Helper.
  • Unit of Work.

Шаблоны проектирования потоковой обработки

  • Обработка событий по отдельности
  • Обработка с использованием локального состояния
  • Многоэтапная обработка/повторное разделение на разделы
  • Обработка с применением внешнего справочника: соединение потока данных с таблицей
  • Соединение потоков данных
  • Внеочередные события
  • Повторная обработка

Шаблоны проектирования распределённых систем

Шаблоны Баз Данных

  • Data Mapper
  • Identity Map
  • Unit of Work
  • Lazy Load

Прочие

  • Repository/Хранилище.

Другие типы шаблонов

Также на сегодняшний день существует ряд других шаблонов.

  • Carrier Rider Mapper описывают предоставление доступа к хранимой информации.
  • Аналитические шаблоны описывают основной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программной разработки.
  • Коммуникационные шаблоны описывают процесс общения между отдельными участниками/сотрудниками организации.
  • Организационные шаблоны описывают организационную иерархию предприятия/фирмы
  • Антипаттерны (Anti-Design-Patterns) описывают, как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации.
Remove ads

См. также

Примечания

Литература

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads