Диаграмма классов
Диаграмма классов показывает структуру кода: классы, их поля/методы и связи между ними — без единой строчки реального кода, только схема.
┌─────────────────┐
│ Order │
├─────────────────┤
│ - id: int │
│ - items: List │
├─────────────────┤
│ + calculateTotal() │
└─────────────────┘
│
│ содержит
▼
┌─────────────────┐
│ Item │
└─────────────────┘
Три секции прямоугольника: имя класса, поля (- private, + public), методы. Стрелки между классами показывают тип связи.
Копнуть глубже
Основные типы связей и как их рисовать:
| Связь | Стрелка | Смысл |
|---|---|---|
| Наследование | ▷─── (треугольник, сплошная) | Dog extends Animal |
| Реализация интерфейса | ▷┄┄┄ (треугольник, пунктир) | Dog implements Movable |
| Композиция | ♦─── (закрашенный ромб) | Order содержит Item, без Order нет смысла в Item |
| Агрегация | ◇─── (пустой ромб) | Team содержит Player, но Player может существовать отдельно |
| Зависимость | ┄┄┄▶ (пунктирная стрелка) | один класс просто использует другой во временном вызове |
Композиция vs агрегация — главная путаница новичков. Разница в жизненном цикле: при композиции (закрашенный ромб) part не может существовать без целого — удалили Order, удалились и его Item. При агрегации (пустой ромб) part живёт независимо — удалили Team, Player остался существовать сам по себе.
🎤 Закрыл тему, если можешь объяснить:
• три секции прямоугольника класса на диаграмме;
• разницу между композицией и агрегацией по жизненному циклу (если дошёл до 2-го слоя).
• разницу между композицией и агрегацией по жизненному циклу (если дошёл до 2-го слоя).