Введение в шаблоны проектирование. Определение шаблона. Основные концепции
Лекция 10. Шаблоны проектирования в ООП
Идейным отцом применения шаблонов проектирования при разработке ПО считают профессора архитектуры Университета Калифорнии в Беркли Кристофера Александра. В конце 70-ых годов XX века он опубликовал несколько книг [18], в которых изложил основные принципы применения шаблонов в архитектуре (строительстве), а также поместил каталог архитектурных шаблонов.
В процессе развития ООП несколько людей выдвигали идею применения шаблонного подхода для формализации лучших практик при проектировании объектов. Одной из первых работ и книг на эту тему является книга Э. Гамма и других [3]. В ней были сформулированы понятие шаблона (или паттерна, pattern) проектирования, рассмотрены основные шаблоны и приведён каталог шаблонов, а так же их классификация. Мы рассмотрим только некоторые шаблоны, за дополнительной информацией рекомендуется оращаться к [3,19].
Под паттерном проектирования понимается описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.
Идея, на которой основывается применение шаблонов проектирования, заключается в том, чтобы выработать стандартизованный подход к представлению общих решений, пригодный для часто встречающихся ситуаций при разработке ПО.
В общем случае паттерн состоит из четырех основных элементов:
- Имя. Сославшись на него, мы можем сразу описать проблему проектирования, её решения и их последствия. Присваивание паттернам имён позволяет проектировать на более высоком уровне абстракции. С помощью словаря паттернов можно вести обсуждение с коллегами, упоминать паттерны в документации, при составлении дизайна системы.
- Задача. Описание того, когда следует применять паттерн. Необходимо сформулировать задачу и её контекст. Может описываться конкретная проблема проектирования, например способ представления алгоритмов в виде объектов. Может включаться перечень условий, при выполнении которых имеет смысл применять данный паттерн.
- Решение. Описание элементов дизайна, отношений между ними, функций каждого элемента. Конкретный дизайн или реализация не имеются ввиду, поскольку паттерн – это шаблон, применимый в самых разных ситуациях. Просто даётся абстрактное описание задачи проектирования и того, как она может быть решена с помощью некоего весьма обобщённого сочетания элементов (в нашем случае классов и объектов).
- Результаты – это следствия применения паттерна и разного рода компромиссы. Хотя при описании проектных решений о последствиях часто не упоминают, знать о них необходимо, чтобы можно было выбрать между различными вариантами и оценить преимущества и недостатки данного паттерна. Здесь речь идёт и о выборе языка реализации.
Паттерн проектирования именует, абстрагирует и идентифицирует ключевые аспекты структуры общего решения, которые и позволяют применить его для создания повторно используемого дизайна. Он вычленяет участвующие классы и экземпляры, их роль и отношения, а так же функции.
Разделим шаблоны на группы по их предназначению.
Всего для краткости рассмотрим следующие группы шаблонов:
- Производящие шаблоны (creational patterns);
- Поведенческие шаблоны (behavioral patterns);
- Структурные шаблоны (structural patterns).