当只有两个模块( A和B )时,我只能处理最简单的情况
A依赖于B,因此我将B构建为一个库,并将B的头文件包含在AE 213中,并在构建E 116AE 217时链接到E 114BE 215库。
当A和B是相互依赖的,当模块数量增加时,这将无法工作。
那么在c/c++中实现模块化开发的一般方法是什么呢?
更新
对不起,似乎我的标题是不精确的,修改后的版本是:如何将一个模块划分为多个.h和.cpp文件(不是一个文件)?
发布于 2010-08-23 14:14:01
如果A和B是相互依赖的,则不能单独部署其中任何一个.因此,您实际上只有一个模块,而不是两个模块。(您可以重构模块,将常见的内容提取到第三个模块C中,从而使A和B都依赖于C,而不是相互依赖。)
设计良好的项目不应包含周期性模块依赖项。这保证了它的模块之间总是有一个正常的构建顺序。
更新
如何将模块划分为多个.h和.cpp文件(而不是一个文件)?
基本原理与模块级非常相似:避免循环依赖和重复定义。@Felix已经提到了这方面的基本工具:向前声明和包括警卫。我还可以通过@kotlinski对Larman书的推荐来加深对这个主题的理解。
学习好的设计需要练习,所以不要放弃,如果第一种方法看起来并不完美:-)在C++中,一个特别的痛苦是更改后的过度重新编译。为了最大限度地减少这种情况,努力确保您最依赖的事物(类、头)是最不频繁更改的。也就是说,依赖于接口(抽象类),而不是具体的实现。
此外,努力在逻辑分区(类/组件)和物理分区(头/cpp文件)之间保持健康的关系。典型的方法是将每个类定义放入一个单独的头文件中,并将其实现(如果适用)为一个单独的cpp文件。但是,您可能更喜欢在单个标头中定义紧密耦合的类(组件),以强调它们的逻辑关系。
发布于 2010-08-23 14:17:52
一般来说,拥有两个相互依赖的模块是一种设计味。你可以
1)将模块合并成一个新的C,或
2)将一个公共子集提取到I中,使A和B依赖于I,而不是相互依赖。
更新
使用前向声明和#杂注一次或#include/#ifndef保护:
发布于 2010-08-23 14:18:25
解决办法是确保模块形成有向无圈图..。也就是说,如果A依赖于B,那么确保B不依赖于A,这需要很多的纪律,但从长远来看是值得的。
如果你对这些东西感兴趣,大型C++软件设计是个不错的读物。
https://stackoverflow.com/questions/3548357
复制相似问题