1

我正在将 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并声明了使用的类,我认为这就是所谓的“前向声明”(如果我错了,请纠正我)无论如何它终于编译了,我将开始测试。

如果您有任何意见,那么您可以添加它们。

4

1 回答 1

0

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

  • 预订应该更好地导航到会员。倒退也可以。但是 Reservation 应该有 Member 实例作为属性。这是更简单的方法。

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

另一个问题:

  • Title-DVD 聚合有正确的方向,但它应该是 Composite,因为没有没有 Title 的 DVD。

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

至于代码工程,请下载VP UML Enterprise“测试版”和/或Sparx的Enterprise Architect,eval专业版。他们都可以用 C++ 进行代码工程。

于 2014-02-10T21:38:13.050 回答