Uploaded by Александр Меньшиков

Лекция 3

advertisement
Объектно-ориентированный
анализ и проектирование
программного обеспечения
(часть 2)
Лекции 1-3.
Рысин М.Л.
Виды отношений
между классами
• Структура модели предметной
области образуется связанными
ключевыми абстракциями –
классами
• Основные виды отношений:
1. Ассоциация – устанавливает
семантические соединения,
фиксирует структурные
отношения – связи между
экземплярами разных классов
2. Зависимость – отражает
влияние одного класса на другой
3. Обобщение-специализация
(«is a»)
4. Целое-часть («part of»).
2
Отношения между классами
в ООП-ЯП
• Реализация основных видов отношений
между классами в ООП-ЯП:
1. Ассоциация – соединение всех
элементов в работающую систему (ПС)
→
2. Наследование – разновидность
отношения обобщениеспециализация
3. Агрегация – обеспечивает отношение
целое-часть
4. Зависимость (частная форма –
использование – связь между
клиентом и сервером)
5. Конкретизация – другая
разновидность отношения
обобщение-специализация
6. Метакласс – класс классов, механизм
работы с классами как с объектами
(SmallTalk, CLOS)
7. Реализация – механизм наследования
интерфейса потомком.
3
1. Ассоциация классов
• Обеспечивает семантическое соединение классов
• Ассоциация предполагает двусторонние
отношения:
• Экземпляру Книга необходим экземпляр Библиотека для
хранения
• Экземпляру Библиотека выделяются все хранимые Книги
• Ассоциация используется для анализа проблем по
участникам связей, их ролям, мощности
• Мощности: один-к-одному, один-ко-многим,
многие-ко-многим.
4
2. Наследование
• Это отношение, когда
один класс разделяет
структуру и поведение,
определённые в другом
классе или во многих
других классах
• Определяется иерархия
«is a»
• Подкласс (потомок)
является специализацией
суперкласса (базового
класса, предка).
5
Пример – суперкласс и подкласс
Абстракция верхнего
уровня иерархии
Подкласс
Подкласс наследует структуру и поведение суперкласса, но наращивает его
структуру, переопределяет его поведение и дополняет его поведение.
6
Полиморфизм
Абстрактный классродитель
Транспорт
Класс-потомок
Автомобиль
Экземпляр
TeslaModelX
Класс-потомок
Корабль
Экземпляр
BMW3
Экземпляр
Аврора
.Движение()
Класс-потомок
Вертолёт
Экземпляр
Крузенштерн
Экземпляр
МИ-8
Вызов методов TeslaModelX.Движение(), BMW.Движение(),
Аврора.Движение(), Крузенштерн.Движение(), МИ-8.Движение()
даст различные результаты в каждом случае.
7
3. Агрегация
• Отношения агрегации между
классами аналогичны
отношениям агрегации между
объектами
• Класс КонтроллерУгла –
агрегат, экземпляр класса
РегуляторУгла – одна из его
частей
• Агрегация определена здесь
как включение по величине
• Это пример физического
включения – объект-регулятор
не существует независимо от
включающего его экземпляра
агрегатора
• Время жизни этих двух
объектов неразрывно связано.
8
Косвенная агрегация
• Возможен косвенный
тип агрегации –
включение по ссылке.
• При этом сцепление
объектов уменьшается,
экземпляры каждого
класса создаются и
уничтожаются
независимо
• Другой пример:
класс-агрегат Дом с
указанием
множественности части
агрегата.
9
Формы представления агрегации
по величине (композиции)
10
4. Зависимость –
• Это отношение,
показывающее, что
изменение в одном классе
(независимом) может
влиять на другой класс
(зависимый)
• Графически – пунктирная
стрелка от клиента к
поставщику определённой
услуги
• Зависимости показывают,
что один класс использует
другой класс как аргумент
в сигнатуре своей
операции.
11
5. Конкретизация –
• Это процесс наполнения шаблона
(родового или
параметризованного класса)
другими классами, типами,
объектами, операциями с целью
получения конкретизированного
класса, от которого возможно
создание экземпляров (объектов)
• Т.о. конкретизация – процесс
настройки родового класса
• Отношение конкретизации
отображается с помощью
подписанной стрелки отношения
зависимости
• Конкретизированный класс
зависит от параметризованного
(родового, шаблона).
12
Языки визуального моделирования
для создания ПС
• Появление – с 1989 г.
• Первое поколение – 10
языков
• Второе поколение (языки
Буча, Рамбо, Якобсона и
др.) уже >50
• Идея унификации →
стандартизованный язык
третьего поколения Unified
Modeling Language (UML),
разр. 1994-97 гг.
• Последняя версия
стандарта – 2.5.1 (с декабря
2017).
13
Унифицированный язык
моделирования UML
• UML – стандартный язык для
создания моделей анализа,
проектирования и реализации
объектно-ориентированных
программных систем
• Используется для визуализации,
спецификации, разработки и
документирования результатов
программных проектов
• UML – не язык
программирования, но его
модели прямо транслируются в
текст на ОО-ЯВУ и в таблицы
реляционных БД
• Основной инструмент
представления модели –
диаграмма.
14
Диаграмма UML
• Это нагруженный связный граф,
вершины нагружаются
элементами модели, а дуги
(рёбра) – отношениями между
элементами
• Одна диаграмма отражает лишь
одну черту системы, поэтому
используется набор диаграмм,
обеспечивающий визуальное
представление ПС с разных точек
зрения
• Объединение точек зрения даёт
полную картину, достаточную для
решения задач разработки
• Группы диаграмм: структурные →
и поведения.
15
Структурные диаграммы
• Отражают статическую структуру
элементов ПС на уровнях:
• Архитектурный уровень:
• Диаграмма пакетов (структура ПС из
подсистем-пакетов)
• Диаграмма компонентов (из
подсистем-компонент)
• Уровень детального проектирования
• Диаграмма классов (структура из
классов)
• Диаграмма объектов (снимок объектов
ПС в момент времени)
• Диаграмма композитной структуры
(внутренняя структура компонента или
класса)
• Уровень физического размещения:
• Диаграмма развёртывания
(размещение артефактов разработки на
компьютерных ресурсах).
16
Диаграммы поведения (1/2)
• Описывают динамику
системы на этапах
разработки:
1. Формирование требований:
• Диаграмма Use Case,
вариантов использования
(последовательность действий
ПС с точки зрения
пользователя на естественном
языке)
• Диаграмма деятельности (в
виде алгоритма)
2. Анализ требований →
17
Диаграммы поведения (2/2)
2. Анализ требований:
• Диаграмма последовательности
(последовательность действий ПС в
виде сообщений между
участниками взаимодействия,
акцент – на времени)
• Диаграмма коммуникации (акцент
– на структурных связях участников)
• Диаграмма обзора взаимодействий
(для обзора потоков управления
между участниками)
• Диаграмма синхронизации
(последовательность состояний ПС
во времени, изменение состояния –
событие)
3. Детальное проектирование:
• Диаграмма конечного автомата
(последовательность состояний в
ЖЦ объекта).
18
Механизмы расширения в UML
• UML – это открытый
язык, допускающий
контролируемые
расширения
• Механизмы
расширения в UML:
• Ограничения →
• Теговые величины
• Стереотипы.
• Позволяют
адаптировать UML под
нужды конкретных
проектов и под новые
технологии.
19
Ограничение (constraint)
• Расширяет семантику
строительного UMLблока, позволяя
добавить новые
правила или
модифицировать
существующие
• Показывают на
диаграммах как
текстовую строку в { }.
20
Теговая величина (tagged value)
• Расширяет
характеристики
строительного UMLблока, позволяя задать
новую информацию в
спецификации
элемента
• Показывают как строку
в { }, в которой задано
имя величины и
значение
• Пример – две теговые
величины внутри
символа примечания
21
Стереотип (stereotype)
• Расширяет словарь языка
(расширение типизации),
позволяет создавать новые
виды строительных блоков,
производные от
существующих с учётом
специфики новой проблемы
• Элемент со стереотипом –
это вариация
существующего элемента с
такой же формой, но
отличная по сути
• Отображают как имя в
<< >>.
22
4. Объектноориентированная
разработка требований
23
UML в разработке требований
• Рассмотрим инструментарий
для решения двух задач:
формирования требований
заказчика и анализа
требований
• Форма требований –
желаемое поведение
системы
• Поэтому нужны
динамические модели,
отражающие поведение ПС
во времени:
• Use Case, диаграммы
деятельности, коммуникации,
последовательности.
24
Диаграмма Use Case
• Определяет поведение
системы с точки зрения
пользователя
• Главное средство для
первичного моделирования
динамики ПС
• Используется для выяснения
требований заказчика и их
фиксации в форме,
позволяющей проводить
дальнейшую разработку ПС
• В составе: элементы, актёры,
отношения зависимости,
обобщения и ассоциации;
примечания и ограничения.
25
Актёры и элементы Use Case
• Вершины – актёры и элементы
• Актёры – представляют внешний
мир, нуждающийся в работе
системы, взаимодействуют с её
частями ПС – элементами
• Элементы – это действия системы
в интересах актёров,
производящие видимый результат
• Набор всех элементов определяет
полные функциональные
возможности ПС
• Пользователь – может играть
несколько ролей и поэтому может
моделироваться несколькими
актёрами (также и актёром могут
быть разные пользователи).
26
Отношения в диаграммах Use Case (1/2)
• Между актёром и элементом
возможен только один тип
отношений – ассоциация
• Может быть помечена
именем, ролями, мощностью
• Между актёрами допустимо
отношение обобщения
(потомок может
взаимодействовать с такими
же разновидностями
элементов, что и родитель)
• Между элементами –
обобщение и зависимость
(включение и расширение). →
27
Отношения в диаграммах Use Case (2/2)
• Обобщение – потомок наследует
поведение родителя с возможным
дополнением и переопределением
• Потомок может замещать родителя
в любом месте диаграммы
• Включение – базовый элемент явно
включает поведение другого
элемента (пример отношения
делегации)
• Включаемый элемент никогда не
используется самостоятельно
• Расширение – базовый элемент
неявно включает поведение другого
элемента в точке, косвенно
определяемой расширяющим
элементом
• Применяется для моделирования
выбираемого поведения системы
• Так можно отделить обязательное
поведение от необязательного.
28
Пример простой диаграммы
Use Case
29
Поток событий (1/2)
• Диаграмма вариантов
использования описывает, что
должна делать ПС, но не как
• При моделировании это позволяет
отделять внешнее представление
системы от внутреннего
• Поведение элемента диаграммы
описывается потоком событий
• В потоке событий выделяют:
• Основной поток и альтернативные
потоки поведения
• Как и когда стартует и
заканчивается элемент
• Когда элемент взаимодействует с
актёрами
• Какими данными обмениваются
актёр и система.
30
Поток событий (2/2)
• Для уточнения и
формализации потоков
событий используют
диаграммы
последовательности
• В общем случае один
элемент диаграммы
описывает набор
последовательностей –
потоков событий
• Каждая последовательность
иллюстрирует поведение и
называется сценарием
• Сценарий – это экземпляр
элемента диаграммы.
31
Пример диаграммы – банкомат (1/2)
• Один базовый элемент, взаим-й с
актёром
• К базовому подключены два
расширяющих (Состояние, Снять)
и два включаемых
(Идентификация клиента,
Проверка счета)
• Базовый элемент имеет две
точки расширения, два других
элемента – ещё по одной
• В точки расширения возможна
вставка поведения из
расширяющего элемента
• Вставка происходит, если
выполняется условие
расширения (напр, Состояние –
запрос состояния).
32
Пример диаграммы – банкомат (2/2)
• Для расширяемого элемента
условие – внешнее,
формируемое вне его
(условие – это список
событий, происходящих вне
расширяемого элемента)
• Поведение базового
элемента задаётся
внутренним потоком
событий вплоть до точки
расширения
• В точке расширения
возможно выполнение
расширяющего элемента,
после чего возобновляется
работа внутреннего потока.
33
Возможное поведение модели «банкомат»
(1/3)
• Актёр инициирует действия
базового элемента
• На первом шаге – элемент
Идентификация клиента,
который
• Получает имя и запускает
элемент Проверить
достоверность
• В результате устанавливается
соединение с БД клиентов и
получаются параметры клиента
• Если исполняется условие
список подозрений, то
срабатывает расширяющий
элемент Захват карты, работа
прекращается
• Иначе →
34
Возможное поведение модели «банкомат»
(2/3)
• Иначе происходит возврат к
элементу Идентификация
клиента, который получает
номер счета клиента и
возвращает управление
базовому элементу
• Второй шаг работы базового
элемента – вызов элемента
Проверка счета, который
устанавливает соединение с БД
счетов и получает состояние и
ограничения счета
• Базовый элемент переходит к
первой точке расширения
диалог возможен
• Здесь возможно подключение
одного из двух элементов. →
35
Возможное поведение модели «банкомат»
(2/3)
• Если выполнено условие
расширения запрос состояния, то
запускается элемент Состояние
• В результате отображается
информация о состоянии счета и
управление переходит к базовому
элементу
• Печатается заголовок квитанции и
происходит переход ко второй
точке расширения выдача
квитанции
• Расширяющий элемент Состояние
продолжает находиться в активном
состоянии, запускается его второй
сегмент - в квитанции печатается
информация о состоянии счета
• В последний раз управление
возвращается базовому элементу –
завершается сеанс работы
банкомата.
36
Аспекты банкомата (1/2)
• По сути, каждый элемент задаёт
некоторый набор требований и
соответствует некоторому набору
понятий
• В дальнейшем каждый элемент
будет реализован определённым
набором классов
• Задаваемый набор понятий
расширяющего элемента
пересекает набор понятий
базового
• Т.е. реализация расширяющего
элемента будет пересекать
реализацию базового
• Так, элемент Захват карты
расширяет (пересекает) два
элемента Проверить
достоверность и Снять
• Значит, на этапе проектирования
его следует реализовать в виде
аспекта. →
37
Аспекты банкомата (2/2)
• Аспект – это отдельный
программный элемент, для
которого определяются:
• Совет (advice) – программный код,
реализующий пересекающее
требование заказчика
• Точка соединения (join point) –
место в процессе работы, куда
может вплетаться совет
• Срез (pointcut) – инструкция
аспекта, указывающая, в какие
точки соединения и при каких
условиях должен вплетаться совет
• Для элемента Захват карты:
• Совет – захватить карту
• Точка соединения – список
подозрений
• Срез – «(проверка достоверности &
список подозрений) или (проверка
снятия & список подозрений)».
38
Download