Начало. В документации Statechart используется много терминологии, характерной для государственных машин. Большая его часть равна той, что используется в спецификациях UML. Этот документ содержит только определения терминологии, не используемой стандартомUML. Краткий обзор терминологии UML можно найти здесь.
Контексты государства определяют его положение в иерархии государства.прямойконтекст состояния определяется тем, что передается как<Context>шаблонный параметр<simple_state>и<state>классовых шаблонов. Это может быть либо государственная машина (которая делает состояниесамым внешним состоянием), либо ее прямое внешнее состояние. Косвенныйконтекст государства вытекает из прямого контекста его прямого контекста и прямого контекста прямого контекста его прямого контекста и так далее. Примеры:
Апрямойконтекст — государственная машина (не видна на этом снимке). A не имеет косвенного контекста.
Впрямойконтекст А. Вкосвенныйконтекст — государственная машина (не видна на этом снимке).
Cпрямойконтекст B. Cкосвенныйконтексты B, A и машина состояния (не видны на этой картинке)
D'sПрямойконтекст - это A. D'sКосвенныйконтекст - это государственная машина (не видна на этом изображении)
Внутренне общий контекст двух состояний является первым прямым или косвенным контекстом, который имеют оба государства. Наименее распространенный предок (UML).
Внутреннее состояние — это состояние, которое само по себе не имеет внутренних состояний. Также известен как состояние листа или простое состояние (UML). Обратите внимание, что<boost::statechart::simple_state<>>являетсянемоделью простого состояния UML.
Внешнее состояние — это состояние, которое само по себе не имеет внешних состояний. Обратите внимание, что внешнее состояние отличается от верхнего состояния UML. Государственная машина может иметь произвольное число первых, но только одно из последних. Повышаю. Statechart поддерживает только внешние государства.
Библиотека FSM поддерживает полиморфные события, если события могут наследовать друг от друга без ограниченийи, если она позволяет определить реакции для листьев и узлов полученного дерева наследования событий.
Пример (используя гипотетическую библиотеку FSM, как Boost). Statechart не поддерживает полиморфные события:
Если машина состояния должна реагировать всякий раз, когда нажимаетсялюбаякнопка (включая те, которые могут быть добавлены в будущем), можно определить реакцию для<EvButtonPressed>.
Реакция состоит из всех побочных эффектов, вызванных обработкой одного события. Реакции можно классифицировать следующим образом:
Реакция государства
Отсрочка мероприятия
Переход
Прекращение, также известное как переход в конечное состояние (UML)
Заметим, что можно смешать реакцию типа 1 с одним из других типов (реакция в состоянии всегда выполняется первой), но нельзя смешать реакцию типа 2-4 с чем-либо еще, кроме типа 1.
Реакция всегда связана с одним типом состояния и одним типом события.
Состояние нестабильно с момента, когда оно было введено, до тех пор, пока не будет введено его последнеепрямоевнутреннее состояние. Состояние также нестабильно с момента непосредственно перед выходом его первогопрямоговнутреннего состояния до момента непосредственно перед выходом самого состояния.
Государственная машина нестабильна, если по крайней мере одно из ее активных состояний нестабильно. Это происходит во время следующих трех операций:
Инициация: С момента ввода первого состояния до момента ввода последнего состояния начальной конфигурации состояния
Переход: С момента непосредственно перед выходом первого состояния текущей конфигурации состояния до момента, когда было введено последнее состояние конфигурации состояния назначения.
Прекращение: С момента непосредственно перед выходом первого состояния до момента, непосредственно перед выходом последнего прекращенного состояния. Успешно выполненное увольнение (без исключения) никогда не оставляет состояния неустойчивыми. Например, рассмотрим активное состояние А с двумя ортогональными областями, в которых активны внутренние состояния В и С. Прекращение B или C не делает A неустойчивым. Не прекращается и то, и другое, так как это неизбежно приводит к прекращению
При нормальных обстоятельствах государственная машина имеет семантику Run-To-Completion, то есть она всегда стабильна до того, как машина вернется к клиенту или до того, как следующее событие будет очерчено. Таким образом, машина состояния обычно нестабильна только тогда, когда она занята обработкой события и снова становится стабильной прямо перед тем, как она закончила обработку события. Однако это не может быть гарантировано, когда действия входа, выхода или перехода терпят неудачу. О таком сбое сообщает событие, которое необходимо обработать, пока государственная машина нестабильна. Однако правила обработки исключительных событий гарантируют, что государственная машина никогда не будет нестабильной, когда она возвращается к клиенту (см.<state_machine<>::process_event()>для деталей).
Пересмотрено29 декабря 200629 December, 2006[ORIG_END] -->
Статья The Boost Statechart Library - Definitions раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.