我有一个关于元素与属性链接的问题:
问题:为什么我不能在Enterprise Architect中将对象(类的实例)连接到另一个对象(类的实例)的特定属性?
我没有看到任何不允许我这样做的UML限制。这就是我试过的:
Store
类通过两个属性Manager
和Deputy
连接到Person
类:containment
标记为By Reference
,以指示属性的值不应是标量或简单值(显示为属性旁边的星号):答案 0 :(得分:3)
不是将连接器绑定到实例的实际Attribute
(必须按照other answer中的说明手动创建),我们也可以使用带注释的连接器,其中连接器的文本由约定表示其预期用途,如下图所示:
这比其他解决方案有一些优势:
Link to Element Feature
) - 所有内容都可以通过普通UML进行建模一个缺点与另一个解决方案类似:如果类名更改,连接器注释也必须更新。另一方面,在我看来,更改类的名称不如更改属性名称。另一个缺点是整个机制依赖于约定(class.attribute
)。
对我来说,这是最好的,因为它视觉上清晰,是最快的实施方式。
答案 1 :(得分:1)
根据@Thomas的线索,我意识到我可以重新定义对象实例上的属性,以便能够将它们连接到另一个对象实例。
通过下面的脚本行,我现在可以轻松地在对象实例上重新创建所有属性:
$objectId = '{F4DB0F04-18D4-4acb-BA1D-FF55813D7559}'
$object = $ea.GetElementByGuid($objectId);
$classifier = $ea.GetElementById($object.ClassifierID);
$attrsByRef = $classifier.Attributes |? Containment -eq 'By Reference'
$attrsByRef | Select Name, AttributeGuid
Name AttributeGUID
---- -------------
Manager {614E5483-2E06-4070-AFB7-B4EDB4A981A7}
Deputy {82403A08-5E2A-4e68-B39A-6220C889C6E9}
foreach($attr in $attrsByRef)
{
$objattr = $object.Attributes.AddNew($attr.Name, $attr.Type);
$objattr.ClassifierID = $attr.ClassifierID;
$objattr.Update();
}
然后,我可以使用UI中的标准link to element feature
或API中的StyleEx
来将Person实例与正确的属性相关联:
在项目浏览器中,我现在可以看到对象下的属性:
这当然不是一个理想的解决方案,但在我看来,更好的是使用关联来为每个单一属性建模。
答案 2 :(得分:0)
非常简单:实例没有属性。一个都没有。您可以显示实例化属性的值,但这不一样。由于这个简单的原因,您无法链接连接器。
链接到功能是Sparx功能而非UML标准。您可以向Sparx发送一个功能(例如,这么多功能)请求以支持您的意愿。
无论如何,您可以使用上下文菜单中的Pin End(s)
。这会将连接器端的一个(或两个)端固定到您想要的位置。