使用UML表示在C++模板类中定义的typedef

Represent a typedef defined in a C++ template class using UML

本文关键字:定义 typedef UML 表示 C++ 使用      更新时间:2023-10-16

我有一个表示UI小部件的模板类。这个类被称为(令人惊讶的)Widget。该类定义graphics_type(通过typedef或类似物),其可以是cairo_tHDCCDC*或类似物。换句话说,Widget定义了一个名为graphics_type的类型,用于绘制素材。

如何使用UML表示Widgetgraphics_type之间的关系?

额外的问题:这里有C++程序员发现UML在这些情况下有用吗?

Sparx EA通过泛化将typedef链接到别名类型。至少当您从源代码导入时会发生这种情况。如果构造型是<<typedef>>,则C++生成模板将覆盖Class。如果typedef使用模板,EA插入:

typedef templateName<alias> alias;

否则,它会插入:

typedef aliasedClass alias;

我去搜索是因为我想要:

typedef aliasedClass* class_ptr;

我不知道如何在UML中表达指针部分。我希望能找到一些标准的表达方式,但没有运气。

选项1:创建一个只是指针生成器的模板:模板类_ptr{/*TMTFWIW*/}

选项2:在PIM到C++PSM转换中使用标记插入*

我想我会选择#2。

publib.boulder.ibm.com有大量关于许多主题的文档,包括相当多关于UML的文档。他们对许多C++特定构造的规则,包括typedef和其他构造,几乎就像@David Rodriguez所说的那样。

对于UML的有用性问题,每个都有自己的答案。也许UML适用于非常大的项目,但我在这里没有什么要说的。在我的实践中,我发现基于UML图开发代码是无效的,因为C++中的类声明信息量很大,而且本身很清晰,尤其是当您在类体之外定义方法时。制作传统图表需要同样的时间,但并没有显示出什么新的东西。

类关系图的第二点是,如果从现有代码中自动构建,它们会非常好。例如,Doxygen可以做到这一点。好处是您不需要为UML花费额外的时间,并且可以轻松地检查当前的实现。此外,在带有这样的а图的打印纸上手工进行更改对于重构来说非常方便。