Автомат

Термин автомат используется в нескольких смыслах, но их объединяет одна идея.

Автомат это система, которая самостоятельно переходит из одного состояния в другое по заранее определённым правилам, получая входные воздействия и, возможно, выдавая выходные результаты.

Самая общая схема выглядит так:

Текущее состояние
        │
        ▼
Получен вход (или произошло событие)
        │
        ▼
Правило определяет:
 • в какое состояние перейти;
 • что сделать (если нужно).
        │
        ▼
Новое состояние

В информатике

Когда говорят про конечный автомат (Finite State Machine, FSM), имеют в виду математическую модель.

Она состоит из:

  • множества состояний;
  • начального состояния;
  • входного алфавита (какие события могут прийти);
  • функции переходов;
  • иногда выходных действий;
  • одного или нескольких конечных (принимающих) состояний.

Например, турникет:

Locked
   │ монета
   ▼
Unlocked
   │ проход
   ▼
Locked

У него всего два состояния и два события.

В программировании

Автомат очень часто используется для описания поведения объектов.

Например, заказ:

Created
   │ оплатили
   ▼
Paid
   │ отправили
   ▼
Shipped
   │ доставили
   ▼
Delivered

Из состояния Delivered уже нельзя снова перейти в Paid, если это не предусмотрено правилами.

В более общем смысле

Автомат можно понимать как детерминированную систему переходов.

Есть:

  • некоторое внутреннее состояние;
  • правило;
  • воздействие.

Результат полностью определяется этими тремя вещами.

Почему он называется автоматом

Исторически слово произошло от греческого αὐτόματος (automatos), что означает «действующий сам собой».

То есть после задания правил оператору уже не нужно принимать решение на каждом шаге. Система сама реагирует на входные события согласно своей функции переходов.

Именно поэтому конечные автоматы лежат в основе огромного количества систем:

  • парсеров языков программирования;
  • протоколов TCP и HTTP;
  • пользовательских интерфейсов;
  • игровых персонажей;
  • банковских процессов;
  • workflow-систем;
  • компиляторов;
  • сетевых протоколов;
  • бизнес-процессов.

Во всех этих случаях идея одна и та же: поведение системы описывается не набором разрозненных if, а явными состояниями и допустимыми переходами между ними.

Прокрутить вверх