Как два компонента могут содержать и использовать третий?
1 ответ
Часто, когда у вас есть две возможности в UML, обе они верны. Но не здесь. Боюсь, оба плохие.
Согласно действующему стандарту 2.5:
Использование - это зависимость, в которой одному NamedElement требуется другой NamedElement (или набор NamedElements) для его полной реализации или работы. Использование не определяет, как клиент использует поставщика, за исключением того факта, что поставщик используется по определению или реализации клиента.
Итак, в UML << use >> означает "должен иметь для некоторого использования". И обратите внимание, это абсолютно независимо от отношения сдерживания / включения. Объект, от которого мы зависим, может даже содержаться, поскольку не сказано, что он нам нужен для создания зависимого объекта.
Мы можем использовать компонент, который принадлежит где угодно. Но на включающей (верхней) диаграмме мы не можем показать использование. Так что не пройдет.
Что касается второго рода отношений, в том числе, здесь есть большие проблемы.
Стандартная диаграмма компонентов UML не имеет стереотипа "включить". Но разрешено использовать элементы других диаграмм.
Но компонент не является классом, это объект. Таким образом, ваш компонент C просто не может принадлежать ни A, ни B. Другая диаграмма тоже не работает. И если вы хотите, чтобы два разных объекта / компонента основывались на одном и том же классе или пакете, появляется совершенно другая диаграмма.
Таким образом, либо A, либо B имеет свой собственный экземпляр C и использует этот экземпляр. Он чистый, не заглядывая в другой компонент.
Если вы используете инструмент, который не имеет этого соединения с защитной оболочкой, используйте ассоциацию "include" из диаграммы варианта использования.
У меня также есть сильное подозрение, что вам может понадобиться не компонент, а какая-то другая схема, поскольку ваше желание поместить одну коробку в разные неестественно.