我正在创建一个可视化范例中的类图。我有一个冒险者:
typedef std::vector<A> Va;我想通过在表示法中显示std::vector<A>类型来表示这一点,但我看不出是如何实现的。

发布于 2021-12-06 14:01:17
一个刻板印象够了吗?
Visual提供了一个开箱即用的<<Typedef>>原型,如图中所示。它看起来像<<primitive>>类型。不幸的是,它没有承认typedef只是一个别名。那么,模型如何才能显示typedef的属性或操作呢?
如何在UML中显示别名?
最接近的方法是使用专门化(继承)。如果vA是vector<A>的UML专门化,那么它将具有相同的(公共)属性和操作。
但是,专门化并没有完全反映typedef的真正性质:ty对联不定义新的不同类型;它只为现有类型定义了一个新的可选名称。您可以使用任何一个别名互换
typedef int distance;
typedef int weight;
distance d=10; weight w=20;
auto s=d+w; // valid, d and w are just int在UML中记录这种关系的一个非常实用和有效的方法是为专门化定义一个原型«typedef»原型,并理解C++语义将适用于:

(模板化向量不是必需的,如果您愿意,可以从vector<A>开始)
如何定义可视化范式中的专业化原型?
首先,绘制泛化形状(继承)。
右键单击从vector<A>到vA创建的新泛化,并在上下文菜单中选择Stereotypes > Edit Stereotypes...。
然后在弹出窗口中,单击Edit Stereotypes...按钮。在新的弹出窗口中,单击Add...按钮,并在typedef中的新弹出类型中按原型。单击“确定”,然后创建新的原型,单击“确定”并将其添加到可用的原型列表中:

从现在开始,你可以很容易地选择自制的刻板印象来概括。您甚至可以决定在图中有选择地显示和隐藏构造型的专门化,同时拥有模型中的所有信息(详见注释)。
更短的路?
如果您不需要在模型中使用vA的操作和属性,而只需要一个关于真实类型的简洁提示,则可以使用标记值。这些可能与陈规定型观念有关。
例如,您可以通过添加一个名为<<Typedef>>的标记值(以Model element作为值)来丰富类的内置Model element原型。

从那时起,对于每个具有<<Typedef>>原型的类,您都可以打开它的规范并丰富选项卡“标记值”,选择模型中的其他元素(不一定在相同的图表中)。
要可视化标记值,首先需要在图表中通过上下文菜单激活它们(演示选项>显示标记值>显示非空值)。然后你就有了这样的东西:

与此无关:
您可能需要考虑使用:
using vA = std::vector<A>; // alias instead of typedef如果你认为这只是一个风格偏好的问题,我会热情地推荐你斯科特迈耶的书“有效的现代C++”,特别是专门的一节“第9项:更喜欢别名声明而不是类型”。
https://stackoverflow.com/questions/70246241
复制相似问题