Диаграммы состояний

Цель работы:

  • изучение диаграмм состояний,
  • изучение их применения в процессе проектирования.

Диаграммы состояний (state diagrams)

Диаграммы состояний являются хорошо известным средством описа­ния поведения систем. Они определяют все возможные состояния, в кото­рых может находиться конкретный объект, а также процесс смены состояний объекта в результате влияния некоторых событий.

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

13-1.jpg

Рис 13.1 Диаграмма состояний UML, отражающая поведение отчета в системе управления проектами

Процесс начинается с начальной точки, затем следует самый первый переход в состояние «Проверка даты отчета». В поведении объекта в системе можно выделить действия, отображаемые переходами, и деятельности, отображаемые состояниями. Хотя и то и другое - это процессы, реализуемые, как правило, некоторым методом класса «Отчет», они трактуются различным образом. Действия связаны с переходами и рассматриваются, как мгновенные и непрерываемые. Деятельности связаны с состояниями и могут длиться достаточно долго. Деятельность может быть прервана в результате наступления некоторого события.

Переход может содержать метку. Синтаксически метка перехода состоит из трех частей, каждая из которых является необязательной: <Событие> [<Условие>]/<Действие>. Если метка перехода не содержит никакого события, это означает, что переход происходит, как только завершается какая-либо деятельность, связанная с данным состоянием. Из состояния «Проверка даты отчета» возможны два перехода. Метка одного из них включает условие. Условие - это логическое условие, которое может принимать два значения: «истина» или «ложь». Условный переход выполняется только в том случае, если условие принимает значение «истина», в противном случае выполняется переход, не помеченный условием.

Из конкретного состояния в данный момент времени может быть осуществлен только один переход; таким образом, условия являются взаимно исключающими для любого события. Существует два особых состояния: вход и выход. Любое действие, связанное с событием входа, выполняется, когда объект входит в данное со­стояние. Событие выхода выполняется в том случае, когда объект выходит из данного состояния. Диаграммы состояний хорошо использовать для описания поведения некоторого объекта в нескольких различных вариантах использования. Они не слишком пригодны для описания поведения ряда взаимодействующих объектов.

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

Описание кнопок панели инструментов

Кнопка

Описание

Название

p13-1.jpg

Выбор элемента модели 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.jpg
Рис 13.2
Диаграмма 1

Найдем численную оценку для каждой из диаграмм.
Диаграмма 1

Так как на диаграмме состояний связи отсутствуют, проведем расчет по сокращенной формуле:
13-2d1.jpg
Диаграмма 2
13-2d2.jpg
Полученный результат объясняется наличием недостаточно детализи­рованного состояния на диаграмме

Упражнения

Упражнение 1. Создание диаграммы состояний для класса CourseOffering

Для создания диаграммы состояний:

  1. Щелкните правой кнопкой мыши в браузере по нужному классу.
  2. Выберите пункт New > Statechart Diagram в открывшемся меню.

Для того чтобы добавить состояние:

  1. На панели инструментов нажмите кнопку State.
  2. Щелкните мышью на диаграмме состояний по тому месту, куда хотите поместить состояние.

Все элементы состояния можно добавить с помощью вкладки Detail окна спецификации состояния. Для того чтобы добавить деятельность:

  1. Откройте окно спецификации требуемого состояния.
  2. Перейдите на вкладку Detail.
  3. Щелкните правой кнопкой мыши по окну Actions.
  4. Выберите пункт Insert в открывшемся меню.
  5. Дважды щелкните по новому действию.
  6. Введите действие в поле Actions.
  7. В окне When укажите Do, чтобы сделать новое действие деятельностью.

Для того чтобы добавить входное действие, в окне When ука­жите On Entry. Для того чтобы добавить выходное действие, в окне When укажите On Exit. Послать событие можно с помощью следующих операций:

  1. Откройте окнр спецификации требуемого состояния.
  2. Перейдите на вкладку Detail.
  3. Щелкните правой кнопкой мыши по окну Actions.
  4. Выберите пункт Insert в открывшемся меню.
  5. Дважды щелкните по новому действию.
  6. В качестве типа действия укажите Send Event.
  7. В соответствующие поля введите событие (event), аргументы (arguments) и целевой объект (Target).

Для того чтобы добавить переход:

  1. Нажмите кнопку Transition панели инструментов.
  2. Щелкните мышью по состоянию, откуда осуществляется переход.
  3. Проведите линию перехода до того состояния, где он завершается.

Чтобы добавить рефлексивный переход:

  1. Нажмите кнопку Transition to Self панели инструментов.
  2. Щелкните мышью по тому состоянию, где осуществляется рефлексивный переход.

Для того чтобы добавить событие, его аргументы, огражда­ющее условие и действие:

  1. Дважды щелкните по переходу, чтобы открыть окно его спецификации.
  2. Перейдите на вкладку General.
  3. Введите событие в поле Event.
  4. Введите аргументы в поле Arguments.
  5. Введите ограждающее условие в поле Condition.
  6. Введите действие в поле Action.

Для отправки события:

  1. Дважды щелкните по переходу, чтобы открыть окно его спецификации.
  2. Перейдите на вкладку Detail.
  3. Введите событие в поле Send Event.
  4. Введите аргументы в поле Send Arguments.
  5. Задайте цель в поле Send Target.

Для указания начального или конечного состояния:

  1. На панели инструментов нажмите кнопку Start State или End State.
  2. Щелкните мышью на диаграмме состояний по тому месту, куда хотите поместить состояние.

Уточнение ассоциаций: некоторые ассоциации (семантические, структурные, устойчивые связи по данным) могут быть преобразованы в зависимости (неструктурные, временные связи отражают видимость), а агрегации - в композиции (рис. 13.3).

Для преобразования агрегации в композицию:

  1. Щелкните правой кнопкой мыши по тому концу агрегации, который упирается в класс-часть (см. рис.13.2 - Schedule).
  2. Выберите пункт Containment в открывшемся меню.
  3. Укажите метод включения By Value. Значение By Value предполагает, что целое и часть создаются и разрушаются одновременно, что соответствует ком­позиции. Агрегация (By Reference) предполагает, что целое и часть создаются и разрушаются в разное время.

13-3.jpg

Рис. 13.3 Пример преобразования ассоциаций и агрегаций

Уточнение обобщений: в случае ситуации с миграцией под­классов (студент может переходить с очной формы обучения на вечернюю) иерархия наследования реализуется так, как показа­но на рис. 13.4. Такое решение повышает устойчивость системы (не нужно модифицировать описание объекта).

13-4.jpg

Рис. 2.55. Преобразование обобщения

Контрольные вопросы

  1. Каково назначение диаграмм состояния?
  2. Как отображаются действия и деятельности на диаграммах состояния?
  3. Что такое условный переход и как он описывается на диаграмме?
  4. Какие особые состояния объекта отображаются на диаграмме?
  5. Каковы преимущества и недостатки диаграмм состояния?
Расскажи друзьям