读书频道 > 网站 > 网页设计 > 大规模C++程序设计
0.2.1 循环依赖
15-04-24    下载编辑
收藏    我要投稿   

本文所属图书 > 大规模C++程序设计

《大规模C++程序设计》由世界级软件开发大师John Lakos亲笔撰写,是C++程序设计领域最有影响力的著作之一。作者结合自己多年从事大规模C++项目的开发经验,详细介绍了大规模C++程序设计涉及的一系列概念、理论、立即去当当网订购
作为一名软件专业人士,你可能已经遇到过这样的情况:第一次查看一个软件系统,似乎找不到一个合理的起点或者自身有意义的系统片段。不能独立理解或者使用系统的任何部分,这就是循环依赖设计的一种症状。C++对象有一种显著的相互混杂的倾向。这种紧密物理耦合的示意如图0-1所示。一个电路由诸多元件和导线构成。因此,类Circuit知道Element和Wire的定义。一个元件知道它所属的电路,而且可以分辨出是否与特定导线相连。因此类Element也知道Circuit和Wire。最后,一根导线也可以链接到一个元件或者一个电路的端子。为了可以完成电路的工作,类Wire必须同时访问Element和Circuit的定义。

Circuit、Element和Wire这三种对象类型的定义驻留在不同的物理组件(编译单元)中,以提高模块化程度。尽管这些单个类型的实现通过它们的接口完全封装,然而,每个部件的.c文件都必须包含其他两个组件的头文件,结果导致这三个组件的依赖图是循环的。也就是说,在没有其他两个组件的情况下,没有一个组件可以单独使用或测试。

草率构建的大型系统因为循环依赖往往会紧密耦合并且强烈抵抗分解。支持这样的系统会是一场噩梦,而且对其进行有效的模块化测试通常是不可能的。

电子设计数据库的一个早期版本是一个典型的例子。当时,该电子设计数据库的作者没有意识到在物理设计中需要避免循环依赖。结果得到一个相互依赖的包含了数以百计的类和数千个函数的文件集合,除了把它当作一个单独的模块外,根本无法使用,更无法测试。这个系统拥有极差的可靠性,并被证明无法实现扩展或者维护,最终不得不被抛弃并且重新编写。

相比之下,层次化物理设计(即没有循环相互依赖)相对易于理解、易于测试、便于增量式的重用。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站