152
Особое внимание это сообщество уделяет междисциплинарным исследованиям и
подходам, особенно тем, которые появились в дисциплинах, не связанных с
информационными технологиями, задолго до появления компьютеров. Исследования
в этом направлении привели к выводу, что при разработке ПО может быть полезен
опыт создания систем автоматического управления и теоретические основы
кибернетики. В результате родилось целое направление в разработке ПО, названное
программной кибернетикой [126]. К этому направлению можно отнести и автоматное
программирование.
Таким образом, как может убедиться читатель, автоматное программирование,
обсуждаемое в этой книге, является ответом на многие наиболее острые и
актуальные проблемы индустрии разработки ПО. В рамках этой парадигмы
программирования впервые в явном виде формулируется проблема спецификации и
реализации сложного поведения, предлагается использовать традиционные методы
программирования совместно с идеями теории автоматов и теории автоматического
управления. Корректность автоматных программ закладывается еще на этапе
проектирования, благодаря наглядной графической нотации для описания сложного
поведения. Кроме того, соответствие автоматной программы ее спецификации может
быть проверено формально: использование метода Model Checking в этом случае
требует от разработчика значительно меньших усилий, чем для программ,
написанных без явного выделения состояний, так как модель программы с конечным
числом состояний строится уже на этапе проектирования. Здесь имеет место та же
ситуация, что и, например, при контроле схем: если схема не спроектирована с
самого начала как контролепригодная, то ее и не удается проверить [127].
В последние годы все больше программистов-практиков по всему миру приходят к
выводу, что в тех задачах, которыми они занимаются, целесообразно использовать
конечные автоматы. Например, в 2007 году были опубликованы статьи ведущего
разработчика компании IBM Э. Принга о реализации всплывающих подсказок с
применением автоматов [128, 129]. Парадигма же автоматного программирования
призывает использовать автоматные модели при наличии сущностей со сложным
поведением всегда, а не только при решении некоторых специфичных задач. Авторы
предполагают, что им удалось объяснить, чем отличается парадигма автоматного
программирования от программирования с использованием автоматов, которое
известно начиная с 60-х годов прошлого века [130].
Автоматное программирование все шире используется на практике, особенно при
создании программного обеспечения для ответственных систем [131, 132], и
обеспечивает значительное сокращение затрат на их сопровождение. Его применение
при разработке систем управления судовыми техническими средствами во ФГУП
«НПО «Аврора» описано в работе [4]. В последнее время автоматное
программирование начало использоваться в нетрадиционных областях, таких как,
например, программирование смарт-карт [133].
Идеи автоматного программирования, изложенные в книге, могут в том или ином
виде использоваться не только для текстовых и визуальных языков
программирования, как описано выше, но и для программируемых логических
контроллеров [131, 132], а также различных средств автоматизации [9] и
имитационного моделирования [18, 134, 135].