衡量模块独立性可以由两个定性标准即耦合和内聚来衡量。
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度,内聚衡量一个模块内部各个元素彼此结合的紧密程度。
在我们的软件设计中,我们追求的目标是高聚合低耦合。
内聚:
>定义:
又称块内联系,标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简 单地说,理想内聚制作一件事情。
内聚的概念是Constantine、Yourdon、Stevens等人提出的。按他们的观点,把内聚按紧密程度从低到高排列次序为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。但是紧密程度的增长是非线性的。偶然内聚和逻辑内聚的模块联系松散,后面几种内聚相差不多,功能内聚一个功能、独立性强、内部结构紧密,是最理想的内聚。
>分类:(后面括号数字越大越好)
A.高内聚:
a.顺序内聚:如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一 个成分的输入。(6)
b.功能内聚:模块的所有成分对于完成单一的功能都是必须的。(7)
B.中内聚:
a.过程内聚:如果一个模块内的处理元素是相关的,而且必须经过特定的次序执行。(4)
b.通信内聚:如果一个模块的所有成分都操作同一数据集或生成同一数据集。(5)
C.低内聚:
a.偶然内聚:如果一个模块的各成分之间毫无关系,这些任务彼此间即使有关系,关系也是很 松散的。(1)
b.逻辑内聚:几个逻辑上相关的功能被放在同一模块中。(2)
c.时间内聚:如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能 只是因为时间因素关联在一起。(3)
耦合:
>定义:
又称块间联系,是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间的复杂程度,进入或访问一个模块的点,以及连通接口的数据。
>分类:(后面括号数字越小越好)
A.数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。(2)
B.控制耦合:若传递的参数中含有控制信息。(4)
C.特征耦合:当把整个数据结构作为参数传递而被调用的模块只是用其中一部分数据元素时。()
D.公共耦合:模块间存在着全局变量、公共数据区或可共享的文件等。(6)
E.标记耦合:如果模块间传送的参数包含着复合数据结构。(3)
F.外部耦合:当若干模块与同一个外部环境关联。(5)
G.内容耦合:模块间存在着一个模块直接转入另一模块的内部或一个模块直接使用另一模块的数 据或控制信息。(7)
H.非直接耦合:两模块间彼此无任何交互。(1)