UML Class диаграмма на собеседовании системного аналитика
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем спрашивают на собесе SA
Class diagram — основа объектного моделирования. SA использует её для domain model, для описания сущностей системы и их связей. На собесе SA: «нарисуй class diagram для интернет-магазина», «отличие агрегации от композиции», «зачем кратность 0..* vs 1..*».
Главная боль без понимания — SA рисует ER-диаграмму вместо class diagram, разработчик не понимает, что такое наследование без ER-семантики.
Элементы Class diagram
Класс — прямоугольник с тремя секциями:
┌──────────────────┐
│ Order │ ← название класса
├──────────────────┤
│ - id: Long │
│ - amount: Decimal│ ← атрибуты
│ - status: Status │
├──────────────────┤
│ + create(): void │
│ + cancel(): void │ ← методы (операции)
│ + total(): Money │
└──────────────────┘Атрибут: видимость имя: Тип = значение_по_умолчанию [кратность].
Метод: видимость имя(parameters): Тип.
Стереотип в «»: «interface», «abstract», «entity», «service», «controller» — для уточнения роли класса.
┌──────────────────┐
│ «interface» │
│ PaymentMethod │
└──────────────────┘Видимость и атрибуты
Видимость:
+public-private#protected~package
Спецификаторы:
/derived— вычисляемое (не хранится).static(или подчёркнутый) — статическое.abstract(или курсив).
- id: Long {readOnly}
+ /total: Money ← вычисляется (sum of items)
- _DEFAULT_TAX: Float ← staticВ большинстве собесов SA достаточно показать видимость и тип. Детальные спецификаторы — только для глубокой архитектуры.
Связи: ассоциация, агрегация, композиция
Association (ассоциация) — простая структурная связь. Линия между двумя классами.
Order ─────────── CustomerAggregation (агрегация) — отношение «часть-целое», но часть может существовать без целого. Полая ромбическая стрелка на стороне «целого».
Order ◇──── OrderItemЕсли удалить Order — OrderItem может существовать (например, в архиве, в других заказах).
Composition (композиция) — сильное отношение «часть-целое»: часть НЕ существует без целого. Закрашенный ромб.
Order ♦──── ShipmentDetailsЕсли удалить Order — ShipmentDetails удаляется тоже. Lifecycle жёстко привязан.
Различие практически:
- Заказ ↔ покупатель: association (заказ ссылается на покупателя, оба независимы).
- Заказ ↔ товары заказа (OrderItem): композиция (товары имеют смысл только внутри заказа).
- Заказ ↔ адрес доставки: композиция (адрес для конкретной поставки) ИЛИ агрегация (если используем общий адрес из user profile) — зависит от модели.
На собесе. Различение этих трёх — частый вопрос. Будь готов привести пример с rationale.
Кратность (multiplicity)
Сколько объектов одного класса соотносится с другим.
Customer 1 ────── * Order
↑ один Customer имеет 0+ Order'овСтандартные значения:
1— ровно один.0..1— ноль или один (optional).*— много (0 или больше).1..*— один или больше.0..*— то же что*.2..5— диапазон.
Пример:
Order 1 ────── 1..* OrderItem
1 ────── 0..1 ShippingAddress
* ────── 1 Customer«Заказ имеет 1+ позиций, опционально адрес доставки, ссылается на одного покупателя; покупатель может иметь 0+ заказов».
Наследование и реализация
Generalization (наследование). Стрелка с пустым треугольником от потомка к родителю.
Person
▲ ▲
│ │
Customer Employee«Customer и Employee — это специализации Person».
Realization (реализация интерфейса). Пунктирная стрелка с пустым треугольником.
«interface»
PaymentMethod
▲
│ (пунктир)
│
CardPayment«CardPayment реализует интерфейс PaymentMethod».
Когда наследование, когда композиция? «Composition over inheritance» — современный принцип. Наследование — только когда есть истинная «is-a» связь и поведение действительно общее. Иначе — композиция.
Когда class diagram, а когда ER
Class diagram:
- Domain model для разработки.
- Объектная архитектура с поведением (методы).
- Полиморфизм и наследование.
- Описание API в OOP-стиле.
ER (Entity-Relationship):
- Схема БД.
- Реляционная модель с PK / FK.
- Без методов.
- Кратность через 1:1, 1:N, N:M (другая нотация).
Часто:
- На уровне analysis — class diagram (objects + behavior).
- На уровне DB design — ER.
- Они согласуются, но не идентичны.
N:M связи:
- В ER — отдельная associative table.
- В class — direct N:M или через association class.
Частые ошибки
Перепутать агрегацию и композицию. Запомни: композиция — lifecycle привязан. Агрегация — слабее. Если не уверен — обычно association достаточно.
Не указать кратность. Это критично — без кратности схема двусмысленна.
Записать имя класса в множественном числе. Класс — Order, не Orders. «Класс описывает один экземпляр».
Перенаследовать вместо композиции. Жирно и хрупко. Используй интерфейсы и композицию.
Слишком детально для analysis-уровня. На собесе SA не нужны все методы — только domain attributes и ключевые операции.
Стрелки наследования в неправильную сторону. Стрелка идёт от потомка к родителю (snake → animal), не наоборот.
Использовать class для описания БД. Получится монстр без поведения. Используй ER для БД.
Игнорировать association class. Если у связи N:M есть свои атрибуты («Студент-Курс с оценкой») — это association class, не просто line.
Связанные темы
- UML Use Case на собесе SA
- UML Sequence на собесе SA
- UML Activity на собесе SA
- ERD и связи на собесе SA
- Подготовка к собесу системного аналитика
FAQ
Можно ли совмещать class и ER на одной диаграмме?
Можно через стереотипы («entity», «table»), но обычно разделяют. Class — analysis. ER — database. Спецификации читаются разными людьми.
Как обозначить enum?
Класс с стереотипом «enumeration» и списком значений в секции атрибутов:
«enumeration»
OrderStatus
─────────────
PENDING
PAID
SHIPPED
CANCELLEDЧто такое derived attribute?
Атрибут, вычисляемый из других. Помечается /. Пример: /total: Money — вычисляется как сумма items.
Как показать abstract метод?
Имя метода курсивом или с пометкой {abstract}. У interface-методов реализация по умолчанию отсутствует.
Бывает ли множественное наследование в UML?
Да, в самом UML есть. На практике большинство языков (Java, C#) запрещают, заменяют интерфейсами. Подсказка для собеса: «UML позволяет, но избегайте».
Это официальная информация?
Нет. Статья основана на спецификации UML 2.5 (OMG) и стандартных практиках.
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.