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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м откат правок 91.77.187.65 (обс) к версии X7q
Нет описания правки
Строка 218: Строка 218:
|страницы = 368
|страницы = 368
|isbn = 0-321-29353-3
|isbn = 0-321-29353-3
}}
* {{статья
|автор = Еремин Л.В.
|заглавие = «К проблеме проектирования шаблонов процедур обработки данных при создании АСП СОД». В сб. научных трудов: Программное обеспечение АСУ.
|оригинал = |ссылка =
|издание = Вып.4
|место = М.
|издательство = [[МЭСИ (издательство)|«МЭСИ»]]
|год = 1977
|страницы = 113-124
|isbn =
}}
* {{статья
|автор = Еремин Л.В.
|заглавие = «Характеристика языков двухуровневой системы машинного проектирования программ обработки учетно-статистической информации - «СИНТЕЗ», Материалы семинара: «Автоматизация проектирования»
|оригинал =
|ссылка = |издание = |место = М.
|издательство = [[МДНТП им. Ф.Э.Дзержинского (издательство)|«МДНТП им. Ф.Э.Дзержинского»]]
|год = 1981
|страницы = 17-22
|isbn =
}}
}}



Версия от 11:27, 21 июля 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)
  • Марк Гранд. Шаблоны проектирования в JAVA. Каталог популярных шаблонов проектирования, проиллюстрированных при помощи UML = Patterns in Java, Volume 1. A Catalog of Reusable Design Patterns Illustrated with UML. — М.: «Новое знание», 2004. — С. 560. — ISBN 5-94735-047-5.
  • Крэг Ларман. Применение 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.
  • Еремин Л.В. «К проблеме проектирования шаблонов процедур обработки данных при создании АСП СОД». В сб. научных трудов: Программное обеспечение АСУ. // Вып.4. — М.: «МЭСИ», 1977. — С. 113-124.
  • Еремин Л.В. «Характеристика языков двухуровневой системы машинного проектирования программ обработки учетно-статистической информации - «СИНТЕЗ», Материалы семинара: «Автоматизация проектирования». — М.: «МДНТП им. Ф.Э.Дзержинского», 1981. — С. 17-22.

Ссылки