Опубликован: 11.03.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Школа IT-менеджмента АНХ при Правительстве РФ
Лекция 14:

Паттерны проектирования и их представление в нотации UML

< Лекция 13 || Лекция 14: 1234

Паттерн Фасад и его обозначение в нотации языка UML

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

Общее представление паттерна проектирования Фасад

Рис. 14.2. Общее представление паттерна проектирования Фасад

Изображенная параметризованная кооперация содержит 4 параметра: класс Facade (Фасад), интерфейс IFacade, интерфейсы IConcreteClass и конкретные классы ConcreteClass, в которых реализованы интерфейсы IConcreteClass. Пунктирная линия со стрелкой в форме треугольника служит для обозначения отношения реализации (не путать с отношением обобщения классов).

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

Ниже приведен пример, который иллюстрирует использование паттерна Фасад для выполнения операций по заданию и считыванию адресов из базы данных сотрудников. Фрагмент соответствующей диаграммы классов содержит 2 класса: Адрес и интерфейс к операциям этого класса IАдрес ( рис. 14.3). При задании адреса нового сотрудника необходимо обратиться к этому интерфейсу и последовательно выполнить операции: задатьУлицу(), задатьДом(), задатьКорпус(), задатьКвартиру(), используя в качестве аргумента идентификационный номер нового сотрудника. Для получения информации об адресе сотрудника, необходимо также обратиться к этому интерфейсу и последовательно выполнить операции: прочитатьУлицу(), прочитатьДом(), прочитатьКорпус(), прочитатьКвартиру(), используя в качестве аргумента идентификационный номер интересующего сотрудника.

Фрагмент диаграммы классов до применения паттерна Фасад

Рис. 14.3. Фрагмент диаграммы классов до применения паттерна Фасад

Очевидно, отслеживать при каждом обращении правильность выполнения этих последовательностей операций неудобно. С этой целью к данному фрагменту следует добавить еще один интерфейс, реализацию паттерна Фасад для рассматриваемой ситуации. Соответствующий фрагмент модифицированной диаграммы классов будет содержать 4 класса ( рис. 14.4), изображенные таким образом, чтобы иллюстрировать реализацию параметрической кооперации ( рис. 14.2).

Конкретная реализация паттерна проектирования Фасад

Рис. 14.4. Конкретная реализация паттерна проектирования Фасад

При задании адреса нового сотрудника в этом случае достаточно обратиться к интерфейсу IФасад и выполнить единственную операцию: задатьАдрес(), используя в качестве аргумента идентификационный номер нового сотрудника. Для получения информации об адресе сотрудника также достаточно обратиться к этому интерфейсу и выполнить единственную операцию: прочитатьАдрес(), используя в качестве аргумента идентификационный номер интересующего сотрудника. Реализацию данных операций следует предусмотреть в классе Фасад. Взаимодействие объектов этих классов может быть представлено с помощью диаграммы последовательности ( рис. 14.5).

Диаграмма последовательности для выполнения операции задания адреса

Рис. 14.5. Диаграмма последовательности для выполнения операции задания адреса

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

< Лекция 13 || Лекция 14: 1234
Евгений Сеничак
Евгений Сеничак

Здравствуйте!
Текущий курс изучает UML 1.5.
Современные версии UML 2.х. 
Разница существенна. Есть ли курс по более новым версиям UML?

Елена Михеенкова
Елена Михеенкова

В разделе Курсы и разделе Повышение квалификации есть курс Нотация и семантика языка UML. В курсах он бесплатный, а в повышение квалификации стоит 3000 руб. В чем различия?

 

Сергей Пантелеев
Сергей Пантелеев
Россия, Москва
Ахмет Арчаков
Ахмет Арчаков
Россия, Магас