Могут ли две композиции иметь один и тот же объект? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь создать диаграмму классов для системы онлайн-аукциона, и у меня возникла эта проблема.Ставки принадлежат как Аукциону, так и Покупателю (поправьте меня, если я ошибаюсь).Могу ли я сказать, что пользователь состоит из заявки, а аукцион состоит из заявки или это противоречит правилам UML?Я в замешательстве

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

В общем

Термин «композиция» неоднозначен, и это объясняет вашу путаницу:

  • В ООП композиция объекта означает использование объекта в другом объекте..
  • В UML состав представляет собой особый вид ассоциации, представляющий отношения часть-целое с исключительным владением частями целым.

Таким образом, в смысле UML невозможно иметь объект, который является частью двух разных композиций, поскольку право собственности больше не будет исключительным.Но вы можете использовать объект в нескольких агрегатах , которые представляют собой целые отношения, допускающие совместное владение.

В смысле ООП нет проблем с использованием одного и того же объекта в (или использовании) нескольких композициях.Композиция объекта соответствует навигации UML ассоциации .

В вашем практическом случае

Ситуация прямолинейная: A Bid имеет одинBuyer, Buyer может иметь несколько Bids, а Auction - несколько Bids.Вы можете смоделировать это с помощью простых ассоциаций:

enter image description here

Вы можете альтернативно использовать агрегацию здесь, так как можно утверждать, что существует отношение целых частей междуAuction и соответствующий Bids (лично я бы этого не увидел):

enter image description here

Однако вы не должны видетьагрегация с другой стороны, потому что между Buyer и Bid нет реального отношения целых частей: a Buyer не «состоит из нескольких Bids».

Дополнительные замечания

Вы также можете использовать здесь класс ассоциации.Но это не обязательно.И семантика была бы другой: это означало бы, что существует Bid ассоциация между Buyer и Auction:

  • Технически говоря, у вас все еще будет три класса.
  • Но фокусировка другая: Bid является принадлежностью к Buyer и Auction и не может существовать самостоятельно (например, если исчезнет покупатель)
0 голосов
/ 16 февраля 2019

Узнали ли вы об ассоциативных классах в UML?Они представляют собой объект, который создается из отношений между двумя другими классами, именно то, что вы пытаетесь отобразить.Есть много содержания, детализирующего классы ассоциации (например, Правильное использование класса ассоциации )

Таким образом, вы не должны запутываться при чтении диаграмм (что вы делали правильно, кстати), этоВам будет понятно, что существует заявка на участие в организации, которая существует только для Покупателя и Аукциона.

...