Что такое композиция в UML
Что проверяют
Читаете ли вы диаграмму как формулировку требования, а не как картинку. Для аналитика выбор между ассоциацией, агрегацией и композицией это утверждение о жизненном цикле объектов, из которого потом вырастают правила удаления, целостность данных и поведение интерфейса.
Как отвечать
Композиция это отношение «часть-целое» с сильной формой владения. Часть принадлежит ровно одному целому, не существует без него и уничтожается вместе с ним. На диаграмме классов рисуется закрашенным ромбом со стороны целого, кратность на этой стороне равна единице.
Сравните с соседями. Агрегация, незакрашенный ромб, тоже «часть-целое», но часть живёт самостоятельно и может принадлежать разным целым по очереди. Обычная ассоциация просто фиксирует связь без владения. Стандарт даёт строгую семантику только композиции, у агрегации она договорная, поэтому в команде полезно один раз условиться, что вы ею обозначаете.
Хороший пример композиции: заказ и его строки, документ и его пункты, комната внутри здания. Строка заказа вне заказа не имеет смысла и не переезжает в другой заказ.
Полезно сразу перевести это в требования: обязательная ссылка на владельца, каскадное удаление или архивирование вместе с целым, запрет переноса части между целыми.
Где спотыкаются
Путают закраску ромба и его сторону. Закрашенный ромб ставится у целого и означает композицию, пустой означает агрегацию. Ошибка выглядит мелкой, а меняет требование к удалению данных на противоположное.
Называют композицией пару, где часть переживает целое: библиотека и книги, отдел и сотрудники. Проверка простая: спросите, что должно случиться с частью при удалении целого и может ли часть принадлежать другому владельцу. Хотя бы одно «да» означает агрегацию или ассоциацию.
Останавливаются на картинке и не доводят её до правил. Если в модели композиция, а в постановке не сказано про обязательность владельца и каскад, разработчик реализует связь обычной необязательной ссылкой, и в базе заведутся строки-сироты.