UML диаграммы
Unified Modeling Language — язык моделирования для визуализации структуры и поведения системы.
Типы UML диаграмм
Структурные (Static)
Показывают статическую структуру системы:
- Class Diagram (диаграмма классов)
- Component Diagram (диаграмма компонентов)
- Deployment Diagram (диаграмма развертывания)
- Object Diagram (диаграмма объектов)
- Package Diagram (диаграмма пакетов)
Поведенческие (Dynamic)
Показывают динамическое поведение:
- Use Case Diagram (диаграмма вариантов использования)
- Sequence Diagram (диаграмма последовательности)
- Activity Diagram (диаграмма деятельности)
- State Machine Diagram (диаграмма состояний)
- Communication Diagram (диаграмма коммуникации)
Class Diagram (Диаграмма классов)
Показывает классы системы и связи между ними.
Видимость (Visibility)
+public — доступен всем-private — доступен только внутри класса#protected — доступен классу и наследникам~package — доступен в пакете
Типы связей
Association (Ассоциация)
Обычная связь между классами.
User -- Order
Aggregation (Агрегация)
"Имеет" — слабая связь, части могут существовать отдельно.
Department o-- Employee
Сотрудники могут существовать без отдела.
Composition (Композиция)
"Состоит из" — сильная связь, части не существуют без целого.
House *-- Room
Комнаты не существуют без дома.
Inheritance (Наследование)
"Является" — наследование свойств и методов.
Animal <|-- Dog
Animal <|-- Cat
Dependency (Зависимость)
Один класс использует другой.
OrderService ..> EmailService
Множественность (Multiplicity)
1— ровно один0..1— ноль или один*или0..*— ноль или больше1..*— один или больше2..5— от 2 до 5
Activity Diagram (Диаграмма деятельности)
Показывает поток действий (workflow).
Элементы
- Start — начало процесса
- Action — действие
- Decision — условие (if/else)
- Fork/Join — параллельные действия
- End — конец процесса
Когда использовать
- Моделирование бизнес-процессов
- Описание алгоритмов
- Workflow системы
- Процессы обработки данных
State Machine Diagram (Диаграмма состояний)
Показывает состояния объекта и переходы между ними.
Элементы
- State — состояние объекта
- Transition — переход между состояниями
- Event — событие, вызывающее переход
- Initial state — начальное состояние
- Final state — конечное состояние
Пример: Заказ
Состояния: Draft, Pending, Approved, InProgress, Completed, Cancelled
События:
- submit: Draft → Pending
- approve: Pending → Approved
- start: Approved → InProgress
- complete: InProgress → Completed
- cancel: любое → Cancelled
Когда использовать
- Жизненный цикл объектов (заказ, задача, документ)
- Workflow с четкими состояниями
- Конечные автоматы (FSM)
Component Diagram (Диаграмма компонентов)
Показывает архитектуру системы на уровне компонентов.
Когда использовать
- Проектирование архитектуры
- Документирование микросервисов
- Показ зависимостей между модулями
Deployment Diagram (Диаграмма развертывания)
Показывает физическое размещение компонентов.
Когда использовать
- Планирование инфраструктуры
- Документирование deployment
- Показ физической архитектуры
Object Diagram (Диаграмма объектов)
Показывает конкретные экземпляры объектов в определенный момент времени.
Когда использовать
- Примеры данных для документации
- Тестовые сценарии
- Объяснение сложных связей
Package Diagram (Диаграмма пакетов)
Показывает организацию кода в пакеты/модули.
Когда использовать
- Структура проекта
- Модульная архитектура
- Зависимости между пакетами
Timing Diagram (Диаграмма времени)
Показывает изменение состояний во времени.
Когда использовать
- Анализ производительности
- Временные диаграммы
- Синхронизация процессов
Best Practices
1. Не перегружай диаграммы
- Одна диаграмма = одна идея
- Максимум 7-10 элементов
- Разбивай сложные диаграммы на несколько простых
2. Используй правильный уровень детализации
- High-level для презентаций
- Detailed для разработчиков
3. Поддерживай актуальность
- Обновляй диаграммы при изменении кода
- Храни в Git вместе с кодом
4. Используй консистентные имена
- Те же имена что и в коде
- Единый стиль именования
5. Добавляй легенду
- Объясняй нестандартные обозначения
- Указывай версию и дату
Инструменты
Online
- PlantUML — текстовое описание диаграмм
- Draw.io — визуальный редактор
- Lucidchart — профессиональный инструмент
- Miro — для коллаборации
Desktop
- StarUML — полнофункциональный UML редактор
- Visual Paradigm — enterprise решение
- ArgoUML — open-source
- Enterprise Architect — для больших проектов
IDE плагины
- PlantUML Integration — для IntelliJ IDEA
- UML Designer — для Eclipse
- Draw.io Integration — для VS Code
PlantUML синтаксис
Class Diagram
Sequence Diagram
Activity Diagram
Когда какую диаграмму использовать
| Задача | Диаграмма |
|---|---|
| Показать функции системы | Use Case |
| Показать структуру данных | Class |
| Показать взаимодействие | Sequence |
| Показать бизнес-процесс | Activity |
| Показать жизненный цикл | State Machine |
| Показать архитектуру | Component |
| Показать инфраструктуру | Deployment |
Полезные ресурсы
- UML Diagrams — справочник по UML
- PlantUML Documentation
- Visual Paradigm Tutorials
- Книга "UML Distilled" — Martin Fowler
- Книга "Applying UML and Patterns" — Craig Larman