СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до 07.06.2025

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Паттерны проектирования при использовании языка UML

Категория: Информатика

Нажмите, чтобы узнать подробности

Данный методический материал предназначен для подготовки и проведения уроков при изучении дисциплины "МДК.04.01. Моделирование и анализ программного обеспечения" специальности 09.02.03 "Программирование в компьютерных системах" СПО углубленной подготовки.

Просмотр содержимого документа
«Паттерны проектирования при использовании языка UML»

Паттерны проектирования  в UML

Паттерны проектирования в UML

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

Классификация паттернов проектирования

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

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

Архитектурные паттерны  - множество предварительно определенных подсистем со спецификацией их ответственности, правил и базовых принципов установления отношений между ними.

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

 Паттерны проектирования (Design patterns)  - специальные схемы для уточнения структуры подсистем или компонентов программной системы и отношений между ними.  Паттерны проектирования   описывают общую структуру взаимодействия элементов программной системы, которые реализуют исходную проблему проектирования в конкретном контексте. Наиболее известными паттернами этой категории являются паттерны GoF ( Gang  of Four), названные в честь Э. Гаммы, Р. Хелма, Р. Джонсона и Дж. Влиссидеса, которые систематизировали их и представили общее описание. Паттерны GoF включают в себя 23 паттерна. Эти паттерны не зависят от языка реализации, но их реализация зависит от области приложения.  Паттерны анализа (Analysis patterns)   - специальные схемы для представления общей организации процесса моделирования. Паттерны анализа  относятся к одной или нескольким предметным областям и описываются в терминах  предметной области .

Паттерны проектирования (Design patterns)  - специальные схемы для уточнения структуры подсистем или компонентов программной системы и отношений между ними.

Паттерны проектирования   описывают общую структуру взаимодействия элементов программной системы, которые реализуют исходную проблему проектирования в конкретном контексте. Наиболее известными паттернами этой категории являются паттерны GoF ( Gang  of Four), названные в честь Э. Гаммы, Р. Хелма, Р. Джонсона и Дж. Влиссидеса, которые систематизировали их и представили общее описание. Паттерны GoF включают в себя 23 паттерна. Эти паттерны не зависят от языка реализации, но их реализация зависит от области приложения.

Паттерны анализа (Analysis patterns)   - специальные схемы для представления общей организации процесса моделирования. Паттерны анализа  относятся к одной или нескольким предметным областям и описываются в терминах  предметной области .

 Наиболее известными паттернами этой группы являются паттерны бизнес-моделирования  ARIS  ( Architecture  of Integrated  Information  Systems), которые характеризуют абстрактный  уровень представления  бизнес-процессов. В дальнейшем  паттерны анализа конкретизируются в типовых моделях с целью выполнения аналитических оценок или имитационного моделирования бизнес-процессов.  В дальнейшем  паттерны анализа конкретизируются в типовых моделях с целью выполнения аналитических оценок или имитационного моделирования бизнес-процессов.  Паттерны тестирования (Test patterns) - специальные схемы для представления общей организации процесса тестирования программных систем.

Наиболее известными паттернами этой группы являются паттерны бизнес-моделирования  ARIS  ( Architecture  of Integrated  Information  Systems), которые характеризуют абстрактный  уровень представления  бизнес-процессов. В дальнейшем  паттерны анализа конкретизируются в типовых моделях с целью выполнения аналитических оценок или имитационного моделирования бизнес-процессов.

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

Паттерны тестирования (Test patterns) - специальные схемы для представления общей организации процесса тестирования программных систем.

 К этой категории паттернов относятся такие паттерны, как тестирование черного ящика, белого ящика, отдельных классов, системы. Паттерны этой категории систематизировал и описал М. Гранд. Некоторые из них реализованы в инструментальных средствах, наиболее известными из которых является  IBM  Test Studio. В связи с этим  паттерны тестирования  иногда называют стратегиями или схемами тестирования.  Паттерны реализации (Implementation patterns)  - совокупность компонентов и других элементов реализации, используемых в структуре модели при написании программного кода.  Эта категория паттернов делится на следующие подкатегории: паттерны организации программного кода, паттерны  оптимизации программного кода , паттерны устойчивости кода, паттерны разработки графического интерфейса пользователя и др.

К этой категории паттернов относятся такие паттерны, как тестирование черного ящика, белого ящика, отдельных классов, системы. Паттерны этой категории систематизировал и описал М. Гранд. Некоторые из них реализованы в инструментальных средствах, наиболее известными из которых является  IBM  Test Studio. В связи с этим  паттерны тестирования  иногда называют стратегиями или схемами тестирования.

Паттерны реализации (Implementation patterns)  - совокупность компонентов и других элементов реализации, используемых в структуре модели при написании программного кода.

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

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

Паттерны реализации позволяют получить некоторую заготовку программного кода .

