← Назад к вопросам

Приведи пример процесса UML

2.0 Middle🔥 71 комментариев
#Диаграммы и моделирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Приведи пример процесса UML

UML диаграммы помогают визуализировать сложные процессы и системы. Приведу пример Activity Diagram для процесса обработки заказа, это один из самых полезных типов UML.

Контекст

Это диаграмма процесса в интернет-магазине: что происходит, когда пользователь создаёт заказ.

Диаграмма: UML Activity Diagram (Process Order)

                    START
                      |
                      v
        ┌──────────────────────┐
        │  User Adds Items     │
        │  to Shopping Cart    │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────┐
        │   View Cart          │
        │   Review Order       │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────┐
        │  Click "Checkout"    │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────┐
        │  Enter Shipping      │
        │  Address             │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────┐
        │ System Calculates    │
        │ Shipping Cost        │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────┐
        │ Select Payment       │
        │ Method               │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────┐
        │ User Confirms Order  │
        └──────────────────────┘
                      |
                      v
        ┌──────────────────────────────┐
        │ System Validates Stock       │ ──────┐
        │ (All items available?)       │       │
        └──────────────────────────────┘       │
                      │                        │
              YES    │                        │ NO
                      │                        │
                      v                        v
        ┌──────────────────────┐     ┌──────────────────┐
        │ Process Payment      │     │ Show Error:      │
        │ (Charge Card)        │     │ Item Out of      │
        └──────────────────────┘     │ Stock            │
                      │               └──────────────────┘
                      │                        │
                      v                        │
        ┌──────────────────────────────┐      │
        │ Payment Successful?          │      │
        └──────────────────────────────┘      │
                      │                        │
              YES    │                        │
                      │                        │
                      v                        │
        ┌──────────────────────────────┐      │
        │ Create Order Record in DB    │      │
        │ Generate Order ID            │      │
        └──────────────────────────────┘      │
                      │                        │
                      v                        │
        ┌──────────────────────────────┐      │
        │ Send Confirmation Email      │      │
        │ to User                      │      │
        └──────────────────────────────┘      │
                      │                        │
                      v                        │
        ┌──────────────────────────────┐      │
        │ Notify Warehouse to Pick     │      │
        │ & Pack Items                 │      │
        └──────────────────────────────┘      │
                      │                        │
                      v                        │
        ┌──────────────────────────────┐      │
        │ Schedule Shipping            │      │
        │ (Assign to Courier)          │      │
        └──────────────────────────────┘      │
                      │                        │
                      v                        │
        ┌──────────────────────────────┐      │
        │ Display Order Confirmation   │      │
        │ with Tracking Number         │      │
        └──────────────────────────────┘      │
                      │                        │
                      v                        v
                    END          ┌──────────────────┐
                                 │ User Goes Back   │
                                 │ to Choose Other  │
                                 │ Items or Cancel  │
                                 └──────────────────┘
                                         │
                                         v
                                        END

Второй вариант: Sequence Diagram (для взаимодействия сущностей)

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

User          Browser        Backend         Payment         Database
 |               |               |             API              |
 |─ Click Submit─>|               |               |              |
 |               |─ POST /orders─>|               |              |
 |               |               |               |              |
 |               |               |── Validate ───────────────>|
 |               |               |<── Items OK ────────────────|
 |               |               |               |              |
 |               |               |── Call ──────>|              |
 |               |               |   Charge      |              |
 |               |               |<── Success ───|              |
 |               |               |               |              |
 |               |               |── Save ────────────────────>|
 |               |               |   Order      |              |
 |               |               |<── Order ID ─────────────────|
 |               |<─ 200 OK ──────|               |              |
 |<─ Show Confirmation ─|       |               |              |
 |               |       |               |              |

Уведомление    Email Server
 |               |
 Отправить ─────>|─ Email ─>к пользователю

Третий вариант: State Diagram (для состояний заказа)

