Warm tip: This article is reproduced from serverfault.com, please click

architecture-重用UML组件图中的子组件

(architecture - Reuse sub-components in UML component diagram)

发布于 2020-12-05 10:50:41

简短说明:目前,我在Sparx Enterprise Architect中执行了很多白盒建模。但是,我想知道EA是否不允许我两次添加一个子组件。是UML建模问题还是工具问题?

插图:为了解释我的话题,让我们假设我们要对公寓进行建模。该公寓包括房间,即浴室和客厅。两种房间都包括一扇门。门基本上是相等的-同一制造商,同一产品。

目标:房间的门应该相等。因此,我们不应该单独对它们建模,而要重用单个门组件(从我的角度来看)。下图显示了我的设置:

在此处输入图片说明

现在,我要创建组件图。我要实现的目标如下所示。你将猜测我无法获得所需的模型。相反,红色组件存在问题。

在此处输入图片说明

问题:对于组件图,我总是选择将组件作为链接插入Sparx Enterprise Architect中。当我第二次尝试粘贴门(子)组件时,会收到以下反馈:

在此处输入图片说明

注意:根据我的经验,我知道来自Sparx Enterprise Architect的错误消息通常表示某些建模错误。我在互联网上阅读了很多书,甚至买了一本有关该主题的详尽的UML书。不幸的是,在这两个资源中,我都找不到能够解决我的建模问题的解决方案。解决此问题的唯一方法是将门组件作为实例而不是链接插入到组件图中,或深复制门组件。但是,这两种选择都不自然,我认为它们会在进一步的建模过程中引起后续问题。

Questioner
Jan Rothkegel
Viewed
0
Axel Scheithauer 2020-12-08 15:15:22

你显示的图是打包元素的表示法包装没有语义。你可以在模型浏览器和图表中的任意位置移动元素。它仅能帮助你保持模型井井有条。为此有意义的是,每个元件只能容纳在一个包装元件中。因此,不可能在两个房间中都显示门。

据我了解,你想建模,浴室和客厅都有一部分,即门类型。为此,UML使用复合结构图。它允许显示组件和类的内部结构。 组件房 在此示例中,复合结构图显示在房屋部件的隔间中,该隔室在部件图中显示。如你所见,房屋的子组件也可以显示其内部零件。这适用于任何级别的嵌套。当然,如果该图太大,你也可以使用专用的复合结构图,该图仅显示一个组件的内部结构。

现在,有些人将带有冒号的所有内容称为“实例”。在某种程度上,他们是对的。每个结构图的语义是它告诉我们允许的实例是什么-并且实际上不依赖冒号。仅在图上,我们才能知道实例是其他实例的一部分:门的两个实例是浴室和客厅的一个实例的一部分,而浴室和客厅又是房屋的一个实例的一部分。建模者选择不显示房屋所属于的实例类型。它可以是城市,城市可以是国家的一部分,国家可以是国家的一部分,依此类推。它实际上取决于图的焦点(以及模型的目的)。所示图仅说明了所有内容房屋的实例,无论它是其中的一部分。因此,顶层没有冒号。

我没有使用Enterprise Architect对此建模。但是,由于该表示法完全处于UML规范的范围内,因此它应该是可能的。

我假设你正在谈论软件组件。如果你在谈论物理房间,则应考虑使用SysML,它为建模事物的内部结构提供了更多的可能性。