Диаграмма состояний в графической форме показывает процесс перехода объекта между состояниями в ответ на события.
Любую модель можно представить в разных формах, но чаще всего предпочтение отдаётся графической. Для отображения модели можно использовать любую нотацию, элементы которой соответствуют её элементам. Самая популярная нотация для модели состояний — UML State Machine Diagram.
Основные элементы этой нотации:
- состояние объекта;
- переход между состояниями объекта;
- начальное и конечное состояния системы;
- точка прерывания процесса.
Рассмотрим создание диаграммы состояний на примере процесса подачи докладов для участия в конференции.
1. Состояние объекта
Состояние объекта обозначается прямоугольником с закруглёнными углами. Внутри прямоугольника, как правило, записывается название, отражающее состояние объекта.
Создадим модель состояний для объекта «доклад». Его первое состояние — «черновик».
Кроме названия, графическое изображение состояния может содержать три вида действий, которые происходят в системе:
- во время входа (Entry), когда объект перешёл в некое состояние,
- нахождения объекта в этом состоянии (Do),
- выхода (Exit), когда объект перешёл из этого состояния в другое.
Эти действия записываются внутри прямоугольника сразу под названием. Они необязательны и могут использоваться в любой комбинации.
Какие действия можно добавить к состоянию «черновик» для объекта «доклад»? При переходе объекта в новое состояние не предусмотрено никаких действий, а значит, у состояния объекта не будет действия entry. Когда «доклад» перешёл в состояние «черновик» и находится в нём, в системе происходит поиск куратора, который будет заниматься этим докладом. Это заметно по действию do. Когда объект будет переходить в следующее состояние, в действии exit будет указано, что найденный куратор прикреплён к докладу.
Обратите внимание: в примере указаны только два из трёх действий. Так бывает, если остальные действия не предусмотрены процессом. И это нормально.
2. Начальное состояние системы
Для того чтобы графически представить, где именно начинается жизненный цикл объекта, используется начальное состояние системы. Его обозначают закрашенным кружком, от которого к первому состоянию объекта протянута стрелка.
Так на диаграмме будет выглядеть изображение того, что жизненный цикл объекта «доклад» начинается с состояния «черновик».
3. Переход между состояниями
Для отображения переходов между состояниями объекта используются стрелки, указывающие направление — от одного состояния к другому. Вдоль стрелок записывается событие, из-за которого объект меняет состояние.
Добавим на схему другие варианты состояний объекта «доклад» и отобразим переходы между ними. Например, «доклад» должен проверить куратор, так он переходит в состояние «на проверке». Затем «доклад» нужно добавить в расписание конференции — он переходит в состояние «принят».
Процесс может быть линейным, а может ветвиться. В этом случае на схеме от прямоугольника состояния отходят несколько стрелок. Каждая из них ведёт к новому состоянию.
Например, в результате проверки куратором «доклад» может перейти в состояние «принят» (если куратор добавит его в расписание конференции), а может перейти в состояние «отклонён» (если куратор посчитает, что он не походит для представления на конференции, и не примет его).
4. Конечное состояние системы
Конечное состояние системы обозначается ободком вокруг закрашенного кружка.
Чтобы схема процесса выглядела завершённой и не вызывала сомнений насчёт того, является ли состояние «принят» последним в рассматриваемом процессе, нужно обозначить на ней конечное состояние системы. Получится так:
5. Точка прерывания процесса
Процесс может не дойти до конечного состояния системы. Такие ситуации называются прерыванием процесса. Для графического отображения точки прерывания процесса используется круг с крестом внутри.
Чтобы отличить точку прерывания процесса от конечного состояния системы, нужно определить конечную цель рассматриваемого процесса. В рассматриваемом примере цель — подача доклада на конференцию и его успешное принятие программным комитетом. Следовательно, отклонение доклада — прерывание процесса.
На диаграмме уже явно видны начало и конец жизненного цикла объекта «доклад», однако состояние «отклонён» как будто повисло в воздухе: оно не является конечным и не переходит в другое состояния. Так происходит потому, что состояние «отклонён» возникает в ходе прерывания процесса подачи доклада на конференцию. На диаграмме это выглядит так:
Теперь диаграмма состояний для объекта «доклад», участвующего в процессе подачи материалов на конференцию, готова.