54
В  большинстве  случаев  в  системе  целесообразно  использовать  либо  только 
вложенные  автоматы,  либо  только  вызываемые  –  это  делает  логику  системы  более 
понятной.  Формально  говоря,  эти  механизмы  взаимозаменяемы:  каждый  из  них 
можно  эмулировать  с  помощью  другого.  При  этом  отметим,  что  для  эмуляции 
сохранения  состояния  между  обращениями  к  вложенному  автомату  может 
потребоваться  ввести  дополнительную  переменную  в  объект  управления. 
Практически же, обычно несложно определить, какой из механизмов более удобен в 
данной  задаче  при  выбранном  критерии  автоматной  декомпозиции  (ниже  будет 
приведен  пример  влияния  критерия  декомпозиции  на  выбор  того  или  иного  вида 
отношений между автоматами). 
С другой стороны, при использовании обоих видов отношений совместно возникают 
семантические  неопределенности.  Например,  если  автомат  A
3
  вложен  в  автомат  A
2
, 
который  вызывается  из  автомата  A
1
,  должен  ли  A
3
  сохранять  свое  состояние  между 
вызовами  A
2
?  На  подобные  вопросы  автоматное  программирование  универсальных 
ответов  не  дает.  Поэтому  разработчикам,  которые  решаются  использовать 
механизмы  вложенности и  вызываемости  в одной системе,  необходимо оговаривать 
семантику их сочетания. 
К  вложенным  и  вызываемым  автоматам  можно  обращаться  везде,  где  разрешено 
формировать  выходные  воздействия:  в  состояниях  и  на  переходах.  На  практике  к 
вложенным автоматам чаще всего обращаются в состояниях. 
Если в некоторое состояние вложен автомат и по совершении им шага объемлющий 
автомат  остается  в  том  же  состоянии  (переходит  по  петле),  снова  происходит 
обращение  к  этому  же  вложенному  автомату.  Таким  образом,  в  этом  случае 
вложенный автомат работает почти так же, как если бы он был вызываемым, за тем 
исключением,  что  вызываемый  автомат  заканчивает  работу  только  по  собственной 
инициативе,  а  вложенный  –  как  только  после  очередного  шага  выполнится  условие 
перехода  объемлющего  автомата  в  другое  состояние.  Несколько  автоматов, 
вложенных  в  одно  состояние,  работают  псевдопараллельно  (совершают  шаги  по 
очереди). 
Автоматы  в  системе  могут  обмениваться  информацией  посредством  передачи 
события  как  аргумента  при  вызове  автомата  и  через  общий  объект  управления. 
Последний механизм подобен взаимодействию потоков в параллельной архитектуре 
с  общей  памятью  или  обмену  информацией  между  подпрограммами  через 
глобальные  переменные.  Этот  механизм  очень  мощный,  он  мог  бы  быть 
единственным  способом  взаимодействия  автоматов.  Однако  он  имеет  те  же 
серьезные недостатки, что и глобальные переменные: отсутствие явного интерфейса 
межмодульного  взаимодействия  и,  как  следствие,  чрезмерная  зависимость  между 
модулями  и  неспособность  системы  эволюционировать.  Кроме  того,  в 
рассматриваемом  случае  имеется  еще  и  специфический  «автоматный»  недостаток. 
Информация,  которой  обмениваются  автоматы,  имеет  управляющую,  логическую 
природу.  В  соответствии  с  принципами  автоматного  программирования  такую 
информацию  не  следует  смешивать  с  вычислительным  состоянием  объекта