- Шаблоны проектирования
-
Шаблоны проектирования
Шаблоны проектирования (паттерн, англ. 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)
- Delegation pattern/Шаблон делегирования
- Functional design/Шаблон функционального дизайна
- Immutable/Неизменяемый объект
- Interface
- Marker interface
- Property Container
Порождающие шаблоны проектирования
- Abstract Factory/Абстрактная фабрика, Kit
- Builder/Строитель
- Factory Method/Фабричный метод, Virtual Constructor
- Lazy initialization/Отложенная инициализация
- Object Pool/Объектный пул ;
- Prototype/Прототип
- Singleton/Одиночка
- Anonymous subroutine objects
Структурные шаблоны (Structural)
- Adapter/Адаптер, Wrapper
- Bridge/Мост, Handle/Body
- Composite/Компоновщик
- Decorator/Декоратор, Wrapper
- Facade/Фасад
- Flyweight/Приспособленец
- Proxy/Заместитель, Surrogate
- Container
- Extensibility
- Pipes and filters
- Private class data
Поведенческие шаблоны (Behavioral)
- Chain of Responsibility/Цепочка ответственности
- Command/Команда, Action, Transaction
- Interpreter/Интерпретатор
- Iterator/Итератор, Cursor
- Mediator/Посредник
- Memento/Хранитель, Token
- Observer/Наблюдатель, Dependents, Publish-Subscribe, Listener
- State/Состояние, Objects for States
- Strategy/Стратегия
- Simple Policy
- Specification
- Template Method/Шаблонный метод
- Visitor/Посетитель, Single-serving visitor, Hierarchical visitor
- Event listener
- Single-serving visitor
- Hierarchical visitor
Шаблоны параллельного программирования (Concurrency)
- Active Object
- Balking
- Double checked locking
- Guarded suspension
- Half-Sync/Half-Async
- Leaders/followers
- Monitor Object
- Reactor
- Read write lock
- Scheduler
- Thread pool
- Thread-Specific Storage
- Single Thread Execution
MVC
- Model-View-Controller (MVC) Модель-представление-контроллер
- Model-View-Presenter
- Presentation-Abstraction-Control
Enterprise
- Business Delegate
- Composite Entity/Составная Сущность
- Composite View
- DAO (Data Access Object) Объект Доступа к Данным
- Dispatcher View
- Front Controller
- Intercepting Filter
- Service Activator
- Service Locator/Локатор Службы
- Service to Worker
- Session Facade/Фасад Сессии
- Transfer Object Assembler
- Transfer Object/Объект Перемещения
- Value List Handler/Обработчик Списка Значений
- View Helper
Unsorted
- Property Container
- Event Channel
- Repository/Хранилище
Другие типы шаблонов
Также на сегодняшний день существует ряд других шаблонов:
- Carrier Rider Mapper, предоставление доступа к хранимой информации
- аналитические шаблоны, описывают основной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программной разработки
- коммуникационные шаблоны, описывают процесс общения между отдельными участниками/сотрудниками организации
- организационные шаблоны, описывают организационную иерархию предприятия/фирмы
- Анти-паттерны (Anti-Design-Patterns) описывают как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации.
См. также
Ссылки
- Ольга Дубина Обзор паттернов проектирования. — Обзор нескольких наиболее значительных монографий, посвященных паттернам проектирования информационных систем. Проверено 5 сентября 2006.
- Каталог шаблонов J2EE
- Один из многих сайтов с шаблонами проектирования на Perl
- Portland Pattern Repository — список шаблонов проектирования на движке вики
- mgrand’s book — сайт с описанием большого количества шаблонов проектирования
- Каталог шаблонов на сайте Hillside.net
- Структурные шаблоны проектирования в XML
- Resign Patterns — проломы проектно-дизориентированного проектирования (пародия на паттерны)
- Eclipse’s Culture of Shipping(англ.) Erich Gamma
- PHP Design Patterns Reference and Examples
- Статья из журнала PC Magazine «Шаблоны проектирования: практические примеры»
- Шаблоны проектирования на design-pattern.ru
Литература
- Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования = 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
Wikimedia Foundation. 2010.