Правильное моделирование на диаграмме классов UML

На диаграмме классов UML:

а) Нужно ли указывать агрегированные атрибуты? Или достаточно стрелок, указывающих на агрегацию?

б) Должен ли я добавить «id» в качестве атрибута или это данность?

enter image description here

Спасибо.

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
0
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете общую агрегацию на картинке. Это не имеет определенной семантики в соответствии с UML 2.5 (см. стр. 110). Если вам нужна составная агрегация, ромб должен быть заполнен. В этом случае агрегированный объект будет удален вместе с агрегирующим (последний должен обеспечить это ограничение). В вашей модели это не имеет смысла. Ни один сотрудник не объединяет отдел. Даже наоборот у меня были бы сомнения или хотя бы повод для обсуждения.

id нужен только в том случае, если он имеет деловую цель (например, артикул). Если вы преобразуете свою модель в базу данных, вы вводите искусственный идентификатор по техническим причинам. Но на абстрактном бизнес-уровне они не моделируются.

Ваши модели отличаются только использованием атрибутов для связанных классов. Вариант Б предпочтительнее. Но вам нужно поместить атрибуты как имена ролей в связанные классы (как -department и -branch). То, что вы разместили посередине соединителей, — это скорее название ассоциации. Плохой выбор с + впереди. Именование ассоциаций требуется редко. Так что избавься от этого. Имена ролей должны располагаться рядом с классом, принимающим роль. Также рекомендуется использовать точечную нотацию, чтобы показать, что роли представляют принадлежащие свойства. Просто поместите маленькую черную точку рядом с левой стороной обоих (рядом с именами ролей).

Вариант A неверен, так как создает избыточные свойства. Итак, B не просто предпочтительнее, это правильно.

Jim L. 18.05.2022 01:22

Очень понятное объяснение, спасибо. Что касается точечной нотации, вы имеете в виду, что они должны иметь что-то вроде - * имя ветки в классе Branch?

fran35 18.05.2022 01:47

Другие вопросы по теме