Паттерны проектирования в нотации языка UML

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

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

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

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

 В последующем параметры паттерна могут быть заменены различными классами, чтобы получить реализацию паттерна в рамках конкретной кооперации. Эти параметры специфицируют используемые классы в форме ролей классов в рассматриваемой подсистеме. При связывании или реализации паттерна любая линия помечается именем параметра паттерна, которое является именем роли соответствующей ассоциации. В  дополнение  к диаграммам кооперации особенности реализации отдельных паттернов представляются с помощью диаграмм последовательности.  Паттерны проектирования  позволяют решать различные задачи, с которыми постоянно сталкиваются проектировщики объектно-ориентированных приложений. Ниже представлен полный  список   паттернов проектирования  GoF и краткое описание назначения каждого из них (таблица ниже)

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

Паттерны проектирования  позволяют решать различные задачи, с которыми постоянно сталкиваются проектировщики объектно-ориентированных приложений. Ниже представлен полный  список   паттернов проектирования  GoF и краткое описание назначения каждого из них (таблица ниже)

 Таблица 1 - Полный список  паттернов проектирования  GoF

Таблица 1 - Полный список  паттернов проектирования  GoF

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

В качестве примеров рассматриваются два  паттерна проектирования , которые нашли наибольшее применение при проектировании программных систем: паттерны Фасад и Наблюдатель.

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

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

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

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

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

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

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

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

Фрагмент соответствующей  диаграммы классов  содержит 2 класса:  Адрес  и  интерфейс  к операциям этого класса IАдрес.

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

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

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

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

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

диаграммы классов  будет содержать 4 класса

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

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

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

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

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

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

 Паттерн Наблюдатель и его обозначение в нотации языка UML  Паттерн Наблюдатель предназначен для контроля изменений состояния объекта и передачи информации об изменении этого состояния множеству клиентов. В общем случае паттерн Наблюдатель также может быть изображен в виде параметризованной кооперации. Общее представление паттерна проектирования Наблюдатель приведено на рисунке на следующем слайде

Паттерн Наблюдатель и его обозначение в нотации языка UML

Паттерн Наблюдатель предназначен для контроля изменений состояния объекта и передачи информации об изменении этого состояния множеству клиентов. В общем случае паттерн Наблюдатель также может быть изображен в виде параметризованной кооперации. Общее представление паттерна проектирования Наблюдатель приведено на рисунке на следующем слайде

 Изображенная_параметризованная кооперация  содержит 4 параметра: абстрактный класс Subject (Субъект), класс   ConcreteSubject (Конкретный Субъект), абстрактный класс Observer (Наблюдатель) и класс ConcreteObserver (Конкретный Наблюдатель). Пунктирная линия со стрелкой в форме треугольника служит для обозначения отношения обобщения классов.  При решении конкретных задач проектирования данный паттерн также может быть конкретизирован. В этом случае вместо параметров изображенной кооперации должны быть указаны классы, предназначенные для решения отдельных задач. Пример использования паттерна Наблюдатель для отслеживания изменений в таблице БД и отражения этих изменений на диаграммах. Для определенности можно использовать таблицу БД MS Access и две диаграммы - круговую и столбиковую. Фрагмент соответствующей диаграммы классов содержит 5 классов

Изображенная_параметризованная кооперация

содержит 4 параметра: абстрактный класс Subject (Субъект), класс 

ConcreteSubject (Конкретный Субъект), абстрактный класс Observer (Наблюдатель) и класс ConcreteObserver (Конкретный Наблюдатель). Пунктирная линия со стрелкой в форме треугольника служит для обозначения отношения обобщения классов.

При решении конкретных задач проектирования данный паттерн также может быть конкретизирован. В этом случае вместо параметров изображенной кооперации должны быть указаны классы, предназначенные для решения отдельных задач. Пример использования паттерна Наблюдатель для отслеживания изменений в таблице БД и отражения этих изменений на диаграммах. Для определенности можно использовать таблицу БД MS Access и две диаграммы - круговую и столбиковую. Фрагмент соответствующей диаграммы классов содержит 5 классов

 Рисунок - Конкретная реализация паттерна проектирования Наблюдатель

Рисунок - Конкретная реализация паттерна проектирования Наблюдатель

 В этом случае за субъектом Таблицей MS Access может

В этом случае за субъектом Таблицей MS Access может "следить" произвольное число наблюдателей, причем их добавление или удаление не влияет на представление информации в БД. Класс Таблица MS Access реализует операции по отслеживанию изменений в соответствующей таблице, и при их наличии сразу информирует абстрактного наблюдателя.

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

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

 В настоящее время паттерны проектирования реализованы в инструментальном средстве Model Maker 7 компании ModelMaker Tools BV которое поддерживает нотацию языка UML и позволяет генерировать программный код на языке Delphi Pascal. Паттерны проектирования также реализованы в CASE-средстве Together 2005 компании Borland, которое поддерживает нотации языка UML и позволяет генерировать программный код на языке Java.

В настоящее время паттерны проектирования реализованы в инструментальном средстве Model Maker 7 компании ModelMaker Tools BV которое поддерживает нотацию языка UML и позволяет генерировать программный код на языке Delphi Pascal. Паттерны проектирования также реализованы в CASE-средстве Together 2005 компании Borland, которое поддерживает нотации языка UML и позволяет генерировать программный код на языке Java.


Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!