Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шаврин С.М. Моделирование и проектирование ИС.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Дополнительная информация

В следующей теме рассматриваются общие шаблоны распределения обязанностей (GRASP). Для дальнейшего изучения шаблонов проектирования можно порекомендовать обратиться к книге Эриха Гаммы и др. «Примеры объектно-ориентированного проектирования. Паттерны проектирования».

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

Тематический контекст

Краткое содержание

  1. Обзор общих шаблонов распределения обязанностей (GRASP).

  2. Шаблоны: «Эксперт», «Создатель», «Низкое связывание», «Высокое зацепление» и «Контроллер».

Шаблоны graps

В данном разделе рассматриваются шаблоны GRASP (General Responsibility Assignment Patterns – Общие шаблоны распределения обязанностей). Это наиболее общие и часто (порой, неосознанно) используемые шаблоны проектирования. Некоторые из них напрямую следуют из принципов объектно-ориентированного подхода и могут показаться очень простыми и интуитивно понятными. Однако не стоит их недооценивать. Осознанное применение этих шаблонов поможет избежать многих проблем.

Шаблон Expert (Эксперт)

Проблема. Каков наиболее общий принцип распределения обязанностей между объектами при объектно-ориентированном проектировании?

Рис. 96. Концептуальная модель продажи

Решение. Назначить обязанность информационному эксперту – объекту, который имеет информацию, необходимую для выполнения обязанности.

Например, в системе розничной торговли некоторому объекту необходимо знать общую сумму продажи. На рис. 96 представлена часть соответствующей концептуальной модели.

Рис. 97. Распределение обязанностей в соответствии с шаблоном Expert

Распределение обязанностей в соответствии с шаблонном Expert показано на рис. 97. Для выполнения обязанности «знать и предоставлять общую сумму продажи» объектам системы были назначены следующие обязанности: объектам класса «Продажа» было вменено в обязанность вычисление общей суммы продажи и владение коллекцией товарных позиций; объек­там класса «ТоварнаяПозиция» было вменено в обязан­ность вычисление суммы товарной позиции, знание количества продаваемого товара и его описания; объектам класса «ОписаниеТовара» было вменено в обязанность знание цены товара.

Заметим, что на рис. 97 классы «Продажа», «ТоварнаяПозиция» и «ОписаниеТовара» появились не столь­ко потому, что соответствующие понятия есть на концеп­ту­альной модели, сколько потому, что эти классы понадобились для реализации обязанности. Модель спецификации и тем бо­лее модель реализации могут существенно отличаться от кон­цептуальной модели.

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

Шаблон Creator (Создатель)

Проблема. Кто должен отвечать за создание нового экземпляра некоторого класса?

Решение. Назначить классу А обязанность создавать экземпляры класса Б, если:

  • А агрегирует объекты Б;

  • А содержит объекты Б;

  • А записывает объекты Б;

  • А активно использует объекты Б;

  • А обладает данными инициализации, которые передаются объектам Б при создании (т.е. А является экспертом).

Если выполняется несколько условий (т.е. есть несколько кандидатов на роль создателя), то предпочтение следует отдать первым двум, т.е. агрегирует и содержит.

Например, кто в системе розничной торговли должен отвечать за создание товарных позиций? Продажа агрегирует товарные позиции и, следовательно, является кандидатом на создателя (рис. 98).

Рис. 98. Создание товарных позиций

При использовании шаблона Creator степень связности не повышается (см. шаблон Low Coupling), т.к. создаваемый объект, как правило, оказывается видимым для создателя посредством уже имеющихся ассоциаций.