Модели проектирования

Пытаясь найти способы построения систем программного обеспечения из уже готовых компонентов, разработчики обратились за вдохновением к архитектуре. В связи с этим особый интерес представляет книга Кристофера Александера «Язык моделей» (Christopher Alexander. A pattern Language), в которой описаны модели проектирования городов. Каждая модель состоит из формулировки задачи и предлагаемого решения. К универсальным задачам предлагаются общие решения, то есть решения для общей задачи, а не ее частного случая.

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

Важно то, что в этой работе К. Александер попытался определить универсальные задачи и предоставить модели их решения. Сегодня многие разработчики программного обеспечения пытаются применить такой же подход к созданию больших систем программного обеспечения. В частности, исследователи применяют модели проектирования как средство получения стандартных родовых1 блоков, из которых можно создавать системы программного обеспечения.

В качестве примера такой модели можно привести модель «издатель-подписчик», состоящую из модуля (издатель), который посылает копии своих «публикаций» другим модулям (подписчикам) (рис. 6.8). Рассмотрим частный случай этой модели. Набор данных отображается на экране компьютера одновременно в нескольких форматах, например в виде круговой диаграммы и виде гистограммы. Любое изменение данных должно отражаться на обоих графиках. Поэтому об изменении данных следует сообщать модулям системы, отвечающим за рисование графиков. В этом случае модуль, содержащий данные, является издателем, который должен посылать сообщения об обновлении данных подписчикам или модулям, рисующим графики.

Другая модель проектирования программного обеспечения «контейнер-компонент» включает в себя родовое понятие контейнера, содержащего компоненты, которые сами могут быть контейнерами (рис. 6.9). Примером такой модели являются директории, или папки, которые использует программа управления файлами операционной системы. Каждая папка обычно содержит другие папки, которые также могут содержать папки. Короче говоря, модель «контейнер-компонент» служит для выражения рекурсивного понятия контейнера, содержащего контейнеры.

После определения модели, такой как «издатель-подписчик» или «контейнер-компонент», разработчик программного обеспечения создает набросок программной единицы, который называется каркасом (framework) и включает в себя релевантные свойства модели, при этом характеристики конкретных прикладных задач записываются позднее. Разработчик создает документацию, описывающую, как

следует заполнять каркас, чтобы получить законченную реализацию модели в заданных условиях. Эта документация иногда называется рецептом (recip). Совокупность каркасов и рецептов называется некоторыми разработчиками программного обеспечения «рецептурным справочником». Исследователи надеются, что с помощью таких «рецептурных справочников» разработчики, наконец, смогут создавать большие системы программного обеспечения из готовых компонентов — каркасов.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: