Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

transition (переход)

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

Семантика

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

Структура

У перехода есть начальное состояние, переключающее событие, сторожевое условие, действие и целевое состояние (кое-что из перечисленного может отсутствовать).
Начальное состояние. Состояние, изменяемое переходом. Если объект находится в начальном состоянии, то исходящий переход может запуститься в том случае, если объект получает переключающее событие и если удовлетворено сторожевое условие (при его наличии).
Целевое состояние. Состояние, которое активизируется после завершения перехода. Иначе говоря, это то состояние, в которое переходит объект. У внутренних переходов, которые не вызьвают изменения состояния, целевых состояний нет.
Переключающее событие. Событие, после получения, которого может произойти переход из начального состояния объекта (при условии удовлетворения сторожевых условий). Если у данного события есть параметры, то их значения будут доступны переходу и могут использоваться в выражениях для описания сторожевых условий и действий. Событие, запускающее переход, становится текущим событием, доступным для второстепенных действий, представляющих собой часть непрерывного шага, начатого этим событием.
Переход, у которого нет явного переключающего события, называется переходом по завершении. Такой переход запускается при завершении всякой внутренней деятельности в данном состоянии. Завершение композитного состояния происходит тогда, когда оно достигает своего конечного состояния. Если у состояния отсутствует всякая внутренняя деятельность и нет вложенных состояний, то переход по завершении запускается тогда, когда осуществляется вход в это состояние, но после выполнения действия при входе. Обратите внимание, что для запуска перехода по завершении необходимо соблюдение сторожевого условия. Если же в момент завершения сторожевое условие не удовлетворено, то неявное событие завершения считается истраченным и переход не запустится (даже впоследствии, когда сторожевое условие может стать истинным). Если такое поведение не годится, можно воспользоваться событием изменения.
Обратите внимание, что все проявления события в конечном автомате должны иметь одну и ту же сигнатуру.
Сторожевое условие. Сторожевое условие представляет собой логическое выражение, которое вычисляется при обработке события, запускающего переход, включая неявное событие завершения деятельности при переходе по завершении. Если при наступлении события конечный автомат выполняет непрерывный шаг, то событие сохраняется до тех нор, пока этот шаг не будет завершен, а конечный автомат не будет находиться в покое. В противном же случае событие обрабатывается немедленно. Переход может запускаться, если выражение, описывающее сторожевое условие, истинно. Если оно ложно, переход не запускается. Событие, которое не запускает ни один переход, попросту игнорируется. Это не является ошибкой. Одно и то же событие может запускать несколько переходов, имеющих различные сторожевые условия. Когда наступает событие, происходит проверка всех сторожевых условий. Если удовлетворено сразу несколько сторожевых условий, то все равно запускается лишь один переход. При этом выбор возможного перехода делается случайно (разумеется, если в данном случае не существует какого-либо правила назначения приоритетов).
Следует отметить, что сторожевое условие вычисляется всего один раз, при обработке события. Если в этот момент оно ложно, но после становится истинным, переход не запускается. Исключение составляет тот случай, когда повторяется то же самое событие, и сторожевое условие при этом истинно. Обратите внимание, что сторожевое условие не является подходящим средством для продолжительного наблюдения за значением. Вместо этого в такой ситуации лучше использовать событие изменения.
Если у перехода нет сторожевого условия, то считается, что оно истинно. Переход при этом может запускаться сразу после наступления переключающего события. Если в настоящий момент может произойти сразу несколько переходов, запустится только один из них. Выбор этого перехода производится случайным образом.
Для большего удобства сторожевое условие можно разложить на ряд более простых сторожевых условий. В действительности, сторожевые условия могут разветвляться (от одного переключающего события или же от другого сторожевого условия). Каждый из маршрутов по этому дереву сторожевых условий представляет собой единый переход. Этот переход запускается (одним) переключающим событием,
действительное сторожевое условие, которого представляет собой конъюнкцию ("и") всех сторожевых условий, встречающихся на маршруте данного перехода. Все выражения, находящиеся на этом маршруте, проверяются перед запуском перехода. Переход не может запуститься частично. Несколько независимых переходов могут иметь частично общее описание. Пример разветвления сторожевых условий вы найдете на рис. 183.

Не следует забывать, что разветвления сторожевых условий и возможность упорядочивать переходы существуют исключительно для удобства, поскольку того же результата можно было бы достичь при помощи нескольких отдельных переходов, каждый из которых имел бы свое собственное сторожевое условие.
Действие. Переход может включать в себя выражение для описания действия. Это выражение для процедурного вычисления, которое может отразиться на объекте, которому принадлежит конечный автомат (и, косвенно, на других объектах, к которым он имеет доступ). В этом выражении могут использоваться параметры переключающего события, а также атрибуты и ассоциации объекта. Переключающее событие, которое запустило непрерывный шаг (включая более поздние его сегменты, для которых переключающее событие не требуется, а также действия при входе и выходе), доступно в течение этого шага в виде текущего события.
Действие может представлять собой последовательность действий. Само действие атомарно, - то есть его нельзя прервать извне. Действие должно быть выполнено полностью и лишь после этого можно будет обрабатывать другие действия или события. Следовательно, для того чтобы действия не "подвешивали" конечный автомат, они должны иметь минимальную временную протяженность. Все события, которые были получены во время выполнения действия, сохраняются до тех нор, пока это действие не закончится, после чего происходит их обработка.
Разветвления. Для большего удобства при моделировании можно группировать несколько переходов, имеющих одно переключающее событие, но разные сторожевые условия. Это позволяет избегать повторения переключающего события или общей части сторожевого условия. Разветвление существует исключительно для удобства разработчиков и не затрагивает семантику переходов.
См. более подробно о нотации разветвления в статье branch.

Нотация

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

Рис. 184. Переходы
Внутренний переход изображается внутри символа состояния, как строка перехода, которая имеет следующий формат:
имя :необязз иия-событиянеобяз ( список-параметров)необяз [ сторожевое-уславие ]необяз / список-действий необяз
имя можно использовать в выражениях в качестве ссылки на переход, особенно при создании временных отметок. За именем следует двоеточие.
имя-события служит для идентификации события. После него следует перечисление его параметров. Если у события нет параметров, то список не указывается. Ни имя события, ни список параметров не указываются при переходе по завершении, список-параметров имеет следующий формат:

имя : типсписок

сторожевое-условие является логическим выражением, написанным с использованием параметров переключающего события, а также атрибутов и связей объекта, описываемого конечным автоматом. В сторожевое условие может также входить проверка статуса параллельных состояний текущего автомата или же явно обозначенных состояний какого-либо доступного объекта (примерами будут [in Statel] и [not in State2]). Имена состояний могут быть полностью описаны при помощи вложенных состояний, в которых они содержатся. В результате образуются имена маршрутов типа Statel::State2::State3. Этот механизм можно использовать в том случае, если одно и то же имя состояния встречается в нескольких областях композитного состояния общего конечного автомата.
Список-действий представляет собой процедурное выражение, которое выполняется при запуске перехода. Его можно написать в терминах операций, атрибутов и связей объекта или параметров переключающего события. К действиям относятся вызов, отправка и т. д. В списке-действии может находиться несколько разделенных между собой операторов действий.
действиесписок
Разветвление. Переход может состоять из сегмента, содержащего переключающее событие, после которого следует дерево переходных состояний (изображенных в виде маленьких кружков)- Это равносильно целому множеству отдельных переходов, где каждый переход соответствует отдельному маршруту через это дерево, а его сторожевое условие представляет собой объединение всех условий, встречающихся на этом маршруте. Действие может находиться только на последнем сегменте любого из таких маршрутов.
Если переходное состояние представляет собой разветвление или слияние, его можно изобразить в виде ромба. Смысл от этого не изменится.

Обсуждение

Переход - это атомарное изменение состояния, возможно, сопровождаемое атомарным же действием. Прервать переход невозможно. Если у перехода есть действия, то они должны быть короткими и,
как правило, примитивными вычислениями, такими как выражения присваивания и простые арифметические вычисления.

Алфавитный указатель