SWITCH-технология

Проектирование аналогичного модуля с применением SWITCH-технологии выглядит иначе. Здесь модули не делаются самодокументирующимися. Вместо этого для каждого из них разрабатывается по четыре документа, которые в совокупности решают вопрос о понятности поведения программы:

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

Разработка программы начинается с того, что по словесному описанию поведения модуля составляется перечень его входных и выходных воздействий, отражаемый на схеме связей автомата (рис. 4). На схеме для каждого воздействия указывается его источник (приемник), полное название (на языке разработчика) и идентификатор в виде буквы латинского алфавита с номером. Для автомата идентификатор предлагается начинать с буквы ?A?, для события — с ?e?, для входной переменной — с ?x?, для переменной состояния автомата — с ?y?, а для выходного воздействия — с ?z?.

Следующим шагом построим граф переходов. В первую очередь для него необходимо определить множество состояний, соответствующих «естественным» состояниям панели. В данном случае их два: ожидание (начальное состояние) и перемещение.

После этого определяются последовательности событий, вызывающие переходы между этими состояниями, и вводятся дополнительные состояния, «разделяющие» события в каждой из последовательностей. Дополнительное состояние, возникающее на пути от состояния «ожидание» к состоянию «перемещение», назовем «готовность». Затем состояния в графе переходов нумеруются (начиная с нуля) и определяются остальные переходы между состояниями, а также необходимые петли. Hа последнем этапе в графе на основе схемы связей автомата отображаются условия переходов и действия, выполняемые в вершинах, на дугах и на петлях. Построенный таким образом граф переходов смешанного автомата приведен на рис. 5.

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

Отметим, что при использовании SWITCH-технологии вместо термина «логика программы» (предполагающего работу с флагами) предлагается применять термин «поведение программы», подразумевающий работу с состояниями.

Далее граф переходов (рис.5) формально и изоморфно реализуется по шаблону в виде функции, в данном случае на языке Си.

Применяемый шаблон позволяет обеспечить внешнюю похожесть текста программного модуля на граф переходов. Построенная функция не требует пояснений (комментариев) к своему поведению, так как при использовании SWITCH-технологии текст программы не является основным (и тем более единственным) программным документом, а поведение однозначно и математически строго задается графом переходов. Эта функция не содержит реализации входных и выходных воздействий, а включает только их вызовы.

Полученная описанным путем часть программы является системонезависимой. Когда она завершена, можно перейти к построению системозависимой части.

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

Теперь добавим в виде «заглушек» функции входных (если они имеются) и выходных воздействий (соответственно ?x? и ?z?), содержащие только вызовы функций протоколирования, и уже на ранней стадии программной реализации мы получим действующий макет разрабатываемого модуля, что соответствует принципу пошаговой нисходящей разработки [2].

Программная реализация завершается разработкой располагаемых отдельно функций входных и выходных воздействий и используемых ими вспомогательных модулей (листинг 3). Эти функции обычно могут быть отлажены независимо.

Структура полученной программы отличается от традиционной, так как в ее центре находится система взаимосвязанных автоматов (в простейшем случае, как в нашем примере, — один автомат, см. рис.6). Поскольку она регулярна, становится возможным автоматическое получение истории выполнения программы в терминах автоматов в форме протокола (листинг 4). Для этого достаточно ввести вызовы функций протоколирования в функции автоматов, а также входных и выходных воздействий.

Заключение

Если прежде программистами становились преимущественно специалисты, получившие инженерное или математическое образование с соответствующей устоявшейся культурой, то сейчас они воспитываются иначе [9], и дисциплине программирования должное внимание не уделяется.

Предлагаемая в настоящей статье технология является новой попыткой введения такой дисциплины и основана на априорном задании требуемых состояний и их визуализации. Опыт ее применения вполне подтверждает высказывание: «то, что не специфицировано формально, не может быть проверено, а то, что не может быть проверено, не может быть безошибочным» [10]. Поэтому авторы надеются (особенно учитывая мнение о работе [5], высказанное в [11]), что их подход, по крайней мере для систем логического управления и событийных систем, в части создания качественных программ является приближением к тому, что Ф.Брукс называет «серебряной пулей» [2]. Заметим, что Брукс благосклонно отзывается только о подходе Дэвида Харела [8], также основанном на применении автоматов; достоинства SWITCH-технологии по сравнению с подходом Харела показаны в [7].

