exponenta event banner

Устранение избыточности кода путем комбинирования действий состояния

Можно комбинировать entry, during, и exit действия, выполняющие те же задачи в состоянии.

Комбинируя действия состояния, выполняющие одни и те же задачи, вы устраняете избыточный код. Например:

Отдельные действияЭквивалентные комбинированные действия

entry:
  y = 0;
  y=y+1;
during: y=y+1;

entry: y = 0;
entry, during: y=y+1;

en: 
  fcn1();
  fcn2();
du: fcn1();
ex: fcn1();

en, du, ex: fcn1();
en: fcn2();

Объединение действий состояния таким образом приводит к тому же поведению выполнения диаграммы (семантике) и создает тот же код, что и эквивалентные отдельные действия.

Объединение действий состояния

Объединение набора entry, duringи/или exit действия, выполняющие ту же задачу, что и список, разделенный запятыми, в состоянии. Ниже приведен синтаксис:

entry, during, exit: task1; task2;...taskN;

Можно также использовать эквивалентные сокращения:

en, du, ex: task1; task2;...taskN;

Допустимые комбинации

Можно использовать любую комбинацию этих трех действий. Например, допустимы следующие комбинации:

  • en, du:

  • en, ex:

  • du, ex:

  • en, du, ex:

В списке, разделенном запятыми, можно комбинировать действия в любом порядке. Например, en, du: дает тот же результат, что и du, en:.

Недопустимые комбинации

Невозможно объединить два или более действий одного типа. Например, следующие комбинации недопустимы:

  • en, en:

  • ex, en, ex:

  • du, du, ex:

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

Порядок выполнения комбинированных действий

Состояния выполняют комбинированные действия в том же порядке, что и отдельные действия:

  1. Entry действия сначала, сверху вниз в порядке их появления в состоянии

  2. During действия вторые, сверху вниз

  3. Exit действия последние, сверху вниз

Порядок объединения действий не влияет на поведение выполнения состояния. Например:

Это состояние...Выполняет действия в таком порядке...

  1. en: y = 0;

  2. en: y=y+1;

  3. du: y=y+1;

  1. en: y=y+1;

  2. en: y = 0;

  3. du: y=y+1;

  1. en: y=y+1;

  2. en: y = 0;

  3. du: y=y+1;

  1. en: y=y+1;

  2. en: y = 10;

  3. du: y=y+1;

  4. ex: y = 10;

Правила объединения действий состояния

  • Не объединяйте несколько действий одного типа.

  • Не создавайте данные, события или сообщения, имена которых совпадают с ключевыми словами действия: entry, en, during, du, exit, ex.

Связанные темы