Парадигма автоматного программирования. Автоматное программирование, иначе называемое «программирование от состояний», или «программирование с явным выделением состояний», — это метод разработки программного обеспечения (ПО), основанный на расширенной модели конечных автоматов и ориентированный на создание широкого класса приложений. Вопреки распространенному мнению, здесь речь идет не только и не столько об использовании конечных автоматов в программировании, сколько о методе создания программ в целом, поведение которых описывается автоматами.
Программирование с использованием автоматов имеет достаточно богатую историю развития. Различные аспекты и понятия, связанные с этой идеей, рассматривались в работах многих авторов с самых разных точек зрения и применительно к различным конкретным вопросам. Программирование от состояний рассматривается как один из основных стилей программирования Как целостная парадигма разработки ПО автоматное программирование сформировалось в основном благодаря усилиям одного из авторов этой книги, который в 1991 г. предложил технологию для поддержки этого стиля программирования. В его работах можно найти обсуждение различных аспектов этого метода программирования, а краткое описание предлагаемой парадигмы программирования содержится, например, в работе Однако полное и исчерпывающее изложение сути автоматного программирования как парадигмы и метода разработки программных систем в целом в настоящий момент отсутствует. Эта книга может считаться первым шагом к восполнению этого пробела. Термин «автоматное программирование» родился в 1997 г. в ходе беседы одного из авторов этой книги с Д. А. Поспеловым на конференции по мультиагентным системам, проходившей в поселке Ольгино под Санкт-Петербургом, и был впервые использован во введении к работе На английский язык этот термин переводится как automata-based programming. Цель книги состоит в определении терминов, образующих словарь парадигмы автоматного программирования, и систематическом изложении ее основных концепций. Книга содержит ряд примеров конкретного применения автоматного программирования для решения разнообразных прикладных задач. Примеры призваны продемонстрировать действенность, плодотворность и перспективность данной парадигмы. В первой главе излагаются основные идеи и понятия, вводятся специфические обозначения, описываются математические основы автоматного программирования. Знакомство с материалом первой главы необходимо для эффективного освоения остального материала. Во второй главе представлен традиционный взгляд на автоматный подход к разработке программного обеспечения. Изложение охватывает все аспекты создания программной системы: проектирование, спецификацию и реализацию. Значительная часть второй главы посвящена задачам логического управления. Опыт решения этих задач послужил отправной точкой развития автоматного подхода и его распространения в других областях программирования. Эта глава намеренно названа «Процедурное программирование с явным выделением состояний»: обычно слово «процедурное» в этом словосочетании опускают, поскольку процедурный подход исторически является для автоматного программирования традиционным. Такое название призвано подчеркнуть смысловое отличие от третьей главы, названной «Объектно-ориентированное программирование с явным выделением состояний». В третьей главе устанавливается связь между объектной и автоматной парадигмами. Материал этой главы призван показать, что автоматное программирование — это естественное, а не принудительное развитие объектно-ориентированного подхода. Центральная концепция автоматного программирования — автоматизированный объект управления — является по своей природе глубоко объектно-ориентированной. Четвертая глава представляет собой краткий обзор нетрадиционных областей применения и актуальных проблем автоматного программирования. Здесь рассматривается использование автоматов для решения классических задач дискретной математики, вопросы верификации и параллелизма в автоматных программах, а также методы совместного применения генетического и автоматного программирования.