Шаблон проектирования: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 61: Строка 61:


=== Структурные шаблоны (Structural) ===
=== Структурные шаблоны (Structural) ===
Структурные шаблоны — шаблоны проектирования, которые определяют различные сложные структуры, которые должны облегчить разработку и оптимизировать программу.
Структурные шаблоны — шаблоны проектирования, которые определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию , позволяя облегчить разработку и оптимизировать программу.
* [[Адаптер (шаблон проектирования)|Adapter/Адаптер]] или Wrapper/Обёртка - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет, несовместимый с первым, интерфейс.
* [[Адаптер (шаблон проектирования)|Adapter/Адаптер]] или Wrapper/Обёртка - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет, несовместимый с первым, интерфейс.
* [[Мост (шаблон проектирования)|Bridge/Мост]] - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
* [[Мост (шаблон проектирования)|Bridge/Мост]] - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.

Версия от 06:22, 29 апреля 2010

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

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

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

Архитектура

В 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). Именно эта книга стала причиной роста популярности шаблонов проектирования.

Польза

Главная польза каждого отдельного шаблона состоит в том, что он описывает решение целого класса абстрактных проблем. Также тот факт, что каждый шаблон имеет свое имя, облегчает дискуссию об абстрактных структурах данных (ADT) между разработчиками, так как они могут ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация терминологии, названий модулей и элементов проекта.

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

Критика

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

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

Есть мнение, что слепое применение шаблонов из справочника, без осмысления причин и предпосылок выделения каждого отдельного шаблона, замедляет профессиональный рост программиста, так как подменяет творческую работу механическим подставлением шаблонов. Люди, придерживающиеся данного мнения, считают, что знакомиться со списками шаблонов надо тогда, когда «дорос» до них в профессиональном плане — и не раньше. Хороший критерий нужной степени профессионализма — выделение шаблонов самостоятельно, на основании собственного опыта. При этом, разумеется, знакомство с теорией, связанной с шаблонами, полезно на любом уровне профессионализма и направляет развитие программиста в правильную сторону. Сомнению подвергается только использование шаблонов «по справочнику».

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

Для преодоления этих недостатков используется рефакторинг.

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

Основные шаблоны (Fundamental)

Порождающие шаблоны проектирования (Creational)

Структурные шаблоны (Structural)

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

  • Adapter/Адаптер или Wrapper/Обёртка - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет, несовместимый с первым, интерфейс.
  • Bridge/Мост - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
  • Composite/Компоновщик - объект, который объединяет в себе объекты, подобные ему самому.
  • Decorator/Декоратор - класс, расширяющий функционал другого класса, без использования наследования.
  • Facade/Фасад - объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
  • Flyweight/Приспособленец - это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
  • Proxy/Заместитель - объект, который является посредником между двумя другими объектами, и который реализовывает/ограничивает доступ к объекту, к которому обращаются через него.

Поведенческие шаблоны (Behavioral)

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

MVC

Enterprise

Unsorted

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

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

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

См. также

Примечания

Литература

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб.: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1. (также ISBN 5-272-00355-1)
  • Крэг Ларман. Применение UML 2.0 и шаблонов проектирования = Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development. — М.: «Вильямс», 2006. — С. 736. — ISBN 0-13-148906-2.
  • Мартин Фаулер. Архитектура корпоративных программных приложений = Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series). — М.: «Вильямс», 2007. — С. 544. — ISBN 0-321-12742-0.
  • Джошуа Кериевски. Рефакторинг с использованием шаблонов (паттернов проектирования) = Refactoring to Patterns (Addison-Wesley Signature Series). — М.: «Вильямс», 2006. — С. 400. — ISBN 0-321-21335-1.
  • Скотт В. Эмблер, Прамодкумар Дж. Садаладж. Рефакторинг баз данных: эволюционное проектирование = Refactoring Databases: Evolutionary Database Design (Addison-Wesley Signature Series). — М.: «Вильямс», 2007. — С. 368. — ISBN 0-321-29353-3.

Ссылки