Диаграмма состояний UML — поведенческая диаграмма, показывающая состояния объекта и переходы между ними в ответ на внешние события. В основе — теория конечных автоматов. Применяют её там, где у объекта есть чётко выраженные стадии жизненного цикла: программные системы, встроенные устройства, бизнес-процессы. В статье — элементы нотации, пять шагов построения, два разобранных примера (светофор и жизненный цикл заказа) и обзор онлайн-инструментов.
В унифицированном языке моделирования (UML) существуют две группы диаграмм: структурные и поведенческие. Диаграмма состояний относится ко второй группе — рядом с диаграммой активности и диаграммой последовательности. Её задача — показать, как объект ведёт себя во времени: с момента создания до завершения жизненного цикла объекта.
Учитесь бесплатно за счёт государства
Экономия до 100 000 ₽ на любой программе
Нотация стандартизирована в спецификации OMG UML 2.x и принята как стандарт ISO/IEC 19501.
Формальная основа диаграммы — конечный автомат (state machine, FSM). Он описывается пятёркой: конечное множество состояний S, алфавит событий Σ, функция переходов δ, начальное состояние s₀, допускающие состояния F.
Различают два вида: автомат Мура — выход зависит только от текущего состояния; автомат Мили — от состояния и входного сигнала одновременно. UML реализует оба: действия задаются как на переходе между состояниями, так и внутри самого состояния через entry/do/exit.
Диаграмма строится из трёх классов элементов: состояния, переходы и псевдосостояния. Вместе они образуют графическое представление динамического поведения объекта — от первого события до завершения.
Навыки UML-проектирования и моделирования состояний входят в программу «Системный аналитик: с нуля до проектирования систем» — 72 часа, обучение в рамках нацпроекта «Кадры». Подробнее — в каталоге программ обучения.

Состояние — устойчивый период, в течение которого объект ожидает события. Нотация: прямоугольник с закруглёнными углами.
Основные виды:
Внутри состояния задают три вида действий. Порядок строгий: entry (однократно при входе) → do (непрерывно, пока состояние активно) → exit (однократно при выходе). Состояние истории H запоминает последнее активное подсостояние прямого уровня; H* — подсостояние любой глубины вложенности.
Переход — стрелка от исходного состояния к целевому. Метка записывается в формате: событие [охранное условие] / действие. Каждый элемент необязателен, но хотя бы один из двух — триггер или охранное условие — должен присутствовать.
Сторожевое условие (охранное условие, guard) — логическое выражение в квадратных скобках: [Оплата подтверждена]. Когда из одного состояния выходят несколько переходов по одному событию, guard выбирает нужную ветку. Условия должны быть взаимоисключающими.
Типы переходов: простой (между двумя состояниями), составной (пересекает границу составного состояния), внутренний (действие выполняется без смены состояния).
Построение диаграммы начинается с определения объекта, а не с рисования стрелок.
Шаг 1 — определить объект. Выбрать конкретный объект или компонент: заказ, пользовательский сеанс, сетевое соединение. Диаграмма состояний описывает жизненный цикл одного объекта — не процесс в целом.
Шаг 2 — выявить устойчивые состояния. Перечислить все равновесные стадии, где объект ожидает события. Каждое состояние именуется осмысленно: «Ожидание оплаты», а не «Состояние3».
Шаг 3 — задать события и охранные условия. Для каждого перехода определить событие-триггер и условие, при котором переход разрешён.
Шаг 4 — добавить переходы. Соединить состояния стрелками с метками событие [guard] / действие. Добавить начальное псевдосостояние (●) и конечное (⊙) при необходимости.
Шаг 5 — верифицировать. Пройтись по диаграмме вместе с разработчиком, бизнес-аналитиком и архитектором: нет ли состояний без выхода, нет ли конфликтующих охранных условий. Прописать entry/do/exit там, где поведение внутри состояния важно для реализации.

Два кейса разной сложности: простая циклическая система без охранных условий и процесс с ветвлением. Диаграмма состояний применяется для описания поведения таких компонентов системы, как интерфейсы, бизнес-объекты и протоколы связи.
Классический пример — автоматизированный светофор. Три состояния: Красный, Зелёный, Жёлтый. Три перехода по событию «таймер»: Красный → Зелёный → Жёлтый → Красный. Начальное псевдосостояние (●) ведёт в Красный; конечного состояния нет — автомат цикличен.
Охранных условий нет: каждый переход срабатывает однозначно по событию «таймер». Пример показывает минимальный набор элементов: три состояния, одно начальное псевдосостояние и три перехода.

Основной путь — пять состояний: Черновик → Оформлен → Оплачен → Отгружен → Доставлен. Из любого состояния возможен переход «Отмена» → Отменён.
Хотите сменить профессию или повысить квалификацию?
Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства
Ключевой момент: переход Оформлен → Оплачен срабатывает только при [Оплата подтверждена]. На переходе указано действие «Отправить уведомление покупателю». Те же данные можно представить таблицей переходов — матрицей «событие × состояние → целевое состояние». Заинтересованные стороны без UML-опыта воспринимают такую таблицу легче; но иерархию составных состояний она не передаёт.

