конечный автомат с самостоятельным переходом, но различными действиями при входе - PullRequest
1 голос
/ 30 апреля 2011

У меня есть конечный автомат, где

S1 ---> inp X, условие защиты = Y ----> S1 (сам переход к S1 после выполнения, action1 ()

S1 ---> inp X, сторожевое условие =! Y ----> S1 (самопереход S1 после выполнения, action2 ()

Таким образом, единственное различие между двумя входами состоит в том, что он выполняетдругое действие,

Я чувствую, что здесь что-то не так, я должен делать что-то другое?

1 Ответ

1 голос
/ 30 апреля 2011

Вы не можете иметь два альтернативных действия входа в одном и том же состоянии. Суть в том, что штат не зависит от маршрута, который вы там прошли. У вас есть два варианта:

  1. Поместите действия на переходы. UML позволяет переходу иметь 3 части:
    • запускающее событие
    • состояние охраны
    • действие, выполненное, если событие происходит, и охранник истинен. Действие завершено до перехода в целевое состояние.
  2. Создайте еще 2 состояния, по одному для каждого из action1() & action2(). Состояние S1 будет иметь два выходных перехода, по одному в каждое из новых состояний. Переход 1 будет помечен X[Y] и приведет к состоянию, содержащему action1(). Аналогично для action2(). Каждое новое состояние будет иметь переход обратно к S1, который был выполнен, как только действие было завершено.

То, что вы выбираете, во многом стилистическое, если диаграмма концептуальная. Если вы переводите непосредственно в код, вам нужно учитывать семантику. Вариант (1) является более кратким визуально, однако это означает, что переход не будет «мгновенным». Для некоторых сред - особенно в реальном времени / встроенных - это может быть значительным.

НТН.

...