de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

Практическое руководство по 14 типам диаграмм UML с использованием инструмента VPasCode

Диаграммы UML обычно группируются на структурные диаграммы, которые описывают, из чего состоит система, и поведенческие диаграммы, которые описывают, что она делает. Приведённые ниже примеры используют один сценарий интернет-магазина, чтобы их можно было сравнивать и адаптировать. UML 2.5.1 — это формальная спецификация, на которую здесь ссылается.

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

Структурные диаграммы

1. Диаграмма классов

Показывает классы системы, их данные и операции, а также отношения, такие как ассоциация, наследование и композиция. Используйте её для обсуждения предметных моделей или объектно-ориентированного проектирования.

@startuml
class Customer {
  +id: String
  +email: String
  +placeOrder(): Order
}

class Order {
  +number: String
  +status: OrderStatus
  +total(): Money
}

class OrderLine {
  +quantity: int
  +unitPrice: Money
}

class Product {
  +sku: String
  +name: String
}

Customer "1" -- "0..*" Order : places
Order "1" *-- "1..*" OrderLine : contains
OrderLine "*" --> "1" Product : refers to
@enduml

Прочитайте: один клиент может разместить много заказов; заказ содержит одну или более строк; каждая строка ссылается на продукт. Заполненный ромб указывает на композицию: заказ владеет своими строками.

2. Диаграмма объектов

Показывает конкретные экземпляры и связи в определённый момент времени. Полезно для иллюстрации примеров данных или объяснения модели классов с помощью конкретного сценария. В PlantUML используйте нотацию объектов.

@startuml
object "alice:Customer" as alice {
  id = C104
  email = [email protected]
}

object "order:Order" as order {
  number = O9001
  status = PAID
}

object "line:OrderLine" as line {
  quantity = 2
  unitPrice = 19.99
}

object "mug:Product" as mug {
  sku = MUG-01
  name = Travel mug
}

alice -- order
order *-- line
line --> mug
@enduml

3. Диаграмма компонентов

Показывает развертываемые или заменяемые части программного обеспечения и их зависимости. Используйте её для коммуникации архитектуры приложения и границ интеграции.

@startuml
component "Web Store" as web
component "Order Service" as orders
component "Payment Adapter" as payments
database "Order DB" as db
cloud "Payment Provider" as provider

web --> orders : REST
orders --> db : SQL
orders --> payments : authorize
payments --> provider : HTTPS
@enduml

4. Диаграмма композитной структуры

Показывает внутренние части классификатора — например, компонента или класса — и то, как эти части соединяются через порты. Полезно, когда внутреннее взаимодействие важнее, чем архитектура окружающей системы.

PlantUML не предоставляет универсально поддерживаемого специального синтаксиса для композитной структуры. Этот набросок в стиле диаграммы классов передаёт части и связи:

@startuml
allowmixing
skinparam componentStyle rectangle

class Car {
}

package "Car" {
  component "engine : Engine" as engine {
    portout p1
  }

  component "transmission : Transmission" as trans {
    portin p2
    portout p3
  }

  component "wheel : Wheel [4]" as wheels {
    portin p4
  }

  p1 -- p2 : drives
  p3 -- p4 : power
}

@enduml

Рассматривайте это как структурный набросок; он не отображает формальные порты UML или семантику соединителей.

5. Диаграмма развертывания

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

@startuml
node "Устройство клиента" as client {
  artifact "Браузер"
}

node "Облако" {
  node "Хост приложения" as appHost {
    artifact "API магазина"
  }
  database "База данных заказов" as db
}

cloud "Внешний поставщик платежей" as pay

client --> appHost : HTTPS
appHost --> db : SQL
appHost --> pay : HTTPS
@enduml

6. Диаграмма пакетов

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

@startuml
package "store.web" {
  class CheckoutController
}

package "store.application" {
  class PlaceOrder
}

package "store.domain" {
  class Order
  class Product
}

package "store.persistence" {
  class OrderRepository
}

CheckoutController ..> PlaceOrder
PlaceOrder ..> Order
PlaceOrder ..> OrderRepository
@enduml

7. Диаграмма профиля

Определяет расширение UML, специфичное для предметной области, используя стереотипы, помеченные значения и ограничения. Используйте её, когда проекту требуется согласованный словарь моделирования, выходящий за рамки стандартного UML.

PlantUML может отображать концепции профиля в виде наброска в стиле UML, но это не специализированный рендерер диаграмм профиля.

@startuml
class "«профиль» StoreProfile" as Profile
class "«стереотип» «Сервис»" as Service
class "«стереотип» «Репозиторий»" as Repository
class "«метакласс» Компонент" as Component

Profile ..> Service : определяет
Profile ..> Repository : определяет
Service ..> Component : расширяет
Repository ..> Component : расширяет

