Опубликован: 13.10.2008 | Доступ: свободный | Студентов: 1605 / 173 | Оценка: 4.22 / 3.70 | Длительность: 09:12:00
ISBN: 978-5-9963-0003-7
Лекция 13:

Разработка информационных систем на основе шаблонов

< Лекция 12 || Лекция 13 || Лекция 14 >
Аннотация: Шаблоны на этапе анализа, построения архитектуры решений, кода, шаблоны тестов. Прото-шаблоны, анти-шаблоны. Генерирующие шаблоны, языки, каталоги и системы шаблонов

Что такое шаблоны: история, назначения, определения

Понятие шаблона пришло из работ архитектора Кристофера Александра (Christopher Alexander), написанных в конце 1970-х годов. В своих книгах он использовал понятие шаблона для описания вопросов планирования городов и проектирования архитектуры зданий.

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

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

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

Шаблон (по Кристоферу Александру) - правило из трех частей, выражающее связи между определенным контекстом, задачей и решением. Как часть мира, шаблон связывает контекст, систему сил, регулярно появляющуюся в этом контексте, и определенную пространственную конфигурацию, позволяющую системе сил прийти в равновесие. Как элемент языка шаблон является инструкцией, описывающей повторное использование этой пространственной конфигурации для приведения системы сил в равновесие, когда это позволяет контекст. Шаблон - нечто, происходящее в реальном мире, и одновременно правило, описывающее, как и когда создавать это нечто. Это процесс и вещь, описание живой сущности и процесса, порождающего эту сущность.

Классические книги по ИТ-шаблонам описывают шаблон как нечто, состоящее из четырех основных элементов:

  • Имя. Сославшись на имя, можно сразу описать проблему, ее решения и последствия. Присваивание шаблонам имен позволяет проектировать на более высоком уровне абстракции. С помощью словаря шаблонов можно вести обсуждение с коллегами, упоминать шаблоны в документации, представлять тонкости системы.
  • Задача. Описание того, когда следует применять шаблон. Формулируется задача и ее контекст. (Примером конкретной задачи может служить способ представления алгоритмов в виде объектов). Иногда в описание задачи входит перечень условий, при выполнении которых имеет смысл применять шаблон.
  • Решение. Описание элементов решения (элементов проектирования, анализа, тестирования и др. - в зависимости от вида шаблона), отношений между ними, функций каждого элемента. При этом решение - не конкретный дизайн или реализация, так как шаблон применяется в самых разных контекстах. Просто дается абстрактное описание задачи и того, как она может быть решена с помощью некоего весьма общего сочетания элементов (в случае проектирования, например, это могут быть объекты и классы).
  • Результаты. Результаты - это следствия применения шаблона и разного рода компромиссы. Хотя при описании решений о последствиях часто не упоминают, знать о них необходимо, чтобы можно было выбирать между различными вариантами и оценивать преимущества и недостатки конкретного шаблона. Иногда в результатах может быть описан выбор языка и реализации. В случае проектирования к результатам относят влияние на степень гибкости, расширяемости и переносимости системы. Перечисление всех последствий помогает понять и оценить их роль.

Прото-шаблоны

Не всякое решение, алгоритм, лучшие практики или эвристики могут быть названы шаблоном. Один или несколько признаков шаблона могут отсутствовать. Даже если все признаки шаблона есть, но описанная проблема и/или решение не являются повторяющимися, предлагаемую идею нельзя назвать шаблоном. Существует мнение, что такой находящийся в разработке шаблон (прото-шаблон) должен быть применен по крайней мере трижды, просмотрен и одобрен значительным числом пользователей шаблонов. Краткое описание прото-шаблона называется patlet.

Анти-шаблоны

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

  1. шаблоны, описывающие плохое решение задачи, которое привело к печальным последствиям;
  2. шаблоны, описывающие выход из этого печального состояния и переход к хорошему решению.

Классификация шаблонов

Шаблоны можно классифицировать по применимости на этапах жизненного цикла программной системы:

  • Шаблоны анализа.
  • Шаблоны проектирования.
  • Шаблоны реализации.
  • Шаблоны тестирования.

Шаблоны анализа

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

Шаблоны анализа имеют разную степень детализации.

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

Шаблоны анализа иногда относят к шаблонам проектирования на концептуальном уровне.

Шаблоны проектирования

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

Архитектурные шаблоны

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

Шаблоны логического проектирования

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

Идиомы (Idioms)

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

Шаблоны классифицируются не только по принадлежности к этапам жизненного цикла системы. Часто шаблоны классифицируются по типу решаемой задачи. Например, шаблоны организации распределенных вычислений, шаблоны пользовательского интерфейса, шаблоны данных, организационные шаблоны (описывают структуру проектной команды или организации в целом). Кроме того, выделяют шаблоны, относящиеся к конкретной парадигме программирования (объектно-ориентированные шаблоны) или концепции (шаблоны для сервисно-ориентированного подхода).

Системы шаблонов

Генерирующие шаблоны (generative patterns)

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

Генерирующие шаблоны являются основой и прообразом языков шаблонов.

Языки шаблонов

Набор шаблонов образует своеобразный словарь для обмена идеями, сочетания идей между собой и создания новых идей на основе предшествующих. Язык шаблонов включает в себя такой словарь (алфавит языка), набор правил образования новых шаблонов и правила преобразования шаблонов. Правила преобразования могут включать аксиомы и правила вывода. Таким образом, язык шаблонов представляет собой формальную систему. В частности, это означает, что все шаблоны, полученные в результате выводов в такой системе, действительно будут шаблонами (а не прото-шаблонами или чем-то еще). Иногда в языки шаблонов вводят как самостоятельную сущность ограничения.

Каталоги и системы шаблонов

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

Системы шаблонов представляют собой множество связных шаблонов, совместно решающих какую-либо задачу (например, задачу проектирования конкретного типа систем). Шаблоны в системе организованы в группы и подгруппы, отличаются уровнями детализации решаемых подзадач. Связи в системе имеют более тесный характер, чем в каталогах. Все шаблоны в системе единообразно описываются, причем особое внимание в описании уделяется вопросам отношений с другими шаблонами системы.

Итоги

В "хороших" проектах используется много шаблонов. Единое целое образуется в результате их согласованного взаимодействия. Применение шаблонов как повторное использование накопленного положительного опыта приносит очевидную пользу. Кроме того, изучение, классификация и выделение новых шаблонов (pattern mining), по мнению многих авторов, сами по себе являются интересными и перспективными задачами.

< Лекция 12 || Лекция 13 || Лекция 14 >
Вячеслав Кузнецов
Вячеслав Кузнецов

Здравствуйте.

Как оплатить курс?