PlantUML — текстовый предметно-ориентированный язык описания (DSL). Синтаксис: [*] —> Красный. Диаграммы хранятся как текст — удобно для систем контроля версий. Интегрируется с VS Code, GitLab, Confluence. Бесплатный.
draw.io (diagrams.net) — визуальный редактор с перетаскиванием элементов. Полная поддержка UML 2.x, готовые фигуры для состояний и переходов. Интеграция с Google Drive и GitHub. Бесплатный.
Mermaid — блок stateDiagram-v2 прямо в Markdown. Нативная поддержка GitHub, GitLab и Notion обеспечивает графическое представление диаграмм прямо внутри документации. Бесплатный.
Разработчикам подходят PlantUML и Mermaid — диаграмма лежит рядом с кодом. Аналитикам и менеджерам — draw.io: визуальный редактор не требует знания синтаксиса.
| Параметр |
PlantUML |
draw.io |
Mermaid |
|---|---|---|---|
| Синтаксис | Текстовый DSL | Визуальный | Markdown-блок |
| Интеграция | VS Code, GitLab, Confluence | Google Drive, GitHub | GitHub, GitLab, Notion |
| Аудитория | Разработчики | Аналитики, менеджеры | Разработчики |
| Стоимость | Бесплатный | Бесплатный | Бесплатный |
Три распространённые ошибки при построении диаграмм состояний.
Взрыв состояний — слишком много простых состояний при отсутствии иерархии. Решение: объединить связанные состояния в составные. Одна внешняя граница вместо десяти прямоугольников сокращает количество переходов кратно.
Неполная модель — пропущенные состояния или переходы. Обнаружение ошибок в логике поведения — одна из главных ценностей диаграммы. Если объект может оказаться в неучтённой ситуации, модель неполна.
Нарушение нотации — переход без триггера и без охранного условия. Такой переход в UML означает автоматическое срабатывание; если это не замысел — ошибка проектирования, которую лучше выявить на диаграмме, чем в коде.
Лучшие практики: давать состояниям осмысленные имена; верифицировать диаграмму с командой до написания кода; для сложных систем сначала строить диаграмму активности, затем детализировать через диаграммы состояний отдельных объектов.

Диаграмма состояний показывает жизненный цикл одного объекта и отвечает на вопрос «в каком состоянии объект». Диаграмма активности описывает поток действий в процессе — «что происходит шаг за шагом». Для объектов с чёткими стадиями (заказ, заявка, соединение) выбирают диаграмму состояний; для бизнес-процессов с ветвлениями — диаграмму активности.
Ровно одно начальное псевдосостояние на уровне всего автомата. Если диаграмма содержит составные состояния, внутри каждого из них допустимо собственное начальное псевдосостояние — локальное для данного подавтомата. Правило единственности точки входа в автомат в целом при этом не нарушается.
Псевдосостояние — технический элемент нотации, не являющийся «настоящим» состоянием объекта. Основные виды: начальное (●), конечное (⊙), история (H / H*), разветвление (fork), соединение (join), выбор (choice). Управляет потоком внутри автомата: задаёт точки входа, выхода и параллелизм.
Охранное условие — логическое булевое выражение в квадратных скобках рядом с меткой перехода: [Оплата подтверждена]. Переход срабатывает только если условие истинно. При нескольких переходах из одного состояния охранное условие выбирает нужную ветку; для однозначного поведения условия должны быть взаимоисключающими.
Состояние истории запоминает последнее активное подсостояние составного автомата. При возврате активируется запомненное подсостояние, а не начальное. H — поверхностная история (прямой потомок); H* — глубокая (любой уровень вложенности). Пример: медиаплеер после паузы возвращается к «Воспроизведение», а не к «Начало трека».
Таблица переходов удобна для линейных процессов без вложенных или параллельных состояний: матрица «событие × состояние → целевое состояние» читается без UML-опыта. Диаграмму состояний выбирают, когда нужно отобразить иерархию составных состояний — таблица её не передаёт.
Действия описывают поведение объекта внутри состояния. Entry выполняется при входе — инициализация ресурсов. Do — непрерывно пока объект активен, например «опрос датчика»; прерывается событием. Exit выполняется при выходе — очистка ресурсов. Порядок фиксирован: entry → do → (событие) → exit → переход.
Диаграмма состояний применяется для описания поведения таких компонентов системы, как пользовательские интерфейсы, бизнес-объекты (заказ, заявка, договор), протоколы связи (TCP-соединение), встроенные контроллеры (банкомат, светофор) и игровая логика. В системном анализе используется для верификации требований и составления тестовых сценариев.
Подайте заявку —
забронируйте место в группе
45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»