Эта диаграмма вводит в заблуждение
К счастью, NetworkAgent
имеет встроенную подсказку, которая помогает нам разобраться: два свойства, receiverAgent
и senderAgent
, которые имеют тип NetworkUDPReceiver
и * 1007. * соответственно:
- Это эквивалентно наличию двух ассоциаций, одной с классом
NetworkUDPReceiver
с именем receiverAgent
на его стороне и одной с NetworkUDPSender
с имя senderAgent
на его стороне. - Чтобы быть более точным, это должно быть представлено пунктирным концом на стороне получателя и отправителя.
- Поскольку такая конструкция, очевидно, позволяет легко переходите от агента к отправителю или получателю, вы можете показать возможность навигации с помощью стрелки на стороне отправителя и получателя.
- Предполагая, что другие классы представлены по тем же логам c , мы можем считать, что нет удобного перехода к агентству. Это может быть показано крестиком на стороне агента.
Таким образом, это почти полностью соответствует ассоциациям, которые вы обвели, за одним существенным исключением: агрегирование, которое неверно.
Вещь с агрегированием
Белый ромб действительно предназначен для описания отношения части-целого (с ромбиком на стороне целого). Но UML позволяет семантике открываться, и де-факто нет никаких преимуществ от ее использования, чем от обычной ассоциации. Итак, если вы составите диаграмму, лучший совет - избегать этого.
Более того, я бы попросил вас доказать, что существует взаимосвязь между агентом и отправителем / получателем: отправитель не является часть агента. Отправитель просто связан с агентом.
Некоторые разработчики моделей неправильно используют агрегирование UML для систематического представления композиции объектов. Это не принципиально неправильно, но проблемы реализации смешиваются с проблемами дизайна. Такие разработчики моделей действительно использовали бы здесь агрегирование, но поставили бы его на сторону агента. 1038 *
Заключение
Лучше всего убрать агрегацию с диаграммы. Если вы решите, что хотите использовать его для композиции объектов, переместите ромб на другую сторону.
В общем: если вы используете ассоциацию вместо агрегации, это не повлияет. Если вы используете агрегацию вместо ассоциации, это может ввести в заблуждение, но в целом без практических последствий.