3

我有一个代表 UI 小部件的模板类。该课程被称为(令人惊讶地)Widget。该类定义graphics_type(通过typedef或类似)可以是 a cairo_t、 a HDC、 aCDC*或类似的东西。换句话说,Widget定义了一个graphics_type用于绘制东西的类型。

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

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

4

3 回答 3

3

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

typedef templateName<alias> alias;

否则,它会插入:

typedef aliasedClass alias;

我去搜索是因为我想要:

typedef aliasedClass* class_ptr;

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

选项 1:创建一个仅作为指针生成器的模板:template class _ptr { /* TMTFWIW */ }

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

我想我会选择#2。

于 2013-05-08T19:58:04.150 回答
2

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

于 2012-11-26T19:09:10.007 回答
1

对于 UML 的有用性问题,每个人都有自己的答案。也许 UML 对非常大的项目有好处,但我在这里无话可说。在我的实践中,我发现基于 UML 图开发代码是无效的,因为 C++ 中的类声明信息量很大而且本身很清晰,特别是如果您在类主体之外定义方法时。制作其他图表需要相同的时间,但没有显示任何新内容。

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

于 2012-07-07T21:52:51.560 回答