Введение в шаблоны проектирование. Определение шаблона. Основные концепции

Лекция 10. Шаблоны проектирования в ООП

Идейным отцом применения шаблонов проектирования при разработке ПО считают профессора архитектуры Университета Калифорнии в Беркли Кристофера Александра. В конце 70-ых годов XX века он опубликовал несколько книг [18], в которых изложил основные принципы применения шаблонов в архитектуре (строительстве), а также поместил каталог архитектурных шаблонов.

В процессе развития ООП несколько людей выдвигали идею применения шаблонного подхода для формализации лучших практик при проектировании объектов. Одной из первых работ и книг на эту тему является книга Э. Гамма и других [3]. В ней были сформулированы понятие шаблона (или паттерна, pattern) проектирования, рассмотрены основные шаблоны и приведён каталог шаблонов, а так же их классификация. Мы рассмотрим только некоторые шаблоны, за дополнительной информацией рекомендуется оращаться к [3,19].

 

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

 

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

 

В общем случае паттерн состоит из четырех основных элементов:

  1. Имя. Сославшись на него, мы можем сразу описать проблему проектирования, её решения и их последствия. Присваивание паттернам имён позволяет проектировать на более высоком уровне абстракции. С помощью словаря паттернов можно вести обсуждение с коллегами, упоминать паттерны в документации, при составлении дизайна системы.
  2. Задача. Описание того, когда следует применять паттерн. Необходимо сформулировать задачу и её контекст. Может описываться конкретная проблема проектирования, например способ представления алгоритмов в виде объектов. Может включаться перечень условий, при выполнении которых имеет смысл применять данный паттерн.
  3. Решение. Описание элементов дизайна, отношений между ними, функций каждого элемента. Конкретный дизайн или реализация не имеются ввиду, поскольку паттерн – это шаблон, применимый в самых разных ситуациях. Просто даётся абстрактное описание задачи проектирования и того, как она может быть решена с помощью некоего весьма обобщённого сочетания элементов (в нашем случае классов и объектов).
  4. Результаты – это следствия применения паттерна и разного рода компромиссы. Хотя при описании проектных решений о последствиях часто не упоминают, знать о них необходимо, чтобы можно было выбрать между различными вариантами и оценить преимущества и недостатки данного паттерна. Здесь речь идёт и о выборе языка реализации.

 

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

Разделим шаблоны на группы по их предназначению.

 

Всего для краткости рассмотрим следующие группы шаблонов:

  • Производящие шаблоны (creational patterns);
  • Поведенческие шаблоны (behavioral patterns);
  • Структурные шаблоны (structural patterns).