Показывает, в каких состояниях может быть заказ и как переходит между ними.

         ┌─────────────────────┐
         │      PENDING        │  (только создан, ждёт подтверждения)
         │   (Payment Not OK)   │
         └──────────┬──────────┘
                    │
         ┌──────────┴──────────┐
         │                     │
         v                     v
    [Retry]              [Timeout]
         │                     │
         v                     v
    ┌─────────────────┐   ┌─────────────┐
    │    CONFIRMED    │   │   CANCELLED │
    │ (Payment OK)    │   │  (Timeout)  │
    └────────┬────────┘   └─────────────┘
             │
             v
    ┌─────────────────┐
    │   PREPARING     │  (в сборке)
    │(Warehouse picks)│
    └────────┬────────┘
             │
             v
    ┌─────────────────┐
    │  IN TRANSIT     │  (в пути к пользователю)
    │  (With Courier) │
    └────────┬────────┘
             │
             v
    ┌─────────────────┐
    │   DELIVERED     │  (доставлен)
    │  (Completed)    │
    └─────────────────┘
    
    CANCELLED также возможно из любого состояния до DELIVERED

Четвёртый вариант: Class Diagram (для структуры данных)

Показывает таблицы БД и их связи.

┌─────────────────────────────┐
│         USER                │
├─────────────────────────────┤
│ - id: UUID                  │
│ - name: String              │
│ - email: String             │
│ - phone: String             │
│ - created_at: DateTime      │
├─────────────────────────────┤
│ + register()                │
│ + updateProfile()           │
│ + placeOrder()              │
└──────────────┬──────────────┘
               │
               │ 1..* (один пользователь может иметь много заказов)
               │
               v
┌─────────────────────────────┐
│        ORDER                │
├─────────────────────────────┤
│ - id: UUID                  │
│ - user_id: UUID (FK)        │
│ - total_price: Decimal      │
│ - status: Enum              │
│ - created_at: DateTime      │
├─────────────────────────────┤
│ + confirmPayment()          │
│ + cancelOrder()             │
│ + trackOrder()              │
└──────────────┬──────────────┘
               │
               │ 1..* (один заказ может содержать много товаров)
               │
               v
┌─────────────────────────────┐
│       ORDER_ITEM            │
├─────────────────────────────┤
│ - id: UUID                  │
│ - order_id: UUID (FK)       │
│ - product_id: UUID (FK)     │
│ - quantity: Int             │
│ - unit_price: Decimal       │
├─────────────────────────────┤
│ + getPrice()                │
└─────────────────────────────┘
               │
               │ * (много товаров)
               │
               v
┌─────────────────────────────┐
│       PRODUCT               │
├─────────────────────────────┤
│ - id: UUID                  │
│ - name: String              │
│ - price: Decimal            │
│ - stock: Int                │
│ - created_at: DateTime      │
├─────────────────────────────┤
│ + updateStock()             │
│ + getPriceHistory()         │
└─────────────────────────────┘

Когда я использую какие диаграммы

Activity Diagram — когда нужно показать процесс

  • Для бизнеса: "Как работает процесс заказа?"
  • Для разработчика: "Какие шаги нужно реализовать?"

Sequence Diagram — когда нужно показать взаимодействие

  • Интеграция с внешним API (Payment, SMS)
  • Какие микросервисы общаются с какими
  • Порядок вызовов функций

State Diagram — когда нужно показать состояния

  • Жизненный цикл заказа
  • Статусы документа (Draft → Sent → Approved → Archived)
  • FSM (Finite State Machine)

Class Diagram — когда нужно показать структуру

  • Схема БД
  • Структура классов в коде
  • Связи между таблицами

Инструменты для рисования UML

Бесплатные:

  • draw.io (простой, в браузере)
  • PlantUML (текстовый формат, потом рендер)
  • Lucidchart (функциональный, но часть платная)
  • Miro (для совместной работы)

Пример PlantUML (текстовый формат)

@startuml OrderProcess
start
:Add Items to Cart;
:View Cart;
:Click Checkout;
:Enter Shipping Address;
:Calculate Shipping Cost;
:Select Payment Method;
:Confirm Order;
if (Stock Available?) then
  :Process Payment;
  if (Payment OK?) then
    :Create Order Record;
    :Send Confirmation Email;
    :Notify Warehouse;
    :Schedule Shipping;
  else
    :Show Error: Payment Failed;
  endif
else
  :Show Error: Out of Stock;
endif
stop
@enduml

Это быстрее, чем рисовать вручную, и легче синхронизировать в git.

Практический совет

Как BA я использую диаграммы для:

  1. Коммуникации — быстро объяснить сложный процесс
  2. Документации — записать в PRD, чтобы не потерялось
  3. Обсуждения — на встречах показать варианты и обсудить
  4. Design Review — проверить, нет ли дыр в логике
  5. Onboarding — новых людей в проект легче ввести в курс

Диаграмма на 1 часу работы экономит 10 часов обсуждений и переделок.