На диаграмме классов UML:
а) Нужно ли указывать агрегированные атрибуты? Или достаточно стрелок, указывающих на агрегацию?
б) Должен ли я добавить «id» в качестве атрибута или это данность?
Спасибо.
Вы используете общую агрегацию на картинке. Это не имеет определенной семантики в соответствии с UML 2.5 (см. стр. 110). Если вам нужна составная агрегация, ромб должен быть заполнен. В этом случае агрегированный объект будет удален вместе с агрегирующим (последний должен обеспечить это ограничение). В вашей модели это не имеет смысла. Ни один сотрудник не объединяет отдел. Даже наоборот у меня были бы сомнения или хотя бы повод для обсуждения.
id
нужен только в том случае, если он имеет деловую цель (например, артикул). Если вы преобразуете свою модель в базу данных, вы вводите искусственный идентификатор по техническим причинам. Но на абстрактном бизнес-уровне они не моделируются.
Ваши модели отличаются только использованием атрибутов для связанных классов. Вариант Б предпочтительнее. Но вам нужно поместить атрибуты как имена ролей в связанные классы (как -department
и -branch
). То, что вы разместили посередине соединителей, — это скорее название ассоциации. Плохой выбор с +
впереди. Именование ассоциаций требуется редко. Так что избавься от этого. Имена ролей должны располагаться рядом с классом, принимающим роль. Также рекомендуется использовать точечную нотацию, чтобы показать, что роли представляют принадлежащие свойства. Просто поместите маленькую черную точку рядом с левой стороной обоих (рядом с именами ролей).
Очень понятное объяснение, спасибо. Что касается точечной нотации, вы имеете в виду, что они должны иметь что-то вроде - * имя ветки в классе Branch?
Вариант A неверен, так как создает избыточные свойства. Итак, B не просто предпочтительнее, это правильно.