将UML类图转换为C ++代码(VS 2012)

时间:2014-02-10 09:06:26

标签: class uml diagram cyclic-dependency

我正在使用VS2012开始我们从头开始的课程项目,我们将使用C ++创建这样的东西(我认为聚合部分是相反的):

https://www.dropbox.com/s/w2zh7yltbups6cm/class.png

好吧,我们已经在纸上写了,为每个类写了没有问题的代码,除了我们无法测试,因为每个类依赖于当时没有完成的另一个类。 简而言之:每个类都有自己未经测试的代码,VS没有检测到任何错误,根据我们之前的经验,我们知道代码是正确的,无论如何都没有语法错误。

当我开始编译大约500个错误时,其中一些错误在“time.h”中出现,我认为编译器出了问题,尝试切换到C :: B并查看它是否有效但是我需要一个不同的编译器,我没有时间下载任何大文件,认真,2天内的截止日期和互联网速度很糟糕。

在这里进行一些研究(并在谷歌上搜索)我将其缩小为循环依赖项并且我了解到我可以在VS中绘制图并获取代码文件,不幸的是,它在C#中实现,而我有一个C ++代码(它有是C ++)。

如何在C ++中实现此图?哪个类应该包含哪些标题? 我怎么能在将来避免这种情况?


编辑: 通过删除所有依赖项并禁用预编译的头文件来解决它(不知道我是否必须),然后我将每个.h包含在其相应的.cpp中,然后我将每个.h中包含它需要使用的每个头文件。 所有这些并没有真正解决我的问题,这是宣言! 我对每个标题做了#ifndef myclass ,#define myclass 并声明了使用过的类,我认为这就是所谓的“前向声明”(如果我错了,请纠正我) 无论如何它终于编译了,我将开始测试。

如果您有任何评论,可以添加它们。

1 个答案:

答案 0 :(得分:0)

循环“依赖”可以。为什么不?因为它们不是dependencies,而是具有可见导航性的associations。但是你在这里遇到了一些问题。

  • 预订最好导航到会员。落后也可能。但是Reservation应该将Member实例作为属性。这是更简单的方式。

  • 此外,Rental是DVD与客户之间关联的类别表示。并且应该将它们的实例作为属性。再次,后退导航是可能的,但你需要它吗?也许

另一个问题:

  • 标题-DVD聚合具有正确的方向,但它应该是复合的,因为没有没有标题的DVD。

测试:您可以先进行单元测试,然后通过模拟将其与其他类隔离。调试后开始用实际类替换mocks。之后尝试单元测试而不进行模拟,然后进行正常的自动测试,自动输入/输出/比较。

对于代码工程,下载VP UML企业“for test version”和/或Sparx的Enterprise Architect,eval专业版。他们都可以用C ++进行代码工程。