dele

Архитектура и системы

UML-диаграмма классов онлайн

«UML: диаграмма классов» показывает статическую структуру объектной модели: классы с атрибутами и операциями и отношения между ними — наследование, реализацию, композицию. Родители автоматически встают над наследниками, а легенда всегда показывает все шесть видов связей.

Домен платежей: диаграмма классовКлассы домена платежей: сервис использует интерфейс PaymentMethod, его реализуют Card и BankTransfer; заказ владеет позициями и ссылается на клиента.USES1..*10..*1PaymentService+ charge(order: Order): Receipt«interface»PaymentMethod+ authorize(amount: Money): AuthResult+ capture(ref: String): voidCard- number: String- expiry: Date- cvv: StringBankTransfer- iban: String- accountHolder: StringOrder- id: String- placedAt: Date- total: MoneyOrderLine- sku: String- qty: Int- price: MoneyCustomer- id: String- name: String- email: StringЛЕГЕНДАНаследованиеРеализацияКомпозиция · владеетАгрегация · содержитАссоциацияЗависимость · использует
Шаблон «Домен платежей: диаграмма классов» — uml: диаграмма классов в Dele

Когда использовать

  • Проектирование доменной модели перед реализацией
  • Иерархия интерфейсов и реализаций в коде
  • Объяснение паттерна проектирования
  • Документация модуля для код-ревью

Как с ней работать в Dele

  • Обычно 4–5 классов, максимум 7. У класса — имя, стереотип (interface и enum выводятся в «…», abstract — курсивом), атрибуты и операции строками с видимостью, например «authorize(amount: Money): AuthResult».
  • Не больше 5 строк в разделе; геттеры и сеттеры не рисуйте.
  • Отношения (до 8): наследование, реализация, композиция (закрашенный ромб у владельца — часть умирает вместе с целым), агрегация (пустой ромб), ассоциация (всегда с кратностью на обоих концах) и зависимость (пунктир, «использует»).
  • Направление: from — наследник, реализация, часть или клиент; to — родитель, интерфейс, владелец или поставщик.
  • Один фокусный класс — тот, который реализуют или расширяют; входящие в него стрелки наследования становятся акцентными вместе с ним.

Три способа собрать диаграмму

Словами. Откройте ИИ-ассистента в редакторе или подключите своего агента по MCP и опишите задачу, например:

«Сделай UML-диаграмму классов платежей: интерфейс PaymentMethod с реализациями Card и BankTransfer, PaymentService, Order с композицией OrderLine. Фокус — PaymentMethod.»

В редакторе. Создайте диаграмму из шаблона «UML: диаграмма классов», меняйте элементы на холсте и в панели справа — раскладка пересчитывается сама.

Кодом. Диаграмма — это JSON-спецификация. Её можно править в панели «Спецификация», генерировать скриптом и хранить в git.

Спецификация примера (JSON)
{
  "type": "uml-class",
  "title": "Домен платежей: диаграмма классов",
  "description": "Классы домена платежей: сервис использует интерфейс PaymentMethod, его реализуют Card и BankTransfer; заказ владеет позициями и ссылается на клиента.",
  "classes": [
    {
      "id": "PaymentService",
      "name": "PaymentService",
      "operations": [
        {
          "text": "charge(order: Order): Receipt"
        }
      ]
    },
    {
      "id": "PaymentMethod",
      "name": "PaymentMethod",
      "stereotype": "interface",
      "focal": true,
      "operations": [
        {
          "text": "authorize(amount: Money): AuthResult"
        },
        {
          "text": "capture(ref: String): void"
        }
      ]
    },
    {
      "id": "Card",
      "name": "Card",
      "attributes": [
        {
          "visibility": "private",
          "text": "number: String"
        },
        {
          "visibility": "private",
          "text": "expiry: Date"
        },
        {
          "visibility": "private",
          "text": "cvv: String"
        }
      ]
    },
    {
      "id": "BankTransfer",
      "name": "BankTransfer",
      "attributes": [
        {
          "visibility": "private",
          "text": "iban: String"
        },
        {
          "visibility": "private",
          "text": "accountHolder: String"
        }
      ]
    },
    {
      "id": "Order",
      "name": "Order",
      "attributes": [
        {
          "visibility": "private",
          "text": "id: String"
        },
        {
          "visibility": "private",
          "text": "placedAt: Date"
        },
        {
          "visibility": "private",
          "text": "total: Money"
        }
      ]
    },
    {
      "id": "OrderLine",
      "name": "OrderLine",
      "attributes": [
        {
          "visibility": "private",
          "text": "sku: String"
        },
        {
          "visibility": "private",
          "text": "qty: Int"
        },
        {
          "visibility": "private",
          "text": "price: Money"
        }
      ]
    },
    {
      "id": "Customer",
      "name": "Customer",
      "attributes": [
        {
          "visibility": "private",
          "text": "id: String"
        },
        {
          "visibility": "private",
          "text": "name: String"
        },
        {
          "visibility": "private",
          "text": "email: String"
        }
      ]
    }
  ],
  "relations": [
    {
      "from": "PaymentService",
      "to": "PaymentMethod",
      "kind": "dependency",
      "label": "uses"
    },
    {
      "from": "Card",
      "to": "PaymentMethod",
      "kind": "realization"
    },
    {
      "from": "BankTransfer",
      "to": "PaymentMethod",
      "kind": "realization"
    },
    {
      "from": "OrderLine",
      "to": "Order",
      "kind": "composition",
      "fromMult": "1..*",
      "toMult": "1"
    },
    {
      "from": "Order",
      "to": "Customer",
      "kind": "association",
      "fromMult": "0..*",
      "toMult": "1"
    }
  ]
}

Когда выбрать другой формат

Вопросы о формате

Какие отношения UML поддерживаются?

Шесть: наследование, реализация, композиция, агрегация, ассоциация с кратностью и зависимость. Легенда всегда показывает все шесть.

Нужно ли расставлять классы вручную?

Нет: родители встают над наследниками, части и связанные классы — на одном ряду. При желании координаты можно переопределить.

Когда выбрать ER-диаграмму вместо диаграммы классов?

Если важны только сущности и кратность связей, а не операции и наследование, — ER-диаграмма проще и точнее.

Все форматы →

Сущности, поля, кратность

Компоненты, связи, границы доверия

Уровни абстракции и меры контроля