Руководство по синтаксису диаграмм состояний PlantUML

Что такое диаграмма состояний?

А Диаграмма состояний (часто называемая диаграммой состояний или диаграммой состояний) — это поведенческая диаграмма UML которая моделирует жизненный цикл одного системного объекта, бизнес-сущности или процесса во время выполнения. Как фундаментальный компонент спецификации унифицированного языка моделирования (UML), эта конкретная тип диаграммы UML иллюстрирует различные состояния, которые может занимать объект от его первоначальной инициализации до окончательного уничтожения, а также конкретные события или условия, которые запускают переход из одного состояния в другое.

Независимо от того, документируете ли вы сложные флаги соединения WebSocket-соединения, этапы обработки заказов модели оформления заказа в электронной коммерции или поведение автономной аппаратной системы, диаграмма состояний UML предоставляет разработчикам программного обеспечения и архитекторам программного обеспечения четкий, однозначный чертеж сложной реактивной логики. С помощью VPasCode, вы можете мгновенно создавать сложные переходы состояний, не беспокоясь о выравнивании сетки или пересечении стрелок границ.

Руководство по основному синтаксису: элементы и конструкции

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

1. Начальные и конечные состояния

У каждого автомата состояний должен быть входной пункт и, по желанию, конечный пункт. В синтаксисе PlantUML эти граничные элементы обозначаются оберткой из символа звездочки:

  • [*] --> StateName (Определяет начальное состояние)
  • StateName --> [*] (Определяет конечное состояние)

2. Определение состояний и переходов событий

Состояния объявляются автоматически всякий раз, когда они соединены направленной стрелкой (-->). Чтобы добавить контекст переходу, добавьте двоеточие (:) и затем укажите конкретное событие, триггер API или вызов метода, который вызывает изменение состояния:

[*] --> Отключено
Отключено --> Подключение : "connect()"
Подключение --> Подключено : "auth_success"

3. Композитные / вложенные состояния

Сложные приложения часто имеют отдельные состояния, содержащие собственные вложенные подсостояния. Эти композитные структуры можно реализовать, используя ключевое словоstateключевое слово, за которым следует открывающая фигурная скобка:

state ActiveWorkspace {
    [*] --> Idle
    Idle --> Typing : "keypress"
    Typing --> Idle : "timeout"
}

4. Точки выбора (условные ветвления)

Когда происходит событие, система часто должна оценить внутренние флаги данных, прежде чем определить следующее состояние. Чтобы нарисовать стандартный ромб UML для выбора, используйте токен стереотипа<<choice>>стереотипа:

state check_payment <<choice>>
OrderPlaced --> check_payment : "process()"
check_payment --> Paid : [balance >= total]
check_payment --> Failed : [balance < total]

Лучшие практики для чистых диаграмм состояний

  • Используйте описания состояний:Вы можете добавить четкие операционные сведения, входные точки или выходные функции непосредственно внутри узла состояния, используя двоеточие в строке (например, StateName : entry / logTimestamp()).
  • Держите имена состояний компактными:Используйте CamelCase или snake_case для внутренних имен переменных состояний (например, PaymentProcessing), и используйте кавычки, если нужно прикрепить длинную читаемую метку.
  • Управляйте направлениями векторного маршрутизирования: Если ваши многоуровневые карты жизненного цикла становятся загроможденными по вертикали, вставьте внутренние пространственные правила в стрелки соединений (например, -right-> или -down->) для балансировки плотности макета.

Примеры диаграмм состояний PlantUML в реальных условиях

Пример 1: Жизненный цикл сети устройств IoT (составные состояния и выборы)

Этот шаблон отслеживает циклы поведенческих состояний подключения модуля датчика IoT, демонстрируя сложные структурные вложенные блоки и выборные точки условной оценки.

@startuml
[*] --> Offline

Offline --> Connecting : "power_on"

state Connecting {
    [*] --> Initializing
    Initializing --> ResolvingDNS : "hardware_ready"
    ResolvingDNS --> SendingHandshake : "ip_acquired"
}

state authentication_check <<choice>>
Connecting --> authentication_check : "receive_server_challenge"

authentication_check --> Online : [token_valid]
authentication_check --> Offline : [token_expired] : "blink_red_led"

state Online {
    [*] --> Idle
    Idle --> TransmittingData : "timer_trigger"
    TransmittingData --> Idle : "ack_received"
    Idle --> PowerSaving : "low_battery_detected"
}

Online --> Offline : "connection_lost"
@enduml

Разбор синтаксиса: Этот карта четко разделяет отдельные циклы операций. Когда аппаратное обеспечение переходит в составное состояние,Connecting обертку, оно отслеживает локализованные подсостояния, такие как разрешение DNS, прежде чем достигнутьauthentication_check выборного ромба. Скобки ([token_valid]) представляют стандартные условия охраны UML.

Пример 2: Состояние машины выполнения заказов электронной коммерции (параллельные подсостояния)

Этот продвинутый корпоративный чертеж моделирует многопоточную систему заказов, показывающую ортогональные параллельные поведения (одновременная обработка пакетов доставки и учетных записей оплаты), используя линии разделения (--).

@startuml
[*] --> ShoppingCart

ShoppingCart --> OrderSubmitted : "checkout_click"
OrderSubmitted --> ProcessingPayment : "authorize_funds"

state ProcessingPayment {
    [*] --> ContactingBank
    ContactingBank --> SettlementSettled : "capture_success"
}

ProcessingPayment --> OrderConfirmed : "payment_cleared"

state OrderConfirmed {
    [*] --> LogisticsHandling
    state LogisticsHandling {
        [*] --> PickingItems
        PickingItems --> PackingBox : "inventory_secured"
        PackingBox --> OutForDelivery : "label_printed"
    }
    --
    [*] --> BillingRecords
    state BillingRecords {
        [*] --> CompilingInvoice
        CompilingInvoice --> InvoiceEmailed : "pdf_generated"
    }
}

OrderConfirmed --> OrderArchived : "delivery_confirmed"
OrderArchived --> [*]
@enduml

Разбор синтаксиса: ВнутриOrderConfirmed составной структуры двойной дефисный разделитель (--) выступает в качестве ортогонального разделителя. Это инструктирует PlantUML разделить диаграмму на два параллельных состояния, которые выполняются одновременно: физический логистический канал слева и корпоративные обновления счетов справа.

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