内聚耦合
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 模块的独立性
①
模块独立性的概念
模块完成独立的功能 符合信息隐蔽和信息局部化原则 模块间关连和依赖程度尽量小
②
模块独立性的度量
模块独立性取决于模块的内部和外部特征。
SD方法提出的定性的度量标准: 模块自身的内聚性 模块之间的耦合性
耦合----模块之间的依赖程度 • 内容耦合:一个模块直接修改另一个模块的内容 • 公共耦合:两个以上的模块共同引用一个全局数据 •外部耦合:若允许一组模块访问同一个全局变量 • 控制耦合:接收模块的动作依赖于控制信号 • 标记耦合:两个模块接口的参数包含相同的内部结构 • 数据耦合:仅是模块之间的数据传递 •非直接耦合:模块之间没有消息传递 内聚----模块内部各成分之间的关联程度 • 偶然内聚:各成分之间并没有关系,只是把分散在多处的功能合在一起
两个模块没有直接关系(模快1和模快2),模块独立性 最强。
模块1
模块2
模块3
模块4
(2) 数据耦合
一模块调用另一模块时,被调用模块的输入、 输出都是简单的数据,属松散耦合。
数据耦合举例
开发票 单价 数量
金额
计算水费
数据耦合举例
计算水电费
用水量
水费
用电量
电费 计算电费
计算Hale Waihona Puke Baidu费
(3) 标记耦合(特征耦合)
通信内聚模块例
开领 发票 书单
登记 售书
领书单
删除
文件
修改
售 书 登记表
(6)顺序内聚
一个内部成分的输出是另一个内部成分的输入, 将它们合起来。
顺序内聚模块
建立方程组系数矩阵
高斯消去法 回 代
高斯消去法解题流程
(7) 功能内聚
模块仅包括为完成某个功能所必须的所有成分。 ( 模块所有成分共同完成一个功能,缺一不可 ) 内聚性最强
耦合、内聚与模块独立性关系
耦合与内聚都是模块独立性的定性标准,都反映 模块独立性的良好程度。但耦合是直接的主导因 素,内聚则辅助耦合共同对模块独立性进行衡量。
如两个模块通过传递数据结构(不是简单数据, 而是记录、数组等)加以联系,或都与一个数据 结构有关系, 则称这两个模块间存在标记耦合。
标记耦合举例 计算水电费
住户情况
计算水费
水费
住户情况
电费
计算电费
“住户情况”是一个数据结构,图中模块都与此数据结 构有关。 “计算水费”和“计算电费”本无关,由于引用了此数 据结构产生依赖关系,它们之间也是标记偶合。
接口复杂性与耦合类型的关系: 直接引用 接口方式 过程调用语句
内容耦合 其它耦合
数据耦合 标记耦合 控制耦合
接 数据结构,变 口 量名作参数 复 接口数据 的复杂性 开关量,起 杂 控制变量作用 性
全程变量 公用数据区 无接口关系
数据项作参数
外部耦合
公共耦合
非直接耦合
内聚与耦合密切相关,同其它模块强耦合的模块 意味着弱内聚,强内聚模块意味着与其它模块间 松散耦合。 设计目标:力争强内聚、弱耦合。
(2) 逻辑内聚
把几种相关功能(逻辑上相似的功能)组合在一 模块内,每次调用由传给模块的参数确定执行 哪种功能。
逻辑内聚模块
A
B
C
公用代码段
E
F
G
E、F、G逻辑 功能相似,组 成新模块EFG
A1
B1
C1
A
B EFG
C
公用代码段
EFG模块内部逻辑
缺点:增强了耦合程度(控制耦合)不易修改, 效率低。
特征耦合 通过数据结 构交换数据
模块4 控制耦合 模块之间传递 的是控制信息
模块A
模块L 模块1
模块B
模块C
模块D 全局性数据结构 公共耦合
模块N
T 全 局 性简单变量 外部耦合 S1 Flag=1? F S2
紧密耦合-有 很多依赖关系 松散耦合-有 少量依赖关系
无耦合-没有依赖关系
耦合强度依赖的因素:
发生内容耦合的情形:
(1)一模块直接访问另一模块的内部数据 (2)一模块不通过正常入口转到另一模块内 (3)两模块有一部分代码重叠 (4)一模块有多个入口
模块化设计的原则和目标
耦合是影响软件复杂程度和设计质量的重要因素 目标:建立模块间耦合度尽可能松散的系统。
如何降低模块间耦合度?
(1) 如模块必须存在耦合,选择适当的耦合类型 原则:尽量使用数据耦合 少用控制耦合 限制公共耦合的范围 坚决避免使用内容耦合 (2) 降低模块间接口的复杂性
一模块对另一模块的引用
一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度
模块间耦合的类型:
低 耦 合 性
(低耦合)
(中耦合) (较强耦合)
高 (强耦合)
非直接耦合 数据耦合 标志耦合 控制耦合 外部耦合 公共耦合 内容耦合
强 模 块 独 立 性
弱
(1) 非直接耦合
S1; S2;
模块C
模块A
模块A 模块B 模块C 模块B 模块D 模块C
中内聚
过程内聚:模块内的处理元素是相关的,且必须以特定次序执行。 通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个
输出数据。
顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必
高内聚
须顺序执行。
功能内聚:所有处理元素属于一个整体,完成一个单一的功能。
控制耦合增加了理解和编程的复杂性,调用模块 必须知道被调模块的内部逻辑,增加了相互依赖。 去除模块间控制耦合的方法: (1)将被调用模块内的判定上移到调用模块中进行; (2)被调用模块分解成若干单一功能模块。
改控制耦合为数据耦合举例
A
平均成绩 最高成绩
B1
计算平均分
B2
计算最高分
控制耦合举例
A
判别
名次
(开关量)
奖牌
功能A
功能B
发奖牌
控制耦合
被调用模块内 处理逻辑模式
改控制耦合为数据耦合举例
A
发金牌 发银牌 发铜牌
(5) 外部耦合
一组模块均与同一外部环境关联(例如,I/O模块 与特定的设备、格式和通信协议相关联),它们之 间便存在外部耦合。 外部偶合必不可少,但这种模块数目应尽量少。
(6) 公共耦合(公共数据区耦合)
低 低 高
• 逻辑内聚:仅仅是逻辑功能相关成分合在一起
• 时间内聚:必须在同一时间执行,并无功能逻辑的成分合在一起 • 过程内聚:过程顺序相关的功能成分合在一起 • 通讯内聚:需要对相同的外部数据进行操作的成分合在一起 • 顺序内聚:一个内部成分的输出是另一个内部成分的输入,将它们合起来 • 功能内聚:只完成单一的功能
模块的内聚性类型:
低 内 聚 性
高
巧合内聚 逻辑内聚 时间内聚 过程内聚 通信内聚 信息内聚 功能内聚
弱(功能分散) 模 块 独 立 性
强(功能单一)
(1) 巧合内聚(偶然内聚)
模块内各部分间无联系
例:
A
M
B
C
MOVE O TO R READ FILE F MOVE S TO T 模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差。
高
2. 模块独立性的度量之一:内聚性
一个模块内部各成分之间相互关联的强度 设计目标:高内聚(一模块的所有成分都直接参与 并且对于完成同一功能来说都是最基本的)
软件设计的概念和原理
内聚:一个模块内各个元素彼此结合的紧密程度。 偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。 低内聚 逻辑内聚:若干个逻辑功能类似的任务组成一个模块。 时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。 模块A 模块B
功能内聚模块
建立方程组系数矩阵
高斯消去法 回 代
高斯消去法解题流程
模块独立性的度量之二:
耦合性是模块间相互依赖程度的度量,耦合 的强弱取决于模块间接口的复杂程度,进入或访 问一个模块的点,以及通过接口的数据。 耦合性越高,模块独立性越弱
耦合----模块之间的依赖程度
内容耦合:一个模块直接修改另一个模块的内
1. 2. 3. 非直接耦合 数据耦合 特征耦合 弱耦合 中耦合 较强耦合 强耦合
模块A
内容耦合 • 访问其它模块的内部数据 • 直接跳到其他模块内部执行 非直接耦合 模块之间没有信息传递
模块B 数据耦合 通过简单变量 交换数据 模块3
4.
5. 6. 7.
控制耦合
外部耦合 公共耦合 内容耦合
模块1
模块2
容 公共耦合:两个以上的模块共同引用一个全局 数据 外部耦合:若允许一组模块访问同一个全局变 量 控制耦合:模块之间传递的参数含有控制信息
高
标记耦合:两个模块接口的参数包含相同的内 部结构
数据耦合:模块之间通过参数交换数据信息。
低
非直接耦合:模块之间没有消息传递
软件设计的概念和原理 ---- 耦合
一组模块引用同一个公用数据区(也称全局数据区、 公共数据环境)。 公共数据区指: 全局数据结构 共享通讯区 内存公共覆盖区等
公共耦合举例
A
B
A
B
common 公共数据区
common 公共数据区
松散的公共耦合
紧密的公共耦合
公共耦合举例
A
B
公共数据区
C
模块A、B、C间存在错综复杂的联系
公共耦合举例
A
6个模块共享一 个公共数据区
B
C
所有的公共耦合 关系
E
F
D
公共耦合存在的问题:
(1)软件可理解性降低 (模块间存在错综复杂的连系) (2)软件可维护性差 (修改变量名或属性困难) (3)软件可靠性差 (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!
(7) 内容耦合
一模块直接访问另一模块的内部信息(程序代码 或数据)。 最不好耦合形式 !!!
(3) 时间内聚
模块完成的功能必须在同一时间内执行,这些功能只 因时间因素关联在一起。 例如:初始化系统模块、 系统结束模块、 紧急故障处理模块等。
(4) 过程内聚
模块内各处理成分相关,且必须以特定次序执行。
过程内聚模块
建立方程组系数矩阵
高斯消去法 回 代
全部任务纳入一个 模块,得到一过程 性模块
高斯消去法解题流程
过程内聚模块
读入 成绩单
审查 成绩单
统计 成绩
打印 成绩
读入并审查 成绩单
统计并打印 成绩
(5) 通信内聚
模块内各部分使用相同的输入数据,或产生 相同的输出结果。
通信内聚模块例
职工工 资记录
产生工 资报表
职工工 资报表 平均 工资
计算平 均工资
产生职工工资报表并计算平均工资模块
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
水费
本月 用电量
电费 计算电费
计算水费
(4) 控制耦合
一模块通过开关量、标志、名字等控制信息, 明显地控制另一模块的功能。
控制耦合举例
A
平均/最高 成绩
B
计算平均分 或最高分
控制耦合举例
B
读入分数
平均/最高? 计算平均分 计算最高分
输出结果
调用逻辑性模块 B时,须先传递 控制信号(平均分 /最高分),以选 择所需的操作。 控制模块必须知 道被控模块的内 部逻辑,增强了 相互依赖。
①
模块独立性的概念
模块完成独立的功能 符合信息隐蔽和信息局部化原则 模块间关连和依赖程度尽量小
②
模块独立性的度量
模块独立性取决于模块的内部和外部特征。
SD方法提出的定性的度量标准: 模块自身的内聚性 模块之间的耦合性
耦合----模块之间的依赖程度 • 内容耦合:一个模块直接修改另一个模块的内容 • 公共耦合:两个以上的模块共同引用一个全局数据 •外部耦合:若允许一组模块访问同一个全局变量 • 控制耦合:接收模块的动作依赖于控制信号 • 标记耦合:两个模块接口的参数包含相同的内部结构 • 数据耦合:仅是模块之间的数据传递 •非直接耦合:模块之间没有消息传递 内聚----模块内部各成分之间的关联程度 • 偶然内聚:各成分之间并没有关系,只是把分散在多处的功能合在一起
两个模块没有直接关系(模快1和模快2),模块独立性 最强。
模块1
模块2
模块3
模块4
(2) 数据耦合
一模块调用另一模块时,被调用模块的输入、 输出都是简单的数据,属松散耦合。
数据耦合举例
开发票 单价 数量
金额
计算水费
数据耦合举例
计算水电费
用水量
水费
用电量
电费 计算电费
计算Hale Waihona Puke Baidu费
(3) 标记耦合(特征耦合)
通信内聚模块例
开领 发票 书单
登记 售书
领书单
删除
文件
修改
售 书 登记表
(6)顺序内聚
一个内部成分的输出是另一个内部成分的输入, 将它们合起来。
顺序内聚模块
建立方程组系数矩阵
高斯消去法 回 代
高斯消去法解题流程
(7) 功能内聚
模块仅包括为完成某个功能所必须的所有成分。 ( 模块所有成分共同完成一个功能,缺一不可 ) 内聚性最强
耦合、内聚与模块独立性关系
耦合与内聚都是模块独立性的定性标准,都反映 模块独立性的良好程度。但耦合是直接的主导因 素,内聚则辅助耦合共同对模块独立性进行衡量。
如两个模块通过传递数据结构(不是简单数据, 而是记录、数组等)加以联系,或都与一个数据 结构有关系, 则称这两个模块间存在标记耦合。
标记耦合举例 计算水电费
住户情况
计算水费
水费
住户情况
电费
计算电费
“住户情况”是一个数据结构,图中模块都与此数据结 构有关。 “计算水费”和“计算电费”本无关,由于引用了此数 据结构产生依赖关系,它们之间也是标记偶合。
接口复杂性与耦合类型的关系: 直接引用 接口方式 过程调用语句
内容耦合 其它耦合
数据耦合 标记耦合 控制耦合
接 数据结构,变 口 量名作参数 复 接口数据 的复杂性 开关量,起 杂 控制变量作用 性
全程变量 公用数据区 无接口关系
数据项作参数
外部耦合
公共耦合
非直接耦合
内聚与耦合密切相关,同其它模块强耦合的模块 意味着弱内聚,强内聚模块意味着与其它模块间 松散耦合。 设计目标:力争强内聚、弱耦合。
(2) 逻辑内聚
把几种相关功能(逻辑上相似的功能)组合在一 模块内,每次调用由传给模块的参数确定执行 哪种功能。
逻辑内聚模块
A
B
C
公用代码段
E
F
G
E、F、G逻辑 功能相似,组 成新模块EFG
A1
B1
C1
A
B EFG
C
公用代码段
EFG模块内部逻辑
缺点:增强了耦合程度(控制耦合)不易修改, 效率低。
特征耦合 通过数据结 构交换数据
模块4 控制耦合 模块之间传递 的是控制信息
模块A
模块L 模块1
模块B
模块C
模块D 全局性数据结构 公共耦合
模块N
T 全 局 性简单变量 外部耦合 S1 Flag=1? F S2
紧密耦合-有 很多依赖关系 松散耦合-有 少量依赖关系
无耦合-没有依赖关系
耦合强度依赖的因素:
发生内容耦合的情形:
(1)一模块直接访问另一模块的内部数据 (2)一模块不通过正常入口转到另一模块内 (3)两模块有一部分代码重叠 (4)一模块有多个入口
模块化设计的原则和目标
耦合是影响软件复杂程度和设计质量的重要因素 目标:建立模块间耦合度尽可能松散的系统。
如何降低模块间耦合度?
(1) 如模块必须存在耦合,选择适当的耦合类型 原则:尽量使用数据耦合 少用控制耦合 限制公共耦合的范围 坚决避免使用内容耦合 (2) 降低模块间接口的复杂性
一模块对另一模块的引用
一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度
模块间耦合的类型:
低 耦 合 性
(低耦合)
(中耦合) (较强耦合)
高 (强耦合)
非直接耦合 数据耦合 标志耦合 控制耦合 外部耦合 公共耦合 内容耦合
强 模 块 独 立 性
弱
(1) 非直接耦合
S1; S2;
模块C
模块A
模块A 模块B 模块C 模块B 模块D 模块C
中内聚
过程内聚:模块内的处理元素是相关的,且必须以特定次序执行。 通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个
输出数据。
顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必
高内聚
须顺序执行。
功能内聚:所有处理元素属于一个整体,完成一个单一的功能。
控制耦合增加了理解和编程的复杂性,调用模块 必须知道被调模块的内部逻辑,增加了相互依赖。 去除模块间控制耦合的方法: (1)将被调用模块内的判定上移到调用模块中进行; (2)被调用模块分解成若干单一功能模块。
改控制耦合为数据耦合举例
A
平均成绩 最高成绩
B1
计算平均分
B2
计算最高分
控制耦合举例
A
判别
名次
(开关量)
奖牌
功能A
功能B
发奖牌
控制耦合
被调用模块内 处理逻辑模式
改控制耦合为数据耦合举例
A
发金牌 发银牌 发铜牌
(5) 外部耦合
一组模块均与同一外部环境关联(例如,I/O模块 与特定的设备、格式和通信协议相关联),它们之 间便存在外部耦合。 外部偶合必不可少,但这种模块数目应尽量少。
(6) 公共耦合(公共数据区耦合)
低 低 高
• 逻辑内聚:仅仅是逻辑功能相关成分合在一起
• 时间内聚:必须在同一时间执行,并无功能逻辑的成分合在一起 • 过程内聚:过程顺序相关的功能成分合在一起 • 通讯内聚:需要对相同的外部数据进行操作的成分合在一起 • 顺序内聚:一个内部成分的输出是另一个内部成分的输入,将它们合起来 • 功能内聚:只完成单一的功能
模块的内聚性类型:
低 内 聚 性
高
巧合内聚 逻辑内聚 时间内聚 过程内聚 通信内聚 信息内聚 功能内聚
弱(功能分散) 模 块 独 立 性
强(功能单一)
(1) 巧合内聚(偶然内聚)
模块内各部分间无联系
例:
A
M
B
C
MOVE O TO R READ FILE F MOVE S TO T 模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差。
高
2. 模块独立性的度量之一:内聚性
一个模块内部各成分之间相互关联的强度 设计目标:高内聚(一模块的所有成分都直接参与 并且对于完成同一功能来说都是最基本的)
软件设计的概念和原理
内聚:一个模块内各个元素彼此结合的紧密程度。 偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。 低内聚 逻辑内聚:若干个逻辑功能类似的任务组成一个模块。 时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。 模块A 模块B
功能内聚模块
建立方程组系数矩阵
高斯消去法 回 代
高斯消去法解题流程
模块独立性的度量之二:
耦合性是模块间相互依赖程度的度量,耦合 的强弱取决于模块间接口的复杂程度,进入或访 问一个模块的点,以及通过接口的数据。 耦合性越高,模块独立性越弱
耦合----模块之间的依赖程度
内容耦合:一个模块直接修改另一个模块的内
1. 2. 3. 非直接耦合 数据耦合 特征耦合 弱耦合 中耦合 较强耦合 强耦合
模块A
内容耦合 • 访问其它模块的内部数据 • 直接跳到其他模块内部执行 非直接耦合 模块之间没有信息传递
模块B 数据耦合 通过简单变量 交换数据 模块3
4.
5. 6. 7.
控制耦合
外部耦合 公共耦合 内容耦合
模块1
模块2
容 公共耦合:两个以上的模块共同引用一个全局 数据 外部耦合:若允许一组模块访问同一个全局变 量 控制耦合:模块之间传递的参数含有控制信息
高
标记耦合:两个模块接口的参数包含相同的内 部结构
数据耦合:模块之间通过参数交换数据信息。
低
非直接耦合:模块之间没有消息传递
软件设计的概念和原理 ---- 耦合
一组模块引用同一个公用数据区(也称全局数据区、 公共数据环境)。 公共数据区指: 全局数据结构 共享通讯区 内存公共覆盖区等
公共耦合举例
A
B
A
B
common 公共数据区
common 公共数据区
松散的公共耦合
紧密的公共耦合
公共耦合举例
A
B
公共数据区
C
模块A、B、C间存在错综复杂的联系
公共耦合举例
A
6个模块共享一 个公共数据区
B
C
所有的公共耦合 关系
E
F
D
公共耦合存在的问题:
(1)软件可理解性降低 (模块间存在错综复杂的连系) (2)软件可维护性差 (修改变量名或属性困难) (3)软件可靠性差 (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!
(7) 内容耦合
一模块直接访问另一模块的内部信息(程序代码 或数据)。 最不好耦合形式 !!!
(3) 时间内聚
模块完成的功能必须在同一时间内执行,这些功能只 因时间因素关联在一起。 例如:初始化系统模块、 系统结束模块、 紧急故障处理模块等。
(4) 过程内聚
模块内各处理成分相关,且必须以特定次序执行。
过程内聚模块
建立方程组系数矩阵
高斯消去法 回 代
全部任务纳入一个 模块,得到一过程 性模块
高斯消去法解题流程
过程内聚模块
读入 成绩单
审查 成绩单
统计 成绩
打印 成绩
读入并审查 成绩单
统计并打印 成绩
(5) 通信内聚
模块内各部分使用相同的输入数据,或产生 相同的输出结果。
通信内聚模块例
职工工 资记录
产生工 资报表
职工工 资报表 平均 工资
计算平 均工资
产生职工工资报表并计算平均工资模块
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
水费
本月 用电量
电费 计算电费
计算水费
(4) 控制耦合
一模块通过开关量、标志、名字等控制信息, 明显地控制另一模块的功能。
控制耦合举例
A
平均/最高 成绩
B
计算平均分 或最高分
控制耦合举例
B
读入分数
平均/最高? 计算平均分 计算最高分
输出结果
调用逻辑性模块 B时,须先传递 控制信号(平均分 /最高分),以选 择所需的操作。 控制模块必须知 道被控模块的内 部逻辑,增强了 相互依赖。