Диаграмма Состояний – Statechart diagram

В большинстве случаев диаграммы Состояний строятся для единственного класса и отражают динамику поведения единственного объекта.

Состояние (State) – это ситуация в жизни объекта, на протяжении которой он удовлетворяет некоторому условию, осуществляет определённую деятельность или ожидает какого-то события.

Состояние изображается в виде прямоугольника с закруглёнными углами.

 
 

Например, для класса Account системы ATM можно выделить такие состояния, как “счёт открыт”, “счёт закрыт”, “счёт превышен”.

 
 

Существуют два специальных состояния объекта: начальное и конечное.

Начальным (Start) называется состояние, в котором объект находится сразу же после своего создания.

Конечным (Stop) называется состояние, в котором объект находится непосредственно перед уничтожением.

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

 
 

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

1. Входное действие (Entry action) – непрерываемое действие, которое выполняется при переходе объекта в данное состояние. Например, при переходе в состояние “Счёт превышен”, выполняется действие “Временно заморозить счёт”.

2. Деятельность (Activity) – реализуемое объектом действие, когда он находится в данном состоянии. Например, в состоянии “Счёт превышен” следует послать уведомление клиенту. Следует заметить, что деятельность – это прерываемое поведение, поскольку она может быть прервана переходом объекта в другое состояние.

3. Выходное действие (Exit action) – осуществляется как составная часть процесса выхода объекта из данного состояния. Так, при выходе объекта Account из состояния “Счёт превышен” (независимо от того, куда он переходит) выполняется действие “Разморозить счёт”. Как и входное, выходное действие является непрерываемым.

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

 
 

От одного состояния объекта к последующему состоянию проводится переход.

Переход (Transition) – это перемещение из одного состояния в другое.

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

При переходе из первого состояния во второе объект выполняет некоторое действие Action (Сохранить дату закрытия счёта) под воздействием определённого события Event (Клиент требует закрыть) и выполнении заданного условия Guard conditions.

Событие (Event) – это то, что вызывает переход из одного состояния в другое.

Действие (Action) – это атомарное вычисление, которое приводит к смене состояния или возврату значения.

Ограждающие условия (Guard conditions) определяют, когда переход может быть выполнен, а когда нет.

Таким образом, диаграмма Состояний представляет собой автомат (State Machine), включающий состояния, переходы, события и действия.

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


Ниже представлена диаграмма Состояний для класса Account системы ATM.

Диаграммы Состояний хорошо использовать для описания поведения некоторого объекта в нескольких различных вариантах использования. Они не слишком пригодны для описания поведения взаимодействующих объектов. Не следует пытаться строить диаграммы Состояния для каждого класса системы, это будет почти всегда пустой тратой времени. Следует использовать диаграммы Состояния только для тех классов, поведение которых действительно интересно и важно, и если построение диаграмм Состояний помогает лучше его понять. Многие разработчики считают, что пользовательский интерфейс и управляющие объекты обладают именно таким поведением, которое полезно изображать с помощью диаграмм Состояний.