Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Введение в архитектуру программного обеспечения

Паттерны GRASP

GRASP (General Responsibility Assignment Software Patterns) — паттерны проектирования, используемые для решения общих задач по назначению обязанностей классам и объектам [62].

Известно девять GRAPS паттернов, изначально описанных в книге Крейга Лармана «Применение UML и шаблонов проектирования». В отличие от рассмотренных ранее паттернов GoF, GRAPS паттерны не имеют выраженной структуры, четкой области применения и конкретной решаемой проблемы, а представляют собой обобщенные подходы, используемые при проектировании дизайна системы. Формально их можно отнести к принятой в GoF классификации на порождающие, структурные и паттерны поведения.

Для более детального понимания GRASP паттернов приведем примеры их использования из предметной области морских грузоперевозок.

Головной офис компании состоит из трех отделов: отдел по работе с клиентами, отдел диспетчеризации рейсов, отдел комплектации рейсов. Менеджеры из отдела по работе с клиентами оформляют договоры на доставку груза из пункта А в пункт В. Диспетчеры из отдела диспетчеризации рейсов отслеживают положение судов. Администраторы из отдела комплектации рейсов формируют грузовые рейсы на основании договоров с клиентами.

Информационный эксперт (Information Expert) —

структурный паттерн

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

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

Низкая связанность (Low Coupling) — структурный —

и Высокое зацепление (High Cohesion) — паттерн поведения

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

Примером хорошего дизайна системы может служить набор утилит GNU Binutils для Linux, где каждая утилита (если ее рассматривать как модуль) выполняет лишь минимальные обязанности (высокое зацепление) и почти ничего не знает о природе других утилит (низкая связность), в связи с чем может быть легко заменена на аналог в некотором варианте использования.

Устойчивый к изменениям (Protected Variantions) — структурный

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

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

Контроллер (Controller) — паттерн поведения

Контроллер отвечает за обработку входных системных событий, делегируя обязанности по их обработке компетентным классам. В общем случае Контроллер реализует один или несколько вариантов использования.

Известно понятие внешнего Контроллера (Front Controller), который представляет всю систему в целом (агрегирует весь функционал системы в одном классе).

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

Полиморфизм (Polymorphism) — паттерн поведения

Паттерн Полиморфизм позволяет обрабатывать альтернативные варианты поведения на основе типа. При этом альтернативные реализации приводятся к обобщенному интерфейсу. Рассмотрим интеграцию системы с внешними компонентами расчета тарифов на перевозку груза. Классы Loca/Tarificator и WorldWideTarificator являются Адаптерами к соответствующим внешним компонентам. Применение паттерна Полиморфизм позволяет в будущем легко модифицировать систему.

Чистая выдумка (Pure Fabrication) — паттерн поведения

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

Перенаправление (Indirection) — паттерн поведения

Паттерн Перенаправление реализует низкую связность между классами путем назначения обязанностей по их взаимодействию дополнительному объекту-посреднику. Примером данного паттерна может служить класс ClientsSaver (см. Чистая выдумка), который является промежуточным слоем между сущностями клиентов и хранилищем, в котором они будут сохранены. Кроме того, контроллер из триады МУС является посредником между данными их их представлением.

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы