Это зависит от языка и / или семантики, которую вы хотите придать вашей конструкции.
На языке со ссылочными классами, такими как java:
- , экземпляр
B
всегда может быть общим и, следовательно, продолжать жить после смерти объекта A. Это противоречит композиции в UML. - агрегация позволит разделить B. Но, к сожалению, семантика агрегации не очень хорошо определена в UML и поэтому неоднозначна.
- нормальная ассоциация будет правильной и однозначной.
В языке с классами, основанными на значениях, таких как C ++:
- композиция будет соответствующим образом представлять совместный жизненный цикл объектов
- в вашем случае, однако, ИБ будет полиморпи c. Полиморфизм потребует указатель. Если бы вы использовали
unique_ptr<IB>
, вы бы express сочинили. Другие указатели могут разрешать совместное использование объектов, поэтому нормальное сопоставление будет лучшим представлением.
Но UML не является языком программирования. Это язык моделирования. Таким образом, вы должны express в модели семанти c, что вы хотите. Если ожидается, что объекты IB не будут совместно использоваться и не должны пережить A, то соответствующая композиция показывает это намерение. Если нет, оставайтесь открытыми.