首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c/c++中实现模块化开发?

如何在c/c++中实现模块化开发?
EN

Stack Overflow用户
提问于 2010-08-23 14:11:27
回答 4查看 557关注 0票数 5

当只有两个模块( AB )时,我只能处理最简单的情况

A依赖于B,因此我将B构建为一个库,并将B的头文件包含在AE 213中,并在构建E 116AE 217时链接到E 114BE 215库。

当A和B是相互依赖的,当模块数量增加时,这将无法工作。

那么在c/c++中实现模块化开发的一般方法是什么呢?

更新

对不起,似乎我的标题是不精确的,修改后的版本是:如何将一个模块划分为多个.h.cpp文件(不是一个文件)?

EN

回答 4

Stack Overflow用户

发布于 2010-08-23 14:14:01

如果A和B是相互依赖的,则不能单独部署其中任何一个.因此,您实际上只有一个模块,而不是两个模块。(您可以重构模块,将常见的内容提取到第三个模块C中,从而使A和B都依赖于C,而不是相互依赖。)

设计良好的项目不应包含周期性模块依赖项。这保证了它的模块之间总是有一个正常的构建顺序。

更新

如何将模块划分为多个.h和.cpp文件(而不是一个文件)?

基本原理与模块级非常相似:避免循环依赖和重复定义。@Felix已经提到了这方面的基本工具:向前声明和包括警卫。我还可以通过@kotlinski对Larman书的推荐来加深对这个主题的理解。

学习好的设计需要练习,所以不要放弃,如果第一种方法看起来并不完美:-)在C++中,一个特别的痛苦是更改后的过度重新编译。为了最大限度地减少这种情况,努力确保您最依赖的事物(类、头)是最不频繁更改的。也就是说,依赖于接口(抽象类),而不是具体的实现。

此外,努力在逻辑分区(类/组件)和物理分区(头/cpp文件)之间保持健康的关系。典型的方法是将每个类定义放入一个单独的头文件中,并将其实现(如果适用)为一个单独的cpp文件。但是,您可能更喜欢在单个标头中定义紧密耦合的类(组件),以强调它们的逻辑关系。

票数 6
EN

Stack Overflow用户

发布于 2010-08-23 14:17:52

一般来说,拥有两个相互依赖的模块是一种设计味。你可以

1)将模块合并成一个新的C,或

2)将一个公共子集提取到I中,使A和B依赖于I,而不是相互依赖。

更新

使用前向声明和#杂注一次或#include/#ifndef保护:

我什么时候可以使用前向声明?

我应该在标题中使用#include吗?

票数 5
EN

Stack Overflow用户

发布于 2010-08-23 14:18:25

解决办法是确保模块形成有向无圈图..。也就是说,如果A依赖于B,那么确保B不依赖于A,这需要很多的纪律,但从长远来看是值得的。

如果你对这些东西感兴趣,大型C++软件设计是个不错的读物。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3548357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档