Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 表示在C+中定义的类型定义+;使用UML的模板类_C++_Templates_Uml_Generic Programming - Fatal编程技术网

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

C++ 表示在C+中定义的类型定义+;使用UML的模板类,c++,templates,uml,generic-programming,C++,Templates,Uml,Generic Programming,我有一个表示UI小部件的模板类。该类被称为(令人惊讶的)Widget。该类定义了graphics\u type(通过typedef或类似工具),可以是cairo\u t、HDC、CDC*或类似工具。换句话说,Widget定义了一个名为graphics\u type的类型,它用于绘图 如何使用UML表示小部件和图形类型之间的关系 奖金问题:这里的C++程序员都认为UML在这些情况下有用吗? 每个人都有自己对UML有用性问题的答案。也许UML对于非常大的项目是好的,但是我在这里没有什么要说的。 在我

我有一个表示UI小部件的模板类。该类被称为(令人惊讶的)
Widget
。该类定义了
graphics\u type
(通过
typedef
或类似工具),可以是
cairo\u t
HDC
CDC*
或类似工具。换句话说,
Widget
定义了一个名为
graphics\u type
的类型,它用于绘图

如何使用UML表示
小部件
图形类型
之间的关系


奖金问题:这里的C++程序员都认为UML在这些情况下有用吗?

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


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

publib.boulder.ibm.com有大量关于许多主题的文档,包括大量关于UML的文档。他们对于许多特定于C++的构造(包括typedef和其他构造)的规则与@David Rodriguez所说的非常相似。

Sparx EA通过泛化将typedef链接到别名类型。至少从源代码导入时会发生这种情况。如果生成的刻板字是“代码> < /代码>,C++生成模板将重写类。如果typedef使用模板,EA将插入:

typedef templateName<alias> alias;
我去搜索是因为我想要:

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

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

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


我想我会选择#2。

你是在问如何在UML类图中表示
typedef
?不仅如此。这是定义为类的公共接口的一部分的typedef。如何表示两者之间的关系?添加注释或注释。我见过一些工具有一个
typedef
类型的框
[| name]
。我可能会使用一个
uses
关系和一个
注释在旁边。。。你可以下载和安装BoUML(AFAIK处理代码< TyPulfF s),并反向设计一个小例子来查看它生成的内容。@ AgnelKurian A<代码> TyPulf只是一个名称替换,是另一种类型,是C++语言的特性。UML被认为是语言不可知论的,它被认为完全忽略了任何特定于语言的特性。这就是说,我会使用原始类(例如,
HDC
),可能会添加一个关于类被
typedef
编辑的简短注释,但不多。至于类之间的关系,只需使用通常的聚合/组合(适合您的设计的任何东西)。我当然可以看到能够很好地表示typedef的好处。例如,如果您要定义一个回调,您不能真正将其表示为一个类,但仍然可以直观地看到:(
typedefint(*foo)(Bar*)
,其中
foo
是您正在创建的别名)。我想知道是否有人想出了一个方法来代表这一点。虽然我并不认为UML一直都是必要的,但在勾勒出一个模糊的算法时,在编码之前玩一个图表是很好的,这样你就有了某种蓝图。我使用UML作为文档工具。我不会从图表中生成代码。我不希望我的图表包含结构的每一个细节,我发现Doxygen输出很难处理。相反,我的图表是我的设计的简明摘要,当我试图解释提议的架构时,可以向我的同行展示。不需要一个“非常大”的项目就可以发挥作用;它只需要一个非专家观众(包括我的一些同行)。如果你不使用UML来生成代码,那么快速绘制有用的图表是非常容易的。如果使用得当,强氧剂只能显示最重要的信息。您可以轻松地分离和链接文档的各个部分,即使代码结构中没有很好地反映这种逻辑。你可以省略不必要的细节等等。
typedef aliasedClass* class_ptr;