模块独立性原理
模块独立程度的度量标准
(1)耦合 不同模块之间的互联程度的度量
2)内聚 模块内部彼此结合的紧密程度的度量
耦合的强弱取决于什么?
► 模块之间接口的复杂程度
► 调用模块的方式
► 通过接口的数据
怎样具体区分模块间耦合程度的强弱呢?
① 非直接耦合(Nondirect Coupling)
► 两个模块没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
► 非直接耦合的模块独立性最强。
② 数据耦合(Data Coupling)
► 两个模块彼此间通过参数来交换信息,而且交换的信息仅仅是数据。
► 数据耦合属于松散耦合。
③ 特征耦合(Stamp Coupling)
► 当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
④ 控制耦合(Control Coupling)
► 两个模块彼此间通过参数来交换信息,如果传递的信息中有控制信息,这种耦合称为控制耦合。
⑤ 公共环境耦合(Common Coupling)
► 当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。
► 公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
► 公共耦合的复杂程度随耦合模块的个数增加而显著增加。
► 若只是两模块间有公共数据环境,则公共耦合有两种情况:松散公共耦合和紧密公共耦合。
⑥ 内容耦合(Content Coupling)
► 一个模块直接访问另一个模块的内部数据;
► 一个模块不通过正常入口转到另一模块内部;
► 两个模块有一部分程序代码重迭(只可能出现在汇编语言中);
► 一个模块有多个入口。
坚决避免使用内容耦合
★ 设计原则
① 尽量使用数据耦合,
② 少用控制耦合和特征耦合,
③ 限制公共环境耦合的范围,
④ 完全不用内容耦合。
内聚可以分为哪几类?
问题4. 怎样具体区分模块内聚程度的高低呢?
① 偶然内聚(Coincidental Cohesion)
② 逻辑内聚(Logical Cohesion)
③ 时间内聚(Classical Cohesion)
► 时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同
一时间段内执行。
► 例如,初始化模块和终止模块就是时间内聚模块。
④ 过程内聚(Procedural Cohesion)
⑤ 通信内聚(Communication Cohesion)
⑥ 顺序内聚(Sequential Cohesion)
⑦ 功能内聚(Functional Cohesion)
► 一个模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
► 功能内聚是最高程度的内聚,内聚性最强。