Один переход с несколькими событиями на диаграмме состояний UML

В школе мы учим, что синтаксис перехода поведенческой диаграммы состояний имеет следующий вид:

список событий [состояние охраны] / список действий

Но я не смог найти в Интернете ни одного примера, где используется переход с несколькими событиями. Это действительно возможно? Если да, то как ведет себя? Означает ли это, что транзакция реализуется, когда происходит одно из этих событий (и, конечно же, выполняется условие)?


person MacakM    schedule 30.10.2016    source источник


Ответы (2)


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

Вот что говорит спецификация 2.5:

14.2.3.9.2 Включенные переходы

Переход разрешен тогда и только тогда, когда:

  • [ . . . ]

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

Эти переходы, объединенные логическим ИЛИ, указываются текстуально в виде списка, разделенного запятыми, в переходе, как указано в §14.2.4.9:

[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
person Jim L.    schedule 30.10.2016
comment
Блин, почему ты всегда находишь вишенки ;-) - person qwerty_so; 31.10.2016
comment
Спасибо за ваш ответ :) - person MacakM; 31.10.2016

К сожалению, спецификация UML не конкретна в этом отношении (я думал, но у Джима есть правильный ответ). Так или иначе:

14.2.4.9 Переход

Текстовое обозначение по умолчанию для Перехода определяется следующим выражением BNF:

[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]

Где стандартная нотация для триггеров (см. подпункт 13.3.4), логическое выражение для защиты, а необязательное выражение, определяющее поведение эффекта, написанное на каком-либо специфичном для поставщика или стандартном текстовом поверхностном языке (см. подпункт 16.1). ). Триггер может быть любым из стандартных типов триггера. Триггеры SignalEvent и триггеры CallEvent неразличимы по синтаксису и должны различаться по их объявлению в другом месте.

В спецификациях есть и другие места, где этот абзац отображается аналогичным образом, но без объяснения того, как будут обрабатываться несколько триггеров. Я предполагаю, что это OR-условие. Но это только предположение. Увы, раз вы не видели примеров (я тоже), то это, вероятно, неизвестный факт. Только не используйте его - это действительно возможно ;-) И если вам случится найти пример, просто спросите у автора, что он имел в виду. UML — это общение друг с другом.

person qwerty_so    schedule 30.10.2016
comment
Спасибо за подробный ответ :) - person MacakM; 30.10.2016
comment
Для нескольких триггеров, вот где PSSM (точная семантика для конечных автоматов) является вашим другом, хотя это еще не формальная спецификация: переход может владеть набором триггеров, каждый из которых указывает событие, возникновение которого при отправке может вызвать прохождение Перехода. - person CharlesRivet; 02.11.2016
comment
Я рад узнать, что другие люди знают о PSSM! - person Jim L.; 08.11.2016