# Automata-based programming (Shalyto's approach)

Automata-based programming is a programming technology. Its defining characteristic is the use of finite-state machines to describe program behavior. The transition graphs of state machines are used in all stages of software development (specification, implementation, debugging and documentation). Automata-based programming technology was introduced by Anatoly Shalyto in 1991. Switch-technology was developed to support automata-based programming. Automata-based programming is considered to be rather general purpose program development methodology than just another one finite-state machine implementation.

## Automata-based programming

The main idea of suggested approach is to construct computer programs the same way the automation of technological processes (and other kinds of processes too) is done.
For all that on the basis of data domain analysis the sources of input events, the control system (the system of interacting finite-state machines) and the control objects implementing output actions are singled out. These control objects can also form yet another type of input actions that are transmitted through a feedback from control objects back to the finite-state machines.

## Main features

In recent years great attention has been paid to the development of the technology of programming for embedded systems and real-time systems. These systems have special requirements for the quality of software. One of the best known approaches for this field of tasks is synchronous programming.
Simultaneously with the advance of synchronous programming in Europe, an approach to software development for crucial systems called automata-based programming or state-based programming was being created in Russia.
The term event is being used more and more widely in programming; recently it has become one of the most commonly used terms in software development. As opposed to it, the offered approach is based on the term state (State-Driven Architecture). After introduction of the term input action, which could denote an input variable or an event, the term automaton without outputs might be brought in. After adding the term output action, the term “automaton” might be used. It is the finite deterministic automaton.
That is why, the sort of programming, which is based on this term, was called “automata-based programming”. So the process of software creation could be named “automata software design”.
The feature of this approach is that automata used for development are defined with the help of transition graphs. In order to distinguish the nodes of these graphs the term state coding has been introduced. With multivalued state coding a single variable can be used to distinguish states of automaton, the number of states is equal to the number of values this variable can take on. This allowed introducing of the term program observability (that is, the value of the state variable can be checked).
Using the concept of “state” in contrast to the concepts of “events” and “variables”, allows one to understand and to specify the task and its parts (subtasks) more clearly.
Using automata-based programming implies debugging by drawing up the protocols (logging) in terms of automata.
For this approach there is a formal and isomorphic method of transforming from the transition graph to the software source code. So when using high-level programming languages, the simplest way is to use a construct which is similar to the switch construct of the C programming language. That is why the first implementation of automata-based programming was called “Switch-Technology”. Additional information about automata-based programming can be found in the “Switch-technology” article.
Nowadays automata-based programming has been developed in several ways, for different types of task to be solved and for various type of computing devices.
Russian registration certificate was issued for the Automata-based programming core and for the Automata-based programming plug-in for Eclipse IDE.

## Logical control

In 1996 Russian Foundation for Basic Research in the context of publishing project #96-01-14066 had supported publishing of a book, in which the offered technology was described in application to the logical control systems.
In such systems there are no events, but input and output actions are binary variables and operating system is working in the scanning mode. Systems of this class are usually to be implemented on programmable logic controllers, which have relatively small amount of memory and programming is to be performed using specialized languages (for example, the language of ladder schemes or functional blocks). Methods of formal source code generation for such languages were developed for the cases in which the specification of the project being developed is represented by a system of transition graphs of interacting automata.

## State-based programming

Henceforth automata approach was spread to the event-based (reactive) systems. In such systems all of the limitations mentioned above are taken away. It is obvious from the name of these systems that events are used among the input actions. Output actions could be represented by arbitrary functions. Any real-time operating system could be used as an environment.
The automata implementation of event-based systems was made with the help of the procedural approach to software development, hence the name “state-based programming”.
When using this method, output actions are assigned to the arcs, loops or nodes of the transition graphs (in general case mixed Moore-Mealy automata are to be used). This allows representing in a compact form the sequences of actions, which are the reactions to the corresponding input actions.
One of the features of such approach to programming for the reactive systems is that the centralization of program logic is achieved by liquidation of logic in the event handlers and forming of system of interacting automata, which are called from these handlers. Automata in such system can interact by nesting, by ability to call each other and with the help of state numbers interchange.
Another important feature of this approach is that automata in it are used thrice: for specification, for implementation (they remain in the source code) and for drawing up the protocol, which is performed, as said above, in terms of automata. The latter allows to verify the propriety of automata system functioning. Logging is performed automatically on the base of created program; it can be used for debugging of programs with complicated behavior.
Also this approach allows effective documenting of the decisions made during design process, especially those related to formalization of program behavior.
All this allowed to start the Foundation for Open Project Documentation, in the context of which many projects on perfecting of automata-based programming are being developed.

## State-based object-oriented programming

The composite approach, based on both object-oriented and automata-based programming paradigms, may be rather useful for solving tasks from a very large spectrum. This approach was called “state-based object-oriented programming”.
The main feature of this approach is that, like in Turing machines, controlling (automata) states are explicitly singled out. The number of these states is noticeably fewer than amount of all other objects' states (for example, run-time states).
The term “states space” was introduced in programming. This term means the set of object's controlling states. So this approach provides more understandable behavior in comparison with the case when such space is not singled out explicitly.
The minimal set of documents, which visually and clearly describe structural (static) and behavioral (dynamic) sides of a software project, is described.
From the experience of adaptation of suggested approach one can conclude that application of automata makes programs' behavior clearer as using objects makes programs' structure clearer. Existence of high quality project documentation makes further program refactoring (changing of its structure while retaining its functionality) much easier.

## Computational algorithms

Automata approach can be used for computational algorithms implementation. It was shown that arbitrary iterative algorithm can be implemented with the help of construction, that is equivalent to the loop operator do ... while, inside which there is single switch operator that implements automaton.
Automata-based approach is very effective for implementation of some algorithms of discrete mathematics, for example, tree parsing algorithm.
A new state-based approach to creation of algorithms' visualizers was offered. Such visualization software is widely used in the Computer Technologies department of Saint Petersburg State University of Information Technologies, Mechanics and Optics for students teaching in programming and discrete mathematics. This approach allows representing of visualizer's logic as a system of interacting finite-state machines. This system consists of pairs of automata; each of this pairs contains “forward” and “backward” automata, which provides step-by-step forwards and backwards execution of algorithms respectively.

## Instrumentation

Various software tools are developed to support automata programming. One of these tools is UniMod. This tool is based on the following concepts: UML, Switch-technology, Eclipse IDE, Java programming language, open source code (http://unimod.sourceforge.net/). All this enables one to talk about the UniMod as of the implementation of executable UML.

## Publications

Collected articles on automata-based programming were published in ITMO University. The bulletin contains 28 articles on different problems of automata-based programming.
In 2009, in St. Petersburg, Russia the first book about automata-based programming was published.