Ответ
Конечный автомат (State Machine) — это математическая модель вычислений, описывающая поведение системы с конечным числом состояний. Система может находиться только в одном состоянии в каждый момент времени и переходить из одного состояния в другое в ответ на внешние события (триггеры).
Эта модель помогает управлять сложной логикой, делая поведение системы предсказуемым и легко тестируемым.
Основные компоненты конечного автомата:
- Состояния (States): Набор уникальных состояний, в которых может находиться система (например,
Включен
,Выключен
,Ошибка
). - События (Events): Внешние воздействия, которые могут вызвать изменение состояния (например,
НАЖАТИЕ_КНОПКИ
,ПОТЕРЯ_СЕТИ
). - Переходы (Transitions): Правила, которые определяют, в какое следующее состояние перейдет система из текущего состояния при получении определенного события.
- Действия (Actions): Код, который выполняется при входе в состояние, выходе из него или во время перехода.
Пример на Python: управление светофором
from enum import Enum, auto
class State(Enum):
RED = auto()
YELLOW = auto()
GREEN = auto()
class TrafficLight:
def __init__(self):
self.state = State.RED
print("Светофор включен. Текущий цвет: КРАСНЫЙ")
def next_state(self):
"""Обрабатывает событие 'TIMER_EXPIRED'"""
if self.state == State.RED:
self.state = State.GREEN
print("Переход: -> ЗЕЛЕНЫЙ")
elif self.state == State.GREEN:
self.state = State.YELLOW
print("Переход: -> ЖЕЛТЫЙ")
elif self.state == State.YELLOW:
self.state = State.RED
print("Переход: -> КРАСНЫЙ")
# Использование
light = TrafficLight()
light.next_state() # Зеленый
light.next_state() # Желтый
light.next_state() # Красный
Области применения:
- Парсеры и компиляторы: для анализа лексической и синтаксической структуры кода.
- Сетевые протоколы: TCP/IP использует конечный автомат для управления жизненным циклом соединения.
- Пользовательские интерфейсы (UI): для управления состояниями элементов (например,
загрузка
,отображено
,ошибка
). - Игровые движки: для описания поведения персонажей и объектов (AI).
- Бизнес-процессы: для моделирования жизненного цикла заказа, документа или заявки.
Для реализации сложных автоматов в Python часто используют библиотеки, такие как transitions
или python-statemachine
.