Основы автоматного программирования

Суть автоматного программирования состоит в том, что управляющая программа строится и функционирует как конечный автомат, который может находиться в каждый момент времени только в одном из N состояний. При этом в каждом цикле для текущего состояния (иначе, ШАГА программы) вычисляются логические условия, позволяющие изменить состояние программы.

Теоретиками автоматного программирования предложена следующая концепция идеальной программной реализации:

- вся логика программы строится на основе селектора (switch в языке Си);

- вспомогательно используется оператор условия if;

- обязательно наличие цикла, охватывающего код собственно реализации автомата.

Представим универсальный автоматный алгоритм в общем виде (рис. 1).

Рис. 1

Рамка имитирует цикловую природу реализации автомата. Вверху явно указан оператор “while(cycle)”, где “cycle” – признак продолжения цикла, который перед передачей управления оператору while должен быть установлен в ненулевое значение.

Автоматная программа имеет несколько состояний Y. Обязательно наличие начального состояния Y=0.

Переходы между состояниями обозначаются стрелками и помечаются дробью: входное событие Х / выходное событие Z (действие на соответствующем переходе).

Пусть мы находимся в состоянии Y=i. Тогда при наступлении входного события Хij, за которым скрыто соответствующее логическое выражение, выполняется некоторая последовательность операторов Zij, подготавливающая функционирование автоматной программы в новом состоянии, и осуществляется переход в новое состояние (Y=j).

Разумеется, не обязательно должен быть возможен переход из любой вершины в любую. При его невозможности соответствующий Х равен нулю, и дуга отсутствует.

Входному событию взаимно однозначно соответствует переход из текущего состояния в другое. Если ни одно из вычисляемых в данном состоянии событий не наступило, то сохраняется текущее состояние, и этому соответствует логическое условие, отрицающее любое из входных событий – условий переходов в другие состояния (см. “петли” – дуги, исходящие и заходящие в одну и ту же вершину).

Отдельно, через запятую, указаны операторы вида “cycle = 0”, что означает конец циклической обработки. При этом направление перехода всегда к начальной вершине, она же является и заключительной для обеспечения корректного повторного использования данной подпрограммы.

Приведем структуру программы на языке Си, реализующей представленный на рис. 1 алгоритм.

int X01,..., ХN(N-1), Z01,..., ZN(N-1), Y=0, cycle=1;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: