69
описывается путем перечисления идентификаторов выходных переменных,
вложенных или вызываемых автоматов.
Дуга графа переходов помечается условием перехода и выходным воздействием на
переходе. Условие перехода имеет вид произвольной булевой формулы над
входными переменными, событиями и (в случае взаимодействия путем обмена
номерами состояний) предикатами от номеров состояний других автоматов.
Громоздкими булевыми формулами бывает неудобно помечать переходы. В таком
случае формулу можно заменить сокращенным идентификатором, а его расшифровку
дать рядом с графом переходов. Условие перехода отделяется от выходного
воздействия горизонтальной чертой. В целях повышения наглядности графов
переходов необходимо по возможности выполнять их плоскую укладку.
На диаграммах переходов к переменным, событиям и автоматам системы принято
обращаться через их краткие символические идентификаторы. Причина
использования этого соглашения в том, что на больших диаграммах длинные,
мнемонические имена либо вообще не помещаются, либо «засоряют» граф, мешая
формированию у разработчика целостной картины поведения системы. Как уже
упоминалось, расшифровка идентификаторов производится на схеме связей.
Автоматизированное средство проектирования может избавить разработчика от
необходимости обращаться к схеме связей, например, показывая словесное описание
символа при наведении на него курсора мыши.
Обычно для автоматов используются идентификаторы вида A
i
, для событий – e
i
, для
входных переменных – x
i
, для состояний автоматов – y
i
, для выходных переменных –
z
i
, для сокращенных условий переходов – С
i
(где i – натуральное число). Можно
использовать и любые другие идентификаторы, лишь бы они были короткими: из
одной или двух букв. Так в примере с эмулятором часов события, соответствующие
нажатиям кнопок, назывались буквами «H», «M» и «A». Обозначить их так было
логично, так как по условию задачи теми же буквами назывались кнопки часов.
Одна из тех возможностей обсуждаемой нотации, которые не были до сих пор
использованы ни в одном примере – это группировка состояний. Если несколько
состояний автомата имеют одинаковые исходящие переходы (с одним и тем же
условием, выходным воздействием и целевой вершиной), то такие состояния можно
объединить в группу и заменить несколько одинаковых переходов одним –
групповым. Группировку применяют в тех случаях, когда некоторый набор
состояний логически объединен общим поведением, однако выделять эти состояния
в отдельный автомат нецелесообразно. Графически группа состояний обозначается
рамкой.
Другая неиспользованная возможность нотации – переходы с приоритетами. Она
позволяет задать приоритеты на дугах, исходящих из некоторого состояния.
Приоритеты определяют порядок, в котором проверяется возможность перехода по
каждой из этих дуг (первым будет проверяться условие на дуге с высшим
приоритетом, последним – на дуге с низшим приоритетом). Назначение приоритетов
– один из способов борьбы с неоднозначностью (противоречивостью) в описании