Думать с точки зрения государственных машин - это немного удивительно, поэтому давайте поспешно взглянем на понятия.
State machine, state, transition, event
Государственная машина - это конкретная модель, описывающая поведение системы. Он состоит из конечного количества состояний и переходов.
Простое состояние не имеет подсостояний. Он может иметь данные, поведение входа и выхода и отсроченные события. Можно обеспечить поведение входа и выхода (также называемое действиями) состояниям (или государственным машинам), которые выполняются всякий раз, когда государство введено или оставлено, независимо от того, как. Государство также может иметь внутренние переходы, которые не вызывают поведение входа или выхода. Государство может отмечать события как отсроченные. Это означает, что событие не может быть обработано, если это состояние активно, но оно должно быть сохранено. В следующий раз, когда государство, не относящееся к этому событию, будет активным, мероприятие будет обработано, как будто оно было только что выпущено.
Переход - это переключение между активными состояниями, вызванное событием. Действия и условия охраны могут быть привязаны к переходу. Действие выполняется, когда переход стреляет, охранник - это операция, выполненная первым, и которая может предотвратить переход от стрельбы, возвращая ложное.
Первоначальное состояние обозначает первое активное состояние государственной машины. Он не имеет реального существования и не имеет перехода, происходящего из него.
Submachines, orthogonal regions, pseudostates
Составное государство - это государство, содержащее регион или разложенное в двух или более регионах. Составное государство содержит свой собственный набор государств и регионов.
Подмашина является государственной машиной, вставленной как состояние в другой государственной машине. Один и тот же субмачин может быть вставлен более одного раза.
Ортогональные области являются частями составного состояния или субмахина, каждый из которых имеет свой собственный набор взаимоисключающих набор состояний и переходов.
UML также определяет ряд псевдо состояний, которые считаются важными понятиями для моделирования, но недостаточно, чтобы сделать их первоклассными гражданами. Прекращение псевдосостояния прекращает исполнение государственного аппарата (MSM обрабатывает это немного по-другому. Государственная машина не разрушается, но никакой дальнейшей обработки событий не происходит.).
Точка выхода псевдогосударства выходит из композитного состояния или подмашины и вынуждает прекратить исполнение во всех содержащихся регионах.
Входная точка псевдо-состояния позволяет контролировать вход внутри композита. Именно он соединяет переход за пределами композита к переходу внутри композита. Важным моментом является то, что этот механизм позволяет ввести только один регион. В приведенной выше диаграмме, в области 1, начальное состояние станет активным.
Есть еще два способа ввести субмашину (кроме очевидного и более распространенного случая перехода, заканчивающегося на субмашине, как показано в случае региона). Четкая запись означает, что внутреннее состояние является целью перехода. В отличие от прямого входа, предварительная инкапсуляция не производится, и выполняется только один переход. Прямой выход - это переход от внутреннего состояния к состоянию за пределами субмахина (не поддерживается MSM). Я бы не рекомендовал использовать прямой вход или выход.
Последняя возможность входа - использование вилки. Вилка - это прямой вход в один или несколько регионов. Другие регионы снова активируются, используя свое первоначальное состояние.
History
UML определяет два вида истории, неглубокую историю и глубокую историю. Шаллоу - это псевдогосударство, представляющее последнее подсостояние субмашины. Субмашина может иметь как минимум одну неглубокую историю. Переход с псевдогосударством истории в качестве цели эквивалентен переходу с последним подгосударством в качестве цели. И, что очень важно, только один переход может произойти из истории. Глубокая история - это неглубокая история, рекурсивно возвращающая подсостояния последнего подсостояния. Он представлен как неглубокая история со звездой (H* внутри круга).
История не является полностью удовлетворительным понятием. Прежде всего, может быть только одно историческое псевдогосударство, и только один переход может возникнуть из него. Таким образом, они не очень хорошо смешиваются с ортогональными областями, так как только один регион может быть “ запоминается” Глубокая история еще хуже и выглядит как дополнение в последнюю минуту. История должна быть активирована переходом, и только один переход происходит от него, так как смоделировать переход, происходящий из глубинного псевдогосударства истории, и указать на самое последнее подгосударство? В качестве бонуса он также негибкий и не принимает новые типы историй. Посмотрим правде в глаза, история звучит отлично и полезна в теории, но UML-версия не совсем делает разрез. И поэтому MSM предоставляет другую версию этой полезной концепции.
Completion transitions / anonymous
transitions
События завершения (или переходы), также называемые анонимными переходами, определяются как переходы, не имеющие определенного события, запускающего их. Это означает, что такие переходы будут немедленно стрелять, когда государство, являющееся источником анонимного перехода, становится активным, при условии, что охранник позволяет это. Они полезны в алгоритмах моделирования, как обычно делает диаграмма активности. В мире в реальном времени они имеют преимущество, что облегчает оценку того, как долго будет длиться периодически исполненное действие. Например, рассмотрим следующую диаграмму.
Теперь дизайнер знает в любое время, что ему понадобится максимум 4 перехода. Будучи в состоянии оценить, сколько времени занимает переход, он может оценить, сколько временных рамок ему потребуется (задачи в реальном времени часто выполняются через регулярные промежутки времени). Если он также может оценить длительность действий, он может даже использовать алгоритмы графов, чтобы лучше оценить его временные требования.
Internal transitions
Внутренние переходы - это переходы, выполняемые в рамках активного состояния, будучи простым состоянием или субмашиной. Можно рассматривать их как самопреходство этого состояния, без вмешательства или действия выхода.
Conflicting transitions
Если для данного события возможны несколько переходов, то они, как утверждается, находятся в конфликте. Существует два вида конфликтов:
Для данного исходного состояния определяется несколько переходов, вызванных тем же событием. Обычно состояние охраны в каждом переходе определяет, какой из них выстрел.
Исходное состояние является субмашинным или простым состоянием, и конфликт между внутренним переходом к этому состоянию и переходом, вызванным тем же событием и имеющим целью другое государство.
Первый из них прост; нужно определить только два или более строк в таблице перехода, с одним и тем же источником и триггером, с другим защитным состоянием. Имейте в виду, однако, что стандарт UML хочет, чтобы эти условия не перекрывались. Если они это делают, то в стандарте ничего не говорится, кроме того, что это неправильно, поэтому исполнитель свободен реализовать его так, как он считает нужным. В случае MSM переход, появляющийся последний в таблице перехода, выбирается первым, если он возвращает ложное (что означает отключение), библиотека пробует с предыдущим и так далее.
Во втором случае UML определяет, что наиболее внутренний переход выбирается первым, что имеет смысл, в противном случае невозможно было бы никакое состояние точки выхода (внутренний переход приводит нас к точке выхода, откуда может взяться содержащаяся в нем государственная машина).
MSM обрабатывает оба дела самостоятельно, поэтому дизайнер должен сосредоточиться только на своей государственной машине и тонкостях UML (не перекрывающихся условиях), а не на реализации этого поведения сам.
Статья Concepts раздела Meta State Machine (MSM) Chapter 2. UML Short Guide может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.