note right of Service
  помеченное значение:
  владелец: String
end note
@enduml

Поведенческие диаграммы

8. Диаграмма вариантов использования

Показывает внешних акторов и цели системы, с которыми они взаимодействуют. Используйте её для определения границ и фиксации функциональных требований на высоком уровне.

@startuml
направление слева направо
актор Клиент
актор "Платежный провайдер" как Провайдер

прямоугольник "Онлайн-магазин" {
  кейс использования "Просмотр товаров" как Просмотр
  кейс использования "Оформление заказа" как Оформление
  кейс использования "Оплата заказа" как Оплата
  кейс использования "Отслеживание заказа" как Отслеживание
}

Клиент --> Просмотр
Клиент --> Оформление
Клиент --> Отслеживание
Провайдер --> Оплата
Оформление ..> Оплата : <<включить>>
@enduml

9. Диаграмма деятельности

Моделирует рабочий процесс: действия, решения, параллельные пути и передачи. Используйте её для бизнес-процессов, операционных процедур или потока управления алгоритма.

@startuml
начало
:Выбрать товары;
:Ввести данные для доставки;
:Рассчитать итоговую сумму;

если (Товары в наличии?) то (да)
  :Авторизовать оплату;
  если (Оплата одобрена?) то (да)
    :Создать заказ;
    :Отправить подтверждение;
  иначе (нет)
    :Показать ошибку оплаты;
  endif
иначе (нет)
  :Показать отсутствующие товары;
endif

конец
@enduml

10. Диаграмма автомата состояний

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

@startuml
[*] --> Черновик
Черновик --> ОжиданиеОплаты : submit
ОжиданиеОплаты --> Оплачено : payment approved
ОжиданиеОплаты --> Отменено : payment declined
ОжиданиеОплаты --> Отменено : customer cancels
Оплачено --> Отгружено : dispatch
Отгружено --> Доставлено : delivery confirmed
Отменено --> [*]
Доставлено --> [*]
@enduml

11. Диаграмма последовательности

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

@startuml
актор Клиент
участник "Веб-магазин" как Web
участник "Сервис заказов" как Orders
участник "Сервис оплаты" как Payments

Клиент -> Web : submit checkout
Web -> Orders : create order
Orders -> Payments : authorize payment
Payments --> Orders : approved
Orders --> Web : order confirmation
Web --> Customer : show confirmation
@enduml

12. Диаграмма коммуникации

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

В стандартном наборе UML PlantUML нет отдельного рендерера для диаграмм коммуникации. Этот набросок с объектами и связями помечает сообщения номерами последовательности:

@startuml
объект Клиент
объект WebStore
объект OrderService
объект PaymentService

Клиент --> WebStore : 1: checkout()
WebStore --> OrderService : 1.1: createOrder()
OrderService --> PaymentService : 1.2: authorize()
PaymentService --> OrderService : 1.3: approved
OrderService --> WebStore : 1.4: confirmation
@enduml

13. Диаграмма обзора взаимодействий

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

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

@startuml
skinparam conditionStyle InsideDiamond

title Диаграмма обзора взаимодействия: Система обработки заказов

start

:Клиент оформляет заказ;

if (Товар есть в наличии?) then (да)
  
  partition "sd Последовательность оформления заказа" {
    :Авторизовать оплату;
    :Списать со склада;
  }
  
else (нет)
  
  partition "sd Процесс отложенного заказа" {
    :Уведомить клиента;
    :Сформировать запрос поставщику;
  }
  
endif

fork
  partition "sd Последовательность отгрузки" {
    :Упаковать заказ;
    :Отправить по адресу;
  }
fork again
  partition "sd Последовательность выставления счетов" {
    :Сформировать счёт;
    :Отправить электронное письмо с подтверждением;
  }
end fork

:Закрыть заказ;

stop
@enduml

Для детального отображения обмена сообщениями внутри каждого сценария создайте отдельную диаграмму последовательности.

14. Диаграмма временных интервалов

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

@startuml
robust "Заказ" as Order
concise "Оплата" as Payment

@0
Заказ: Черновик
Оплата: В ожидании

@5
Заказ: На рассмотрении
Оплата: В обработке

@10
Оплата: Одобрена

@12
Заказ: Подтверждён
@enduml

Выбор типа диаграммы

Начните с вопроса, на который должна отвечать диаграмма:

  • Что находится в системе?Класс, объект, компонент, составная структура, пакет, профиль или развёртывание.

  • Что делает система?Использование, деятельность или автомат состояний.

  • Как участники взаимодействуют?Последовательность, коммуникация, обзор взаимодействия или временные интервалы.

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

Эта статья также доступна на Deutsch, English, Español, فارسی, Français, Bahasa Indonesia, 日本語, Polski, Portuguese, Việt Nam, 简体中文 and 繁體中文