Чтобы быть очень ясным: я НЕ спрашиваю разницу между этими четырьмя типами ассоциации.Я знаю, что уже есть много вопросов по этому поводу.К сожалению, на каждый из этих вопросов существует дюжина правдоподобных, но разных ответов, потому что каждый ответ основан на размышлениях о системе на другом концептуальном уровне.
Другими словами: некоторые описания (как в учебниках, в SO, так и в Интернете в целом) об этих концепциях говорят только с точки зрения концептуального представления системы на высоком уровне.Они говорят что-то вроде: «Поскольку комната не может существовать без здания, то здание« состоит из комнат »».
С другой стороны, другие говорят только с точки зрения фактического существования объектов в памяти во время выполнения.Говоря что-то вроде: «Если объект Room будет удален при удалении объекта Building, тогда Building будет« составлен »из Room».(До того, как кто-то подключится, между ними есть различие. Если другой объект содержит ссылку на этот объект Room (или ваш деструктор недостаточно подробен в C ++), то этот объект Room все еще может существовать в памяти.) Те же самые, ориентированные на время выполнения, объяснители также скажут такие вещи, как: «Если ClassA« содержит »ссылку на ClassB, но ClassB все еще может существовать без ClassA, то ClassB« объединяется в »ClassA».Технически, это просто другая сторона монеты «Объект комнаты / Строительный объект», потому что этот объект Комнаты мог существовать в памяти независимо от этого Строительного объекта, независимо от концептуального представления о том, как комнаты должны вести себя вреальный мир.
Есть даже люди, которые говорят, что для Java вообще невозможно иметь какую-либо композицию, потому что все объекты Room, «составленные» в объект Building, на самом деле являются просто ссылками, поэтому они существуют в куче, вне памятипространство для этого «составного» объекта Room, даже если этот объект Room может быть обречен на сборку мусора, как только объект Building будет удален.Если кто-то расскажет о вещах, я мог бы сказать, что настоящая комната может существовать без реального здания, потому что можно разрушить настоящее здание, оставив только одну эту комнату стоящей.
Итак,как вы можете видеть, является ли этот Строительный объект составом или совокупностью этих объектов Room, полностью зависит от вашей конкретной реализации, и одна ошибка в кодировании может переключить его с одного на другой.Что-то подсказывает мне, что UML не предназначен для достижения такого уровня детализации и специфики.Вот для чего предназначен код.
Итак, мой вопрос касается фундаментальной цели UML: при создании диаграмм UML я должен думать только на более высоком концептуальном уровне помещений и зданий в целом?Или я должен думать о том, как я планирую реализовать этот конкретный код?
Мой вопрос также не о вашем мнении о том, что должно быть правильным концептуальным уровнем для рассмотрения.Я хочу знать, есть ли принятый промышленный стандарт для этого.Если нет общепринятого отраслевого стандарта, просто скажите.Если отраслевой стандарт состоит в том, что люди сами решают, какой уровень они рассматривают, просто скажите.Если не существует отраслевого стандарта о том, существует ли вообще отраслевой стандарт, просто укажите это.
Мне хорошо известно, что ответы на этот вопрос могут легко перерасти в мнения.Пожалуйста, постарайтесь избежать этого.Я хочу знать, существуют ли существующие спецификации (или действительно авторитетные авторы), которые так или иначе указывают.