Цель работы:
- изучение диаграмм состояний,
- изучение их применения в процессе проектирования.
Диаграммы состояний (state diagrams)
Диаграммы состояний являются хорошо известным средством описания поведения систем. Они определяют все возможные состояния, в которых может находиться конкретный объект, а также процесс смены состояний объекта в результате влияния некоторых событий.
На рис. 13.1 показана диаграмма состояний UML, отражающая поведение отчета в системе управления проектами. На диаграмме изображены различные состояния, в которых может находиться отчет.
Рис 13.1 Диаграмма состояний UML, отражающая поведение отчета в системе управления проектами
Процесс начинается с начальной точки, затем следует самый первый переход в состояние «Проверка даты отчета». В поведении объекта в системе можно выделить действия, отображаемые переходами, и деятельности, отображаемые состояниями. Хотя и то и другое - это процессы, реализуемые, как правило, некоторым методом класса «Отчет», они трактуются различным образом. Действия связаны с переходами и рассматриваются, как мгновенные и непрерываемые. Деятельности связаны с состояниями и могут длиться достаточно долго. Деятельность может быть прервана в результате наступления некоторого события.
Переход может содержать метку. Синтаксически метка перехода состоит из трех частей, каждая из которых является необязательной: <Событие> [<Условие>]/<Действие>. Если метка перехода не содержит никакого события, это означает, что переход происходит, как только завершается какая-либо деятельность, связанная с данным состоянием. Из состояния «Проверка даты отчета» возможны два перехода. Метка одного из них включает условие. Условие - это логическое условие, которое может принимать два значения: «истина» или «ложь». Условный переход выполняется только в том случае, если условие принимает значение «истина», в противном случае выполняется переход, не помеченный условием.
Из конкретного состояния в данный момент времени может быть осуществлен только один переход; таким образом, условия являются взаимно исключающими для любого события. Существует два особых состояния: вход и выход. Любое действие, связанное с событием входа, выполняется, когда объект входит в данное состояние. Событие выхода выполняется в том случае, когда объект выходит из данного состояния. Диаграммы состояний хорошо использовать для описания поведения некоторого объекта в нескольких различных вариантах использования. Они не слишком пригодны для описания поведения ряда взаимодействующих объектов.
Рекомендуется строить диаграммы состояний только для тех классов, поведение которых влияет на общее поведение системы, например для классов пользовательского интерфейса и управляющих объектов.
Описание кнопок панели инструментов
Кнопка |
Описание |
Название |
|
Выбор элемента модели | Selection Tool |
Ввод текста | Text box | |
Комментарий | Note | |
Связь комментария с элементом | Anchor Note to Item | |
Состояние | State | |
Вход | Start State | |
Выход | End State | |
Переход в состояние | State Transition | |
Возвращение | Transition ti Self |
2. Пример
На рис. 13.2 и 13.3 приведены диаграммы состояний экземпляра класса «Студент». Эти диаграммы показывают состояния экземпляра в ходе взаимодействия объекта класса «Студент» с БД студентов. Первая диаграмма расписывает состояния объекта подробно, а вторая показывает только общее состояние взаимодействия с БД.
Рис 13.2 Диаграмма 1
Найдем численную оценку для каждой из диаграмм.
Диаграмма 1
Так как на диаграмме состояний связи отсутствуют, проведем расчет по сокращенной формуле:
Диаграмма 2
Полученный результат объясняется наличием недостаточно детализированного состояния на диаграмме
Упражнения
Упражнение 1. Создание диаграммы состояний для класса CourseOffering
Для создания диаграммы состояний:
- Щелкните правой кнопкой мыши в браузере по нужному классу.
- Выберите пункт New > Statechart Diagram в открывшемся меню.
Для того чтобы добавить состояние:
- На панели инструментов нажмите кнопку State.
- Щелкните мышью на диаграмме состояний по тому месту, куда хотите поместить состояние.
Все элементы состояния можно добавить с помощью вкладки Detail окна спецификации состояния. Для того чтобы добавить деятельность:
- Откройте окно спецификации требуемого состояния.
- Перейдите на вкладку Detail.
- Щелкните правой кнопкой мыши по окну Actions.
- Выберите пункт Insert в открывшемся меню.
- Дважды щелкните по новому действию.
- Введите действие в поле Actions.
- В окне When укажите Do, чтобы сделать новое действие деятельностью.
Для того чтобы добавить входное действие, в окне When укажите On Entry. Для того чтобы добавить выходное действие, в окне When укажите On Exit. Послать событие можно с помощью следующих операций:
- Откройте окнр спецификации требуемого состояния.
- Перейдите на вкладку Detail.
- Щелкните правой кнопкой мыши по окну Actions.
- Выберите пункт Insert в открывшемся меню.
- Дважды щелкните по новому действию.
- В качестве типа действия укажите Send Event.
- В соответствующие поля введите событие (event), аргументы (arguments) и целевой объект (Target).
Для того чтобы добавить переход:
- Нажмите кнопку Transition панели инструментов.
- Щелкните мышью по состоянию, откуда осуществляется переход.
- Проведите линию перехода до того состояния, где он завершается.
Чтобы добавить рефлексивный переход:
- Нажмите кнопку Transition to Self панели инструментов.
- Щелкните мышью по тому состоянию, где осуществляется рефлексивный переход.
Для того чтобы добавить событие, его аргументы, ограждающее условие и действие:
- Дважды щелкните по переходу, чтобы открыть окно его спецификации.
- Перейдите на вкладку General.
- Введите событие в поле Event.
- Введите аргументы в поле Arguments.
- Введите ограждающее условие в поле Condition.
- Введите действие в поле Action.
Для отправки события:
- Дважды щелкните по переходу, чтобы открыть окно его спецификации.
- Перейдите на вкладку Detail.
- Введите событие в поле Send Event.
- Введите аргументы в поле Send Arguments.
- Задайте цель в поле Send Target.
Для указания начального или конечного состояния:
- На панели инструментов нажмите кнопку Start State или End State.
- Щелкните мышью на диаграмме состояний по тому месту, куда хотите поместить состояние.
Уточнение ассоциаций: некоторые ассоциации (семантические, структурные, устойчивые связи по данным) могут быть преобразованы в зависимости (неструктурные, временные связи отражают видимость), а агрегации - в композиции (рис. 13.3).
Для преобразования агрегации в композицию:
- Щелкните правой кнопкой мыши по тому концу агрегации, который упирается в класс-часть (см. рис.13.2 - Schedule).
- Выберите пункт Containment в открывшемся меню.
- Укажите метод включения By Value. Значение By Value предполагает, что целое и часть создаются и разрушаются одновременно, что соответствует композиции. Агрегация (By Reference) предполагает, что целое и часть создаются и разрушаются в разное время.
Рис. 13.3 Пример преобразования ассоциаций и агрегаций
Уточнение обобщений: в случае ситуации с миграцией подклассов (студент может переходить с очной формы обучения на вечернюю) иерархия наследования реализуется так, как показано на рис. 13.4. Такое решение повышает устойчивость системы (не нужно модифицировать описание объекта).
Рис. 2.55. Преобразование обобщения
Контрольные вопросы
- Каково назначение диаграмм состояния?
- Как отображаются действия и деятельности на диаграммах состояния?
- Что такое условный переход и как он описывается на диаграмме?
- Какие особые состояния объекта отображаются на диаграмме?
- Каковы преимущества и недостатки диаграмм состояния?