Перейти к содержимому

Расширенная нотация диаграммы деятельности

В UML поток управления переносит возможность выполнить действие, а объектный поток переносит значение. Узел объекта показывает это значение между действиями. Например, действие «Создать запись» производит объект Запись, а «Подтвердить запись» получает его на вход.

Контакт (pin) — вход или выход конкретного действия; он показывается маленьким квадратом на его границе. Узел параметра деятельности (activity parameter node) связывает внешние входы и выходы всей деятельности с её внутренним графом. Центральный буфер временно хранит объектные токены, а хранилище данных (data store) обозначает место, из которого значение можно читать повторно.

Входной контакт

Хранилище данных

Объектный поток не заменяет диаграмму классов: он показывает, как значение участвует в конкретном поведении, а не полный набор его свойств и связей.

Сигнал (Signal) — классификатор, задающий вид асинхронного сообщения и его атрибуты. Его приём представлен событием SignalEvent.

Посылка сигнала (SendSignalAction) создаёт экземпляр сигнала, передаёт его целевому объекту и сразу продолжает выполнение: ответа она не ожидает. Приём события (AcceptEventAction) ждёт одно или несколько заданных событий и блокирует ветвь до их поступления. Если его триггер — SignalEvent, он принимает соответствующий сигнал; этот же узел используют для других видов событий, в том числе событий времени.

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

Посылка сигнала

Приём сигнала

Структурированный узел объединяет фрагмент деятельности с общими входами и выходами. Область расширения (expansion region) показывает обработку набора объектов: последовательно (iterative), параллельно (parallel) или конвейерно (stream). Используйте её, когда именно способ обработки коллекции важен для модели.

Последовательная обработка набора

Область прерывания (interruptible activity region) обозначает фрагмент, внутри которого обычный поток может быть прекращён событием. Прерывающее ребро передаёт выполнение в обработчик и останавливает остальные действия этой области. Если исключение влияет на данные, это стоит явно показать объектным потоком и согласовать с альтернативным сценарием.

Область прерывания

Структурированный узел деятельности обозначают пунктирной рамкой со скруглёнными углами и ключевым словом «structured». Если такой узел возвращает значение, обработчик исключения должен вернуть совместимое значение: иначе дальнейшая часть деятельности не сможет получить ожидаемый объектный токен.

Диаграмма деятельности использует токенную семантику. Упрощённо: начальный узел создаёт токен; действие выполняется, когда получает нужные токены; решение пропускает токен по защитному условию; развилка создаёт параллельные токены; соединение синхронизирует их; конечный узел деятельности прекращает всю деятельность. Поэтому развилку и решение нельзя подменять друг другом, даже если обе фигуры внешне «разветвляют» поток.

Точная последовательность чтения основных узлов такова:

  1. начальный узел (initial node) создаёт управляющий токен;
  2. действие (action) становится готовым, когда получило необходимые входные управляющие и объектные токены;
  3. решение (decision) передаёт токен по исходящему ребру с истинным защитным условием (guard);
  4. слияние (merge) передаёт дальше токен с любого входящего ребра;
  5. развилка (fork) создаёт копии токена для параллельных ветвей;
  6. соединение (join) ждёт токены на всех нужных входящих рёбрах и синхронизирует ветви;
  7. конечный узел потока (flow final) поглощает один поток, а конечный узел деятельности (activity final) прекращает всю деятельность и оставшиеся токены в ней.

Сеть Петри — ориентированный двудольный граф из позиций и переходов. Маркировка сопоставляет позициям число токенов; переход разрешён, когда токены есть во всех его входных позициях, и при срабатывании переносит их на выходы. Эта модель полезна для понимания параллельности и синхронизации.

Диаграмма деятельности похожа на сеть Петри токенной семантикой, но не сводится к ней один к одному: UML различает действия, управляющие и объектные токены, типы данных, исключения и иерархию деятельности. Для проектной работы обычно достаточно понимать передачу токенов и различать управление и данные.

Сначала постройте обычную диаграмму деятельности. Если поведение важнее последовательности сообщений, оставайтесь в модели деятельности; если нужно показать участников реализации и их вызовы, переходите к диаграмме последовательности.