Тезисы: При создании систем со сложным поведением целесообразно применять автоматное программирование. Однако при его использовании возникают проблемы, связанные с поддержкой автоматного кода и документации, с внесением изменений в систему, а также наглядностью и понятностью автоматного кода. Объектно-автоматное программирование основано на объектной и автоматной парадигмах программирования. Оно совмещает в себе их основные преимущества: гибкость, расширяемость и наличие мощного механизма описания сложного поведения, основанного на конечных автоматах, – что позволяет решить описанные выше проблемы.
Однако в существующих объектно-автоматных подходах не всегда удается удобно выделять условия переходов и писать код, который наглядно отражает переходы между состояниями, так как логика переходов обычно скрывается в методах-обработчиках входных воздействий. Для устранения недостатков объектно-автоматного подхода, а также сохранения всех его достоинств, рассматривается применение динамических языков программирования для построения автоматных программ. В данной работе описаны два подхода, использующие объектно-ориентированные и динамические свойства языка Ruby.
Показано, что достоинством использования объектно-ориентированных свойств языка Ruby является то, что каждое состояние и автомат представлены отдельным классом. Это позволяет сохранить иерархию автомата при переносе его в объектно-ориентированный код. Однако этот подход обладает таким недостатком, как синтаксическая избыточность, что иногда может затруднять модификацию и расширение кода.
При помощи динамических свойств языка Ruby может быть разработан предметно-ориентированный язык (DSL), который позволяет изоморфно переносить диаграммы состояния в программный код, и решает проблемы предыдущего подхода. Однако недостатком динамического подхода является потеря иерархии родительского автомата при наследовании, так как состояние и автомат не представлены отдельными классами.