В общем
Термин «композиция» неоднозначен, и это объясняет вашу путаницу:
- В ООП композиция объекта означает использование объекта в другом объекте..
- В UML состав представляет собой особый вид ассоциации, представляющий отношения часть-целое с исключительным владением частями целым.
Таким образом, в смысле UML невозможно иметь объект, который является частью двух разных композиций, поскольку право собственности больше не будет исключительным.Но вы можете использовать объект в нескольких агрегатах , которые представляют собой целые отношения, допускающие совместное владение.
В смысле ООП нет проблем с использованием одного и того же объекта в (или использовании) нескольких композициях.Композиция объекта соответствует навигации UML ассоциации .
В вашем практическом случае
Ситуация прямолинейная: A Bid
имеет одинBuyer
, Buyer
может иметь несколько Bids
, а Auction
- несколько Bids
.Вы можете смоделировать это с помощью простых ассоциаций:
Вы можете альтернативно использовать агрегацию здесь, так как можно утверждать, что существует отношение целых частей междуAuction
и соответствующий Bids
(лично я бы этого не увидел):
![enter image description here](https://i.stack.imgur.com/DFFrh.jpg)
Однако вы не должны видетьагрегация с другой стороны, потому что между Buyer
и Bid
нет реального отношения целых частей: a Buyer
не «состоит из нескольких Bids
».
Дополнительные замечания
Вы также можете использовать здесь класс ассоциации.Но это не обязательно.И семантика была бы другой: это означало бы, что существует Bid
ассоциация между Buyer
и Auction
:
- Технически говоря, у вас все еще будет три класса.
- Но фокусировка другая:
Bid
является принадлежностью к Buyer
и Auction
и не может существовать самостоятельно (например, если исчезнет покупатель)