Диаграммы состояний и последовательности
Состояния, переходы, сторожевые условия; линии жизни, синхронные и асинхронные сообщения, фреймы alt и loop. Когда какую диаграмму применять.
Обе диаграммы описывают поведение, но с разных сторон. Диаграмма состояний следит за одним объектом в течение его жизни. Диаграмма последовательности — за группой объектов в течение одного сценария.
Диаграмма состояний
- Состояние — прямоугольник со скруглёнными углами: «Черновик», «На проверке», «Принят».
- Начальное состояние — закрашенный круг, конечное — круг в кольце.
- Переход — стрелка с подписью «событие [условие] / действие».
- Сторожевое условие в квадратных скобках: переход сработает, только если оно истинно.
- Внутренние действия: entry — при входе, exit — при выходе, do — пока объект в состоянии.
Жизненный цикл заявки:
●
│ создать
▼
┌──────────┐ отправить ┌─────────────┐ одобрить ┌──────────┐
│ Черновик │────────────▶│ На проверке │───────────▶│ Принята │
└──────────┘ └─────────────┘ └──────────┘
│ отклонить [есть замечания]
▼
┌─────────────┐
│ Отклонена │──── доработать ──┐
└─────────────┘ │
▲ │
└─────────────────────────┘
Такая диаграмма особенно уместна, когда в системе есть объект со статусами — заказ, заявка, документ. Она прямо переводится в проверку допустимых переходов в коде.
Диаграмма последовательности
- Участники — прямоугольники сверху, от каждого вниз идёт пунктирная линия жизни.
- Прямоугольник на линии — фокус управления: объект активен, выполняет работу.
- Сплошная стрелка с закрашенным наконечником — синхронный вызов, ждём ответа.
- Пунктирная стрелка — возврат результата.
- Открытая стрелка — асинхронное сообщение, ответа не ждём.
- Крестик на линии жизни — уничтожение объекта.
Сценарий «Оформление заявки»:
Студент Форма Сервер БД ВК-бот
│ │ │ │ │
│─заполнить▶│ │ │ │
│ │─POST /lead─▶│ │ │
│ │ │─сохранить─▶│ │
│ │ │◀──── id ───│ │
│ │ │────────── уведомить ────▶│
│ │◀── ok, id ──│ │ │
│◀─ «принято»│ │ │ │
Фреймы: ветвления и циклы
| Фрейм | Смысл |
|---|---|
| alt | Альтернатива: если условие — одна ветка, иначе другая |
| opt | Необязательный блок: выполняется при условии |
| loop | Цикл с указанием числа повторений или условия |
| par | Параллельное выполнение |
| ref | Ссылка на другую диаграмму, чтобы не дублировать |
Какую выбрать
| Вопрос | Диаграмма |
|---|---|
| Какие статусы бывают у документа и как он между ними ходит? | Состояний |
| Что происходит при нажатии кнопки «Оформить»? | Последовательности |
| Как устроен алгоритм расчёта? | Деятельности |
| Кто из пользователей что может делать? | Вариантов использования |
Частые вопросы
Чем диаграмма состояний отличается от блок-схемы?
Блок-схема описывает алгоритм — последовательность действий. Диаграмма состояний описывает объект: в каких состояниях он бывает и по каким событиям переходит между ними.
Можно ли заменить диаграмму последовательности коммуникационной?
Они несут одну информацию в разной форме. Последовательности читается легче, поэтому в учебных работах берут её.