Специальные состояния.
Начальное состояние (initial state) – это специальное состояние, соответствующее ситуации, когда машина состояний еще не работает. На диаграмме начальное состояние изображается в виде закрашенного кружка. Начальное состояние не имеет таких составляющих, как действия на входе, выходе и внутренняя активность, но оно обязано иметь исходящий переход, ведущий в то состояние, которое будет являться по настоящему первым состоянием при работе машины состояний. Исходящий переход из начального состояния не может иметь события перехода, но может иметь сторожевое условие. В последнем случае должны быть определены несколько переходов из начального состояния, причем один из них обязательно должен срабатывать. Начальное состояние может иметь действие на переходе — это действие выполняется до начала работы машины состояний.
Заключительное состояние (final state) – это специальное состояние, соответствующее ситуации, когда машина состояний уже не работает. На диаграмме заключительное состояние изображается в виде закрашенного кружка, который обведен дополнительной окружностью. Подобно начальному состоянию, заключительное состояние не имеет таких составляющих, как действия на входе, выходе и внутренняя активность, но имеет входящий переход, ведущий из того состояния, которое является последним состоянием в данном сеансе работы конечного автомата. Работа конечного автомата может завершаться несколькими различными способами. Это соответствует общепринятой программистской практике: программа может иметь вариант нормального завершения и несколько вариантов завершения при возникновении исключительной ситуации или при ошибке.
Историческое состояние может использоваться во вложенной машине состояний внутри составного состояния. При первом запуске машины состояний историческое состояние означает в точности тоже, что и начальное: оно указывает на состояние, в котором находится машина в начале работы. Если в данной машине состояний используется историческое состояние, то при выходе из объемлющего составного состояния запоминается то состояние, в котором находилась вложенная машина перед выходом. При повторном входе в данное составное состояние в качестве текущего состояния восстанавливается то запомненное состояние, в котором машина находилась при выходе. Проще говоря, историческое состояние заставляет автомат помнить, в каком состоянии его прервали в прошлый раз и "продолжать начатое".
События.
Различные типы состояний позволяют задавать структуру автомата. Но основная семантическая нагрузка при описании поведения падает на переходы различных типов.
Помимо структурных составляющих — исходного и целевого состояний – переход может быть нагружен событием перехода, сторожевым условием и действиями на переходе.
В UML используются четыре типа событий:
● событие вызова,
● событие сигнала,
● событие таймера,
● событие изменения.
Событие вызова (call event) — это событие, возникающее при вызове метода класса. Событие вызова — наиболее часто используемый тип событий перехода. Поскольку событие вызова — это вызов метода, то оно может иметь аргументы, как всякий вызов метода. Значения аргументов могут использоваться в действиях перехода. Если метод возвращает значение, то этот факт отмечается с помощью действия возврата в последовательности действий данного перехода
Событие сигнала (signal event)— это событие, возникающее при посылке сигнала. Семантически сигнал — это именованный объект, который создается другим объектом (отправителем) и обрабатывается третьим объектом (получателем). Сигнал может иметь атрибуты (параметры). Сигнал может иметь операции. Концепция сигнала в UML принадлежит к числу наиболее фундаментальных и имеет ясную и строго определенную семантику. Объект, являющийся отправителем, обращается к классификатору сигнала (вызывает операцию send()), указывая аргументы сигнала (значения атрибутов) и целевое множество объектов, которым должен быть отправлен сигнал. После этого объект-отправитель продолжает свою работу и дальнейшее его не касается.
Событие таймера (time event)— это событие, которое возникает, когда истек заданный интервал времени с момента попадания автомата в данное состояние. Семантически событие таймера означает следующее. Подразумевается, что у состояния имеется таймер, который сбрасывается в 0 (начинает отсчет), когда автомат переходит в данное состояние (напомним, что автомат считается перешедшим в состояние, когда закончено выполнение всех действий, предписанных переходом). Таймер ведет отсчет времени. Если до истечения указанного интервала времени сработает другой переход, то событие таймера не возникает. Когда указанный интервал времени истекает, наступает событие таймера и возбуждается соответствующий переход. Если переход срабатывает, то автомат переходит в новое состояние.
Если переход по событию таймера не срабатывает (из-за ложности сторожевого условия), то событие таймера теряется, и таймер продолжает отсчет времени, так что позже может сработать другой переход по событию таймера с большим интервалом времени. Событие таймера не может быть отложено.
Событие изменения (change event)— это событие, которое возникает, когда некоторое логическое условие становится истинным, будучи до этого ложным. Синтаксически событие изменения записывается с помощью ключевого слова when, за которым указывается логическое выражение (условие). Семантически событие изменения означает следующее. Подразумевается, что в системе имеется механизм, работающий как демон (например, приложение, запущенфяное в фоновом режиме), который генерирует событие, если в результате изменения состояния системы изменяется значение логического выражения. Если выражение, являющееся аргументом события изменения, принимает значение true (имея до этого значение false), то переход возбуждается. Если выражение имеет значение true в тот момент, когда автомат переходит в данное состояние, то переход сразу возбуждается. Если переход срабатывает, то автомат, как обычно, переходит в новое состояние. Если переход не срабатывает, то событие изменения теряется. При этом если условие продолжает оставаться истинным, то нового события изменения не возникает. Для того чтобы снова возникло событие изменения, нужно, чтобы условие стало сначала ложным, а потом истинным.
Дата добавления: 2021-05-28; просмотров: 510;