Искусство программирования лифта. Объектно-ориентированное программирование с явным выделением состояний



Статья опубликована в журнале «Информационно-управляющие системы». 2003. №6, с. 38—49.

© 2004 Л.А.Наумов, А.А.Шалыто

Статья в формате PDF
Демонстрационная программа Lift
Исходные тексты демонстрационной программы Lift
Исходные тесты ядра программы, перенесённого на микроконтроллер

Уже около сорока лет, одним из примеров, на котором Д. Кнут обучает «Искусству программирования», является задача управления лифтом. Он на основании невнятного технического задания, используя только словесное описание алгоритмов, на многих страницах книги приводит в окончательной форме программу на языке низкого уровня, откомментированную не более внятно, чем было сформулировано задание.

В предисловии к третьему изданию «Искусства программирования» приводятся слова Б. Гейтса: «За последние двадцать лет мир изменился». Настоящая работа призвана показать справедливость этого высказывания на примере задачи управления лифтом.

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

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

Настоящая работа призвана продемонстрировать преимущества подхода, названного «автоматное программирование с явным выделением состояний», на примере задачи управления лифтом. Кроме того, приводится методика преобразования объектной программы, написанной в рамках предлагаемого подхода, в процедурную программу для последующего выполнения ее на микроконтроллере.

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

Авторы надеются, что, ознакомившись с объектно-ориентированным программированием с явным выделением состояний, читатели согласятся со словами Б. Гейтса, что «за последние двадцать лет мир изменился», по крайней мере, в области искусства программирования лифта.