9.    Диаграмма состояний (простые состояния) и правила ее построения. Пример.

 

Диаграмма состояний (state chart diagram) – диаграмма, на которой изображается конечный автомат с простыми состояниями, переходами и, возможно, вложенными композитными состояниями. Концепция диаграммы состояний разработана Дэвидом Хэрелом (David Harel).

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

          Конечный автомат – это спецификация последовательности состояний, через который в течение своей жизни проходит объект (система, подсистема, экземпляр класса), в том числе взаимодействуя с другими объектами (системами, подсистемами, экземплярами классов) и находясь под воздействием некоторого потока событий.

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

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

Графически автомат описывается графом, в котором вершинами обозначаются состояния, а дугами – возможные переходы. Простейшим примером является техническое устройство, которое может быть в двух состояниях: исправно/неисправно.

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

Считается, что в определённом состоянии объект может находиться конечное время.

Переход (transition) – реакция объекта на некоторые событие. Объект выполняет действие, прикреплённое к переходу, и меняет своё состояние. Каждому состоянию соответствует своё множество переходов. Изменение состояния является атомарным действием, которое нельзя прервать извне. Обычно время перехода считается нулевым (если оно не оговорено отдельно), т.е. переходы осуществляются мгновенно. Поведение объекта определяется как последовательное перемещение по графу состояний от вершины к вершине по дугам.

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

Сторожевое условие (guard condition), если оно есть, всегда записывается в прямых скобках после события-триггера и представляет собой некоторое булевское выражение. Напомним, что булевское выражение должно принимать одно их двух взаимно исключающих значений: "истина" или "ложь". Из контекста диаграммы состояний должна явно следовать семантика этого выражения, а для записи выражения может использоваться синтаксис языка объектных ограничений, основы которого изложены в приложении.

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

В общем случае из одного состояния может быть несколько переходов с одним и тем же событием-триггером. При этом никакие два сторожевых условия не должны одновременно принимать значение "истина". Каждое из сторожевых условий необходимо вычислять всякий раз при наступлении соответствующего события-триггера.

Срабатывание <перехода> (fire) - выполнение перехода из одного состояния в другое. Срабатывание перехода может зависеть не только от наступления события, но и от выполнения определенного условия, называемого сторожевым. Объект перейдет из одного состояния в другое в том случае, если произошло указанное событие и сторожевое условие приняло значение "истина". До срабатывания перехода объект находится в предыдущем от него состоянии, называемым исходным, или в источнике (не путать с начальным состоянием - это разные понятия), а после его срабатывания объект находится в последующем от него состоянии (целевом состоянии).

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

<имя события>'('<список параметров, разделенных запятыми>')'

    '['<сторожевое условие>']'

<выражение действия>.

Кроме обычных состояний на диаграмме состояний могут размещаться псевдосостояния.

Псевдосостояние (pseudo-state) - вершина в конечном автомате, которая имеет форму состояния, но не обладает поведением. Примерами псевдосостояний, которые определены в языке UML, являются начальное и конечное состояния.

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

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

Конечное состояние (final state) - разновидность псевдосостояния, обозначающее прекращение процесса изменения состояний конечного автомата или нахождения моделируемого объекта в составном состоянии.

Каждое состояние должно быть достижимо, т.е. должен существовать ориентированный путь в графе от начального состояния к нему. В каждый момент времени автомат может находиться только в одном из состояний (последовательное поведение).  В автомате не должно быть изолированных состояний и переходов, а также  конфликтующих переходов, т.е. объект не может перейти одновременно в два состояния из какого-либо состояния (кроме случая параллельных автоматов). Исключение конфликтов достигается введением сторожевых условий.

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

Каждое действие записывается в виде отдельной строки и имеет следующий формат:

<метка действия '/ ' выражение действия>

Метка действия указывает на обстоятельства или условия, при которых будет выполняться деятельность, определенная выражением действия. При этом выражение действия может использовать любые атрибуты и связи, принадлежащие области имен или контексту моделируемого объекта. Если список выражений действия пустой, то метка действия с разделителем в виде наклонной черты '/' не указывается. Перечень меток действий в языке UML фиксирован, причем эти метки не могут быть использованы в качестве имен событий:

1)  entry – указывает, что действие выполняется в момент входа в данное состояние (входное действие);

2)      exit - указывает, что действие выполняется в момент выхода в данное состояние (выходное действие);

3)      do – специфицирует выполняемую деятельность («do activity»). Внутренняя деятельность (do activity) - выполнение объектом операций или процедур, которые требуют определенного времени;

4)      include - указывает, что действие – это обращение к автомату с указанным именем.

Пример состояния с непустой секцией внутренних действий

 

Пример диаграммы состояний (простой)

Hosted by uCoz