C++ 大规模程序设计 之 包
来源:互联网 发布:linux和windows哪个好 编辑:程序博客网 时间:2024/06/05 05:16
概述
包是将相关组件的集合聚集为一个逻辑上内聚的物理单位。它是一个自顶向下设计的自然结果,充当了体系结构设计者的一个抽象和开发者的一个分区。
包通常指一个非循环的,层次化的组件集合,这些组件有共同的语义化的目标。 物理上包由一个头文件的集合和一个包含相应目标文件(.o)的库文件组成。
包之间也会存在依赖,例如 包A中的某个组件依赖于包B,则隐含着包A依赖于包B。
包有自己的前缀,前缀的使用分隔了全局名称空间,避免了集成时的冲突。
名字空间是另一个控制名称冲突的手段,它希望解决的问题是不同供应商提供了兼容的库,但没有中央权限可以控制注册前缀,此时全局变量有可能冲突的问题。它与前缀是两种不同的手段,一般是不会相互替代的。
包前缀:主要是针对公司内部开发的库,对前缀名称可以控制。
名字空间:主要是针对使用第三方公司开发的库,没法控制其前缀名称时的一种解决手段。
包的层次化
让包层次化主要避免的也是包循环依赖的问题。
循环依赖会导致的问题
1) 开发: 程序结构清晰,不会导致系统连接无用的组件,降低效率。
2) 推广: 系统不会因循环依赖导致引入无用的附加组件。
3) 易用性: 用户使用包做开发时,也不会引入无用的组件连接。
4) 可靠性: 有循环依赖关系的系统不利于测试。
包层次化技术
包层次化技术与组件的层次化技术类似。
可以采用上升下降方式。
系统中由于 B1->A2 A1->B2的依赖关系导致了包的相互依赖。
此时可以将A1 B1上升,把A2 B2 下降形成新的包从而解除包的依赖关系。
这里通过一升一降,形成了一个新包C,从而解除了包A 与 包B之间的循环依赖。
包的发布
包发布的目录结构可以参考下面的方式。
发布的内容包括,依赖的文件,源码,头文件,和目标文件。
包的使用
大型系统中通常没有单个的系统可运行程序,我们可以为局部的子系统创建main函数,来初始化环境,对局部的模块进行测试。
在测试或使用包时,如果系统较大,初始化会花费较长时间,此时可以采用不同的初始化策略。
- 唤醒初始化 : 对于静态的基本数据类型,可以在装载时被初始化。
- 显示的init函数:为模块定义init函数,优点比较灵活,缺点是使用过程中容易出错。
- 灵巧计数器:为类创建一个计数器,当新增一个对象时,计数器加1,当释放一个对象时,计数器减1。
- 每次检查:相当于即时初始化,每次创建后检查,并使用。
- C++ 大规模程序设计 之 包
- C++ 大规模程序设计 之 组件
- C++ 大规模程序设计 之 绝缘
- 一句话读书之大规模c++程序设计
- C++ 大规模程序设计 之 全局名称空间
- C++ 大规模程序设计 之 物理层次结构
- C++ 大规模程序设计 之 层次化
- C++大规模程序设计 笔记
- 大规模c++程序设计摘要
- 《大规模c++程序设计》笔记
- C++大规模程序设计
- 大规模C++程序设计-概述
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之指针
- Android 5.0及更高系统使用AIDL的问题
- 跨平台CMake的编写
- Hadoop Ls命令增加显示条数限制参数
- Java NIO 系列教程
- 人脉是如何积聚的
- C++ 大规模程序设计 之 包
- 12c可插拔 数据库CDB与pdb管理总结
- 设计模式:转载Head First设计模式读书笔记
- 最短路之单源最短路
- Activity生命周期、回调方法及状态详解
- Java基础题 你能对几道?
- 数据结构与网络
- 安卓日记——简述SimpleAdapter用法
- graphana从2.5开始也可以支持ES了