我有一个表示UI小部件的模板类。这个类被称为(令人惊讶的)Widget
。该类定义graphics_type
(通过typedef
或类似物),其可以是cairo_t
、HDC
、CDC*
或类似物。换句话说,Widget
定义了一个名为graphics_type
的类型,用于绘制素材。
如何使用UML表示Widget
和graphics_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花费额外的时间,并且可以轻松地检查当前的实现。此外,在带有这样的а图的打印纸上手工进行更改对于重构来说非常方便。