Автоматный подход начинает применяться все шире. Так, например, создатель операционной системы UNIX Кен Томпсон на вопрос о текущей работе ответил: «Мы создали язык генерации машин с конечным числом состояний, так как реальный селекторный телефонный разговор — это группа взаимодействующих машин с конечным числом состояний. Этот язык применяется в Bell Labs по прямому назначению — для создания указанных машин, а вдобавок с его помощью стали разрабатывать драйверы» [12].

Предлагаемая парадигма программирования принципиально отличается от других тем, что понятие «автомат» является в ней центральным. Это соответствует месту автомата в теории управления. Кроме того, отметим, что если в традиционном программировании присутствует этап кодирования, то здесь добавляется этап, называемый кодированием состояний.

По мнению авторов, SWITCH-технология позволяет, в соответствии с принципом Оккама, «не размножать сущности без необходимости» (как происходит, например, в UML) и обладает «минимализмом» [13], необходимым для обеспечения понимания программ.

В настоящее время наблюдается возрастание интереса к парадигме автоматного программирования [14—15]. Для большей ее популяризации на сайте www.softcraft.ru создан раздел «Автоматные модели».

Литература
  1. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. М.: Бином, СПб: Невский диалект, 1998. 560 с.
  2. Брукс Ф. Мифический человеко-месяц, или Как создаются программные системы. СПб.: Символ, 2000. 304 с.
  3. Секреты программирования игр /А. Ла Мот, Д. Ратклифф, М. Семинаторе и др. СПб.: Питер, 1995. 278 с.
  4. Дейкстра Э. Взаимодействие последовательных процессов // Языки программирования. М.: Мир, 1972, с.9—86.
  5. Шалыто А.А. SWITCH-технология. Алгоритмизация и программирование задач логического управления. СПб.: Наука, 1998. 628 с.
  6. Шалыто А.А., Туккель Н.И. SWITCH-технология — автоматный подход к созданию программного обеспечения «реактивных» систем // Промышленные АСУ и контроллеры, 2000, №10, с.44—48.
  7. Шалыто А.А. Алгоритмизация и программирование для систем логического управления и «реактивных» систем // Автоматика и телемеханика, 2001, №1, c.3—39.
  8. Буч Г., Рамбо Д., Джекобсон А. Язык UML. Руководство пользователя. М.: ДМК, 2000. 432 с.
  9. Черняк Л. Создание программ как инженерная дисциплина // Computerworld Россия, 2000, №37, c.18—20.
  10. Зайцев С.С. Описание и реализация протоколов сетей ЭВМ. М.: Наука, 1989. 112 с.
  11. Герр Р. Новый поворот // PC Magazine / Russian Edition, 1998, №10, с.88—90.
  12. Кук Д., Урбан Д., Хамилтон С. Unix и не только: Интервью с Кеном Томпсоном // Открытые системы, 1999, №4, с.35—47.
  13. Герр Р. Отладка человечества // PC Magazine / Russian Edition, 2000, №5, с.90—91.
  14. Любченко В.С. Мы выбираем, нас выбирают... (к проблеме выбора алгоритмической модели) // Мир ПК, 1999, №3.
  15. Кузнецов Б.П. Психология автоматного программирования // BYTE / Россия, 2000, №11.

Об авторах

Анатолий Абрамович Шалыто — ученый секретарь ФНПЦ ГУП «НПО «Аврора»» (Санкт-Петербург), профессор кафедры «Компьютерные технологии» СПбГИТМО (ТУ). E-mail: aurora@peterlink.ru (для Шалыто).
Никита Иосифович Туккель — инженер-программист ФНПЦ ГУП «НПО «Аврора»». E-mail: cynical@mail.ru.