一个组件就是物理设计的最小单位。组件是一个不可分割的物理单位。严格地有一个头文件和一个实现文件构成。
一个组件的物理接口就是它的头文件中的所有东西。
如果在一个组件的任何地方通过名称引用了一个类型,则称在这个组件的实现中使用了这个类型。
我们必须考虑在物理接口上需要暴露多少实现细节,而且必须决定组件会依赖于哪些其他的组件,在这些组件中有哪些
变化会对我们自己的组件及其客户程序产生影响。
物理设计规则:
一,在一个组件内部声明的逻辑实体不应该在该组件之外定义。
二,组成一个组件的实现文件和头文件的根名称应该严格匹配。
三,每个组件的实现文件都应该将包含它自己的头文件的语句作为第一行有效语句。
四,客户程序应该包含直接提供了所需类型定义的头文件,除了非私有继承,应避免依赖一个头文件去包含另外一个头文件。
五,在一个组件的实现文件中,避免使用有外部连接并且没有在相应的头文件中明确声明的定义。
六, 避免通过一个局部声明来访问另一个组件中带有外部链接的定义,而是要包含那个组件的头文件。
依赖关系:
一个编译时依赖总是隐含一个连接时依赖。
只有当组件x直接实质地使用了定义在y中的一个类或自由运算符函数时,x才应包含y.h.
避免把(远距离)友元关系授权给定义在另一个组件中的一个逻辑实体。
具备友元关系定义在一个组件中不影响封装。
友元关系影响访问特权但不影响依赖。