定义10:如果编译或连接组件y时需要组件x,则组件y DependsOn组件x。
DependsOn关系是一种物理关系,而IsA、Uses等关系是逻辑关系。物理关系作用于物理实体(文件、组件、包)之间,逻辑关系作用于逻辑实体(类、函数)之间。
定义11:如果编译y.c时需要x.h,那么组件y展示了对组件x的编译时依赖。
定义12:如果对象文件y.o(通过编译y.c产生)包含未定义的符号,因此可能在连接时直接或间接地调用x.o来辅助解析这些符号,那么就说组件y展示了对组件x的连接时依赖。
原则5:一个编译时依赖几乎总是隐含一个连接时依赖。
原则6:组件的DependsOn关系具有传递性。
原则7:定义了某个函数的组件,通常会物理依赖于定义了某个类型(那个函数使用了该类型)的任何组件。
原则8:如果一个组件定义了某个类,且该类IsA或HasA用户自定义类型,那么那个定义了类的组件总是在编译时依赖那个定义了类型的组件。
逻辑关系隐含物理依赖:IsA和HasA总是隐含编译时依赖,HoldsA和Uses可能隐含连接时依赖。
原则9:假如系统编译成功的话,仅凭由C++预处理器#include指令产生的包含图,就足以推断出系统内部的所有物理依赖。
通过工具分析、提取依赖。
指导方针6:只有当组件x直接实质的使用了定义在y中的一个类或自由运算符函数时,x才应该包含y.h。