2012-07-06 284 views
2

我有一个表示UI小部件的模板类。这个班被称为(令人惊讶的)Widget。该类定义了graphics_type(通过typedef或类似的),其可以是cairo_tHDCCDC*或类似的东西。换句话说,Widget定义了一种称为graphics_type的类型,它用于绘制东西。表示使用UML在C++模板类中定义的typedef

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

红利问题:这里有没有任何C++程序员在这些情况下发现UML有用?

+1

你问在UML类图中如何表示'typedef'? – 2012-07-06 20:27:32

+0

不仅如此。这是一个定义为类的公共接口的一部分的typedef。我如何表达两者之间的关系? – 2012-07-06 20:53:19

+0

添加备注或评论。我看过有'typedef'类型的框''[<> | name]'的工具。我可能会使用“使用”关系和侧面的“<>”注释...你可以下载并安装BoUML(AFAIK它处理'typedef's)并逆向工程一个小例子来看看它产生了什么。 – 2012-07-06 20:56:42

回答

1

每个人对于UML的用处都有自己的答案。也许UML适合非常大的项目,但我无话可说。 在我的实践中,我发现基于UML图开发代码是无效的,因为C++中的类声明本身非常丰富和清晰,特别是如果您在类体外定义方法。制作传统的图表需要同样的时间,但没有显示出新的东西。

关于类关系图的第二件事是,如果从现有代码自动构建,它们非常好。例如,Doxygen可以做到这一点。优点是你不会花费额外的时间用于UML,并且可以轻松检查当前的实现。另外,用这种图在一张印刷的纸上手工修改是非常方便的重构。

+0

我使用UML作为文档工具。我不会从图表中生成代码。我不希望我的图表包含结构的每一个细节,我发现Doxygen输出是笨重的。相反,我的图表是我的设计的简明摘要,我可以在尝试解释提议的hiearchies时向同事展示。它不需要一个“非常大的”项目是有用的;它只需要非专业观众(其中包括我的一些同龄人)。如果您不使用UML生成代码,那么快速制作有用的图很容易。 – 2012-11-26 19:17:20

+0

嗨@MikeC, 看来你的经验与Doxygen是基于不好的例子。如果正确使用Doxygen只能显示最重要的信息。即使在代码结构中没有很好地反映这种逻辑,您也可以轻松分离和链接文档的某些部分。您可以省略不必要的细节等。 – Riga 2012-11-27 11:18:48

2

publib.boulder.ibm.com在许多主题上有很多文档,包括UML上的很多文档。他们对许多C++特定结构(包括typedef和其他)的规则几乎与@David Rodriguez所说的一样。

2

Sparx EA通过泛化将typedefs链接到别名类型。至少这是从源代码导入时会发生的情况。如果原型是<<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。