переход состояния с другим охранным условием

Как это моделируется в шаблоне состояния?

состояние A в состояние B по триггеру X и условие C1, когда текущее состояние равно A

состояние A в состояние C по триггеру X и условие C2, когда текущее состояние равно A

как это обычно делается? У меня есть много условий защиты, которые мне, возможно, придется реализовать.


person user716129    schedule 20.04.2011    source источник


Ответы (1)


Это довольно стандартно, см., например. этот пример.

[Отредактировано на основании того, что это не домашнее задание!]

Предположим, я правильно понимаю:

  • У вас есть одно событие (X), которое может вызвать один из двух возможных переходов.
  • Выбор перехода к огню в зависимости от того, какое условие выполняется (C1 или C2)

Если да, то это стандартный случай использования защитных условий. Синтаксис будет таким:

  • X[C1] в качестве метки на переходе A->B, и
  • X[C2] на переходе A->C.

C1 и C2 должны оцениваться как логические, поэтому было бы неплохо заменить var==2 в соответствии с вашим комментарием. то есть метки станут X[var==2] и X[var==3].

Чтобы это было семантически правильным, C1 и C2 должны быть взаимоисключающими в состоянии A, иначе у вас будет недетерминизм.

чт.

person sfinnie    schedule 20.04.2011
comment
не домашнее задание. Мне интересно, есть ли у меня одна и та же переменная, которую я использую в разных условиях защиты, должен ли я сделать условие частью триггера, превратив их в разные триггеры, или можно ли смоделировать его как один и тот же триггер с таким условием, как если (var==2) условие C1 и еще одно, если var==3 является условием C2 - person user716129; 20.04.2011
comment
спасибо, что прояснили это. В связи с этим: если бы у меня было несколько триггеров A, B, которые вызывали переходы между двумя состояниями S1 и S2, возникло бы это какие-либо проблемы? Я просмотрел некоторые диаграммы состояний в Интернете и не вижу ни одной с несколькими событиями, которые приводят к переходам между двумя состояниями ... должен ли я сделать это другим вопросом? - person user716129; 26.04.2011
comment
Я бы спросил как отдельный вопрос. Не могу сразу подумать, почему это вызовет проблему, но, как вы говорите, нет (м) никаких примеров. Возможно, стоит взглянуть на спецификацию UML... - person sfinnie; 26.04.2011
comment
Охранники нужны только для: действителен запрос на изменение состояния или нет?? а не для условных вариантов, условные варианты называются выбором и делают вашу конечную машину недетерминированной. @user716129 - person ManMohan Vyas; 03.09.2015