Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы_экзамен.docx
Скачиваний:
33
Добавлен:
10.05.2020
Размер:
907.14 Кб
Скачать

17. Обязанности объектов. Шаблон Information Expert.

GRASP - это методический подход к объектному проектированию. Эти шаблоны называют также шаблонами распределения обязанностей.

В общем случае можно выделить два типа обязанностей.

  1. Знание (knowing).

  2. Действие (doing).

Обязанности, относящиеся к действиям объекта:

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

  • Инициирование действий других объектов

  • Управление действиями других объектов и их координирование.

Обязанности, относящиеся к знаниям объекта:

  • Наличие информации о закрытых инкапсулированных данных.

  • Наличие информации о связанных объектах.

  • Наличие информации о следствиях или вычисляемых величинах.

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

Если дизайн не удовлетворяет этому принципу, то при программировании получается спагетти-код, в котором очень трудно разбираться. Локализация обязанностей позволяет повысить уровень инкапсуляции и уменьшить уровень связанности. Кроме читабельности кода повышается уровень готовности компонент к повторному использованию.

18. Шаблон Creator.

Шаблон Creator решает, кто должен создавать объект. Фактически, это применение шаблона Information Expert к проблеме создания объектов.

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

  • Класс B агрегирует (aggregate) объекты A

  • Класс B содержит (contains) объекты A

  • Класс B записывает (records) экземпляры объектов A

  • Класс B (closely uses) объекты A

  • Класс B обладает данными инициализации (has the initializing data), которые будут передаваться объектам A при их создании (т.е. при создании объектов А класс В является экспертом)

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

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

Пример с Sale, SalesLineItem и ProductSpecification. Поскольку Sale агрегирует SalesLineItem, то должна содержать метод makeLineItem.

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

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

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

19. Шаблон Low Coupling.

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

Не существует абсолютной меры для определения слишком высокой степени связывания. Важно понимать степень связанности на текущий момент и не упустить тот момент, когда дальнейшее повышение связанности может привести к появлению проблем. В целом следует руководствоваться таким соображением: классы, которые являются достаточно общими по своей природе и с высокой степенью вероятности будут повторно использоваться в дальнейшем, должны иметь минимальную степень связанности с другими классами.

Высокая степень связывания сама по себе не является проблемой. Проблемой является жесткое связывание с неустойчивыми в некотором отношении элементами.

Соседние файлы в предмете Объектно-ориентированное моделирование сложных систем