double arrow

Спецификация структуры

Как уже упоминалось и было продемонстрировано на нескольких примерах, одним из главных достоинств автоматного программирования является представление

логики поведения системы в наиболее понятном и наглядном виде – с использованием графической нотации графов (или диаграмм) переходов. Однако не только логика поведения требует наглядного преставления. Спецификация структуры системы является, наряду со спецификацией поведения, одним из двух основных результатов процесса проектирования и также требует подходящей нотации.

В примерах, приводимых до сих пор, структура системы (объекты управления, автоматы и связи между ними) описывалась словесно. Как могли убедиться читатели, такое описание громоздко и не обладает свойством наглядности. В программировании с явным выделением состояний для описания структуры системы используется графическая нотация схем связей автоматов.

Схема связей строится отдельно для каждого автомата системы. На ней в виде прямоугольника изображается сам автомат (рис. 2.20). Слева от него изображаются источники информации (в событийных системах их также называют поставщиками событий) – сущности из системы или внешней среды, которые формируют входные воздействия автомата. Для каждого события, входной переменной или предиката с номером состояния между автоматом и источником информации проводится линия, помеченная идентификатором и словесным описанием этого события (переменной, предиката). Таким образом, схема связей служит, в частности, для расшифровки сокращенных идентификаторов событий и переменных, используемых на диаграмме переходов.

Справа от автомата изображаются его объекты управления и подчиненные (вложенные или вызываемые) автоматы. Для каждой выходной переменной между автоматом и соответствующим объектом управления проводится линия, помеченная идентификатором и описанием переменной. Если вызываемому автомату передается одно или несколько событий, то для каждого из этих событий также проводится линия с пометками. Если объекты управления являются также и источниками информации – формируют часть входных переменных автомата – то они изображаются справа, а линии, соответствующие входным переменным изображаются в виде обратных связей.

 
 


Программная реализация часов с будильником на языке С

const int h = 1;

const int m = 2;

const int a = 3;

int e; // Текущее событие

int y; // Текущее управляющее состояние

// Реализация объекта управления

int hrs;

int mins;

int alarmHrs;

int alarmMins;

void z1() {

hrs = (hrs + 1) % 24;

}

void z2() {

mins = (mins + 1) % 60;

}

void z3() {

alarmHrs = (alarmHrs + 1) % 24;

}

void z4() {

alarmMins = (alarmMins + 1) % 60;

}

// Реализация управляющего автомата

void A1 () {

switch (y) {

case 1: // Будильник выключен

if (e == h) { z1(); }

else if (e == m) { z2(); }

else if (e == a) { y = 2; }

break;

case 2: // Установка времени будильника

if (e == h) { z3(); }

else if (e == m) { z4(); }

else if (e == a) { y = 3; }

break;

case 3: // Будильник включен

if (e == h) { z1(); }

else if (e == m) { z2(); }

else if (e == a) { y = 1; }

break;

}

}


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



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