На этом шаге рассмотрим ортогональные подсостояния на диаграмме состояний в UML.
Неортогональные подсостояния – это наиболее общий случай использования вложенных автоматов, с которым приходится сталкиваться на практике. Однако в некоторых ситуациях моделирования может понадобиться специфицирование ортогональных областей. Они позволяют описать несколько автоматов, работающих параллельно в контексте включающего объекта.
В примере на рис. 1 показано расширение состояния Maintenance (Обслуживание) из рис. 1 шага 177.
Рис.1. Параллельные подсостояния
Оно декомпозируется на две ортогональные области – Testing (Тестирование) и Commanding (Обработка команд), показанные в виде вложений в Maintenance, но разделенные пунктирной линией. Каждая из этих ортогональных областей, в свою очередь, разбита на подсостояния. Когда управление передается из состояния Idle (Простой) в Maintenance, то общий поток разделяется на два параллельных – включающий объект будет одновременно пребывать в областях Testing и Maintenance. Более того, объект, находящийся в области Commanding, также пребывает и в состоянии Waiting (Ожидание) или Command (Команда).
Неортогональные подсостояния отличаются от ортогональных по следующему признаку. Имея несколько неортогональных подсостояний на одном и том же уровне, объект может пребывать либо в одном из них, либо в другом. Имея же несколько ортогональных областей на одном и том же уровне, он будет одновременно пребывать в состоянии каждой из них.
Прохождение по каждой из этих двух ортогональных областей осуществляется параллельно. В итоге каждый вложенный автомат достигает своего конечного состояния. Если одна ортогональная область переходит в конечное состояние раньше другой, управление в ней ожидает, пока другая область не достигнет своего конечного состояния. Когда же обе области оказываются в своих конечных состояниях, управление из них сливается обратно в общий поток.
Когда имеется переход в составное состояние, разбитое на ортогональные области, управление всегда разделяется на столько же параллельных потоков, сколько существует таких областей. Аналогично, при наличии перехода из составного состояния, разбитого на ортогональные области, параллельные потоки управления сливаются воедино. Это верно во всех случаях. Если все ортогональные области достигают своего конечного состояния или же присутствует явный переход из включающего составного состояния, управление сливается в один поток.
Каждая ортогональная область может иметь начальное, конечное и историческое состояние.
На следующем шаге рассмотрим разделение и соединение переходов между состояниями объекта.