Со switch-технологией наверняка знаком? А что ему делать -- там
автомат следит за своими входами и, что более важно, может
изменение переменной состояния другого автомата воспринимать как
свой входной сигнал. Последнее принципиально важно, т.к. является
одним из способов коммуникации автоматов между собой (второй способ
работает только на передачу информации -- прямой вызов функции
автомата с передачей номера входного сигнала). И если у нас есть
множество параллельных автоматов и многие из них следят за состоянием других автоматов, то у нас уже проблема. Инвертировать логику, чтоб тот другой, за состоянием которого следят, вызвал того, кто следит -- часто невозможно, ибо рушится архитектура. В архитектурном плане (ещё один способ взглянуть на ПО в другой плоскости) всегда есть компоненты имеющие зависимости, которые знают о существовании других компонентов и их используют, и компоненты которые кем-то используются и которые не должны иметь представления о использующих их компонентах, иначе это создасть ненужную (и хуже того циклическую) зависимость. И желательно, чтоб такие зависимости распространялись строго в одном направлении, сверху вниз например. Драйвер мыши в компьютере, например, ничего не должен знать об оконной системе. А наоборот -- знание есть, что есть некий pointer device. И уж тем более драйверу не следует знать, что нажатие кнопки мыши прилетит сейчас в окно браузера, а не ворда. И с автоматами так же.