我有一个代表 UI 小部件的模板类。该课程被称为(令人惊讶地)Widget
。该类定义graphics_type
(通过typedef
或类似)可以是 a cairo_t
、 a HDC
、 aCDC*
或类似的东西。换句话说,Widget
定义了一个graphics_type
用于绘制东西的类型。
我如何表示Widget
和graphics_type
使用 UML 之间的关系?
额外的问题:这里有没有 C++ 程序员发现 UML 在这些情况下有用?
我有一个代表 UI 小部件的模板类。该课程被称为(令人惊讶地)Widget
。该类定义graphics_type
(通过typedef
或类似)可以是 a cairo_t
、 a HDC
、 aCDC*
或类似的东西。换句话说,Widget
定义了一个graphics_type
用于绘制东西的类型。
我如何表示Widget
和graphics_type
使用 UML 之间的关系?
额外的问题:这里有没有 C++ 程序员发现 UML 在这些情况下有用?
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。
publib.boulder.ibm.com 有很多关于许多主题的文档,包括很多关于 UML 的文档。他们对许多特定于 C++ 的构造(包括 typedef 和其他构造)的规则几乎就像@David Rodriguez 所说的那样。
对于 UML 的有用性问题,每个人都有自己的答案。也许 UML 对非常大的项目有好处,但我在这里无话可说。在我的实践中,我发现基于 UML 图开发代码是无效的,因为 C++ 中的类声明信息量很大而且本身很清晰,特别是如果您在类主体之外定义方法时。制作其他图表需要相同的时间,但没有显示任何新内容。
关于类关系图的第二件事是,如果从现有代码自动构建它们,它们会非常好。例如,Doxygen 可以做到这一点。优点是您无需为 UML 花费额外的时间,并且可以轻松检查当前的实现。此外,在带有此类图表的打印纸上手动进行更改对于重构非常方便。