Архитектура и системы
UML-диаграмма классов онлайн
«UML: диаграмма классов» показывает статическую структуру объектной модели: классы с атрибутами и операциями и отношения между ними — наследование, реализацию, композицию. Родители автоматически встают над наследниками, а легенда всегда показывает все шесть видов связей.
Когда использовать
- Проектирование доменной модели перед реализацией
- Иерархия интерфейсов и реализаций в коде
- Объяснение паттерна проектирования
- Документация модуля для код-ревью
Как с ней работать в 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"
}
]
}Когда выбрать другой формат
- Только сущности и кратность связей, без операций → ER-диаграмма
- Обмен сообщениями между объектами во времени → Последовательность
- Жизненный цикл объекта → Состояния
Вопросы о формате
Какие отношения UML поддерживаются?
Шесть: наследование, реализация, композиция, агрегация, ассоциация с кратностью и зависимость. Легенда всегда показывает все шесть.
Нужно ли расставлять классы вручную?
Нет: родители встают над наследниками, части и связанные классы — на одном ряду. При желании координаты можно переопределить.
Когда выбрать ER-диаграмму вместо диаграммы классов?
Если важны только сущности и кратность связей, а не операции и наследование, — ER-диаграмма проще и точнее.