Основные сведения о диаграмме состояний
В общем случае при моделировании поведения с использованием диаграммы состояний показывают следующие элементы:
Состояние – State.
Событие, которое изменяет текущее состояние – Event.
Переход из одного состояния в другое (в результате события) – Transition.
Действие, которое происходит внутри состояния или при переходе – Actions. Существует четыре возможных действия в пределах состояния:
- на входе – On Entry;
- на выходе – On Exit;
- внутри – Do;
- на переходе – On Event.
![]() |
Диаграмма состояний определяет все возможные состояния, в которых может находиться конкретный элемент, а также процесс смены состояний этого элемента в результате влияния некоторых событий.
![]() |
Состояния могут быть вложенными, то есть одно состояние (суперсостояние) может включать множество других состояний. Вместо того чтобы поддерживать одинаковые переходы (по одному на каждое состояние), их можно объединить, перенося в одно суперсостояние.
Вложенные состояния используются в случае, когда у нескольких состояний имеются идентичные переходы.
Бывают ситуации, когда необходимо помнить, в каком состоянии находился объект в прошлом. Например, при выходе из суперсостояния по нескольким переходам следует запомнить, из какой точки суперсостояния произошёл выход. Существует два способа решения этой проблемы:
1. Включение начального состояния в суперсостояние. Именно в данной точке будет находиться объект при входе в суперсостояние.
2. Использование истории состояний (State history). В этом случае объект может выйти из суперсостояния, а затем вернуться точно в то место, откуда вышел.
![]() |
Пример диаграммы состояний объекта класса Курсы:
![]() |
Та же самая диаграмма с использованием суперсостояния и хронологии:
Совокупность переходов диаграммы показывает, как объект Курс может переходить из одного состояния в другое. Стрелка перехода направлена от первоначального состояния к последующему.
Переходы могут быть рефлексивными: объект переходит в то же состояние, в котором он в настоящий момент находится.
Переходы могут иметь ограждающие условия (Guard condition), которые определяют, когда переход может быть выполнен. Ограждающие условия задаются в случае, когда существует несколько переходов из одного состояния (условия обязательно должны быть взаимоисключающими).
Как состояния, так и диаграммы состояний могут быть вложены друг в друга для более детального представления отдельных элементов модели.