Uml 零件和端口的含义? 我有一个包含内部C++类和一些C++类的.LIB文件是软件库提供的功能的接口。

Uml 零件和端口的含义? 我有一个包含内部C++类和一些C++类的.LIB文件是软件库提供的功能的接口。,uml,enterprise-architect,Uml,Enterprise Architect,我应该如何用UML来说明这一点 使用EnterpriseArchitect,我尝试键入“Component”(作为简单链接粘贴到组件图中),然后将该库的内部类从模型树拖放到该组件矩形中作为元素类型复合部分,将该库的接口类拖放到端口。现在奇怪的是,模型树包含了一类对象实例,称为UML类型“class”的Part1和Port1,这是毫无意义的,因为软件库没有实例化,它只是通过.lib文件提供类,就像一个池。我认为UML元素类型“组件”在这里是不对的,是吗? 如果我使用“Package”,也会发生同样

我应该如何用UML来说明这一点

使用EnterpriseArchitect,我尝试键入“Component”(作为简单链接粘贴到组件图中),然后将该库的内部类从模型树拖放到该组件矩形中作为元素类型复合部分,将该库的接口类拖放到端口。现在奇怪的是,模型树包含了一类对象实例,称为UML类型“class”的Part1和Port1,这是毫无意义的,因为软件库没有实例化,它只是通过.lib文件提供类,就像一个池。我认为UML元素类型“组件”在这里是不对的,是吗?
如果我使用“Package”,也会发生同样的情况,在这里,部件和端口变成类似对象实例的东西,尽管库中的类不是这样。

这并不奇怪。您碰巧删除了一个类作为一部分(在EA术语中)

那实际上是一种财产。只需打开其属性:

参见第页的UML2.5。147:

9.9.17财产[类别]

9.9.17.1说明

属性是一种结构特征。ownedAttribute与分类器(关联除外)相关的属性表示属性,也可能表示关联结束

我可能只是把它们作为链接放到放大的组件YMMV中,作为类出现

作为端口删除的类将显示为名称所示的内容。所以这里没有混乱。不管怎样,我也会把它作为链接放下来,只显示内容。此外,我可能会用
或类似的东西对组件本身进行定型。这是因为您实际上在编译时使用lib来提取所需的部分,而它本身并不能作为组件工作。不过,库有一个接口,即提取其内部的编译类模块


啊,正如@muszeo所说:使用ctrl-drag来显示上面的对话框。

在我对O/p的评论之后,我会做如下操作。请注意,我可能不会在同一个图中描述所有这些内容,例如,我可能会在一个单独的图中显示包的类内容,这样就不会如此混乱。但逻辑是一样的

更新:在下面的评论之后,我添加了这个图表,它说明了表示这个的另一种方式。我认为在某些情况下,我已经看到代表团是一个依赖关系,而不是一个引用关联。但是嘿,呵呵。在内部,组件通过所需/提供的接口表示为彼此之间的交互(尽管在下面的模型中没有显示这一点,但我们只说明了一个内部组件)


Sparx EA中有一个设置,当您拖放到图表时,它将为您创建一个实例,而不是绘制类型。您可以更改此设置。从内存中,当您拖放时按住CTL键会打开一个窗口,您可以在其中选择所发生的事情。@muszeo:当我在d'n'd期间拖放时,一个对话框会给我一个选择:端口/部分/两者都没有。我可以选择任何我想要的,在模型树包含该类的对象之后(如我的问题中所述),并且对象创建是错误的。我只是认为我可以将公共类作为端口,将内部私有助手类作为一部分。当将组件用作软件库(.lib)时,可能我没有正确理解或使用术语“端口”和“部件”。无论如何,我没有这些类的实例,库只是提供了在运行时使用的类。我想我明白你的意思了。您希望对逻辑结构进行建模。该组件是MOF(as is类)中分类器的派生。也许您希望使用类建模语义来说明接口(您作为端口在逻辑上建模的是接口)和组件的组合结构(使用例如组合的类结构).端口不是接口--端口提供了一个交互点,通过它可以提供/需要接口。因此,端口应该实现接口(接口原型类),并委托给内部类来提供行为。所以你会放弃你的接口类,而不是作为一个端口,而是作为一个接口,然后让一个端口实现它。@muszeo我问自己,在软件开发的UML建模世界中,通过端口实现接口有什么意义。。。无论如何,谢谢你的回答,尽管我不明白你所说的“组件的组成结构”是什么意思,也许你可以用软件开发中的一个好例子来解释它。正如问题中所描述的,奇怪的是drag'n'drop创建了一个drag类的对象,并将该新对象作为组件的成员应用。这就是我说的“胡说八道”的意思,因为如果库只提供类,我就没有类的对象。此外,在d'n'd期间按住CTRL键不会改变任何事情。它仍然只是要求选择端口/部件/在我的版本EA 9.3中两者都不是。9.3(?)中的选项“属性”不可用。9.3仅通过单选按钮支持端口和部件。这个部分相当于后来EA版本下拉列表中的属性(不确定这实际上是什么时候改变的,因为我昨天在一个新的Windoze安装之后删除了所有其他EA安装)。若要创建链接,请先将其放置在空白处,然后将其拖到上方。您应该改为使用从SecurePort到CalculationEngine上的端口的委托关系。是的,事实上,我认为您在组合组件端口委托给内部组件的上下文中是正确的,尽管我看到了这两种方法。我添加了第二个图像进行比较。我认为正确的方法是委派端口->端口,而不是端口->接口。至少,我是这么做的