耦合和内聚
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B.顺序内聚 Sequential Cohesion 顺序内聚
如果一个模块内部的各个组成部分执行的几个处理动作 有这样的特征: 有这样的特征:前一个处理动作所产生的输出数据是后 一个处理动作的输入数据,称为顺序内聚. 一个处理动作的输入数据,称为顺序内聚. 顺序内聚维护起来不如功能内聚方便,要修改模块中的 顺序内聚维护起来不如功能内聚方便, 一个功能, 一个功能,会影响到同一个模块中的其他功能.
D.公共耦合(2)
公共耦合
D.公共耦合(3)
A B A B
Common 公共数据区
Common 公共数据区
松散公共耦合
紧密公共耦合
E.内容耦合
如果一个模块和另一个模块的内部属性(即运行程序和内 如果一个模块和另一个模块的内部属性( 部数据)有关,则称为内部耦合. 内部耦合 部数据)有关,则称为内部耦合. 例如:模块A 例如:模块 TRC:...... : 模块B 模块 GOTO TRC 模块A与模块 存在内容耦合 这是一种最坏的耦合. 模块 与模块B存在内容耦合,这是一种最坏的耦合. 与模块 存在内容耦合,
A
flag
f1
f2
f3
f1
f2
f3
逻辑内聚----控制耦合 逻辑内聚----控制耦合 ----
G.偶然(机械)内聚
如果一个模块的内部各组成部分的处理 动作彼此没有任何联系,则称为机械内 聚.
模块内聚性的判断:
模块聚合性的比较
5.5.6 模块设计的一般准则
改进软件结构提高模块独立性 模块规模要适中 深度,宽度,扇入,扇出应适当 降低接口的复杂性 设计单入口单出口的模块 模块功能应该可以预测,但也要防止模块功 能过于局发生错误的一个主要原 因.应该仔细设计模块接口,使得信息传递 简单并且和模块的功能一致 接口复杂或不一致(即看起来传递的数据之 间没有联系),是紧联结或低聚合的征兆, 应该重新分析这个模块的独立性.
5.5.7 模块的控制范围和判断作用 范围
模块的控制范围:本身及其所有下级模 块. 模块的判断作用范围:被判断调用的模 块.
C.控制耦合 控制耦合(1) 控制耦合
如果模块 向模块B所传递的信息控制了模块 的内 如果模块A向模块 所传递的信息控制了模块 向模块 所传递的信息控制了模块B的内 部逻辑,那么 和 之间的耦合称为控制耦合 之间的耦合称为控制耦合. 部逻辑,那么A和B之间的耦合称为控制耦合. 控制信息可以看作是一个开关量,它传递了一个控制 控制信息可以看作是一个开关量, 信息或状态的标志.控制信息不同于数据信息, 信息或状态的标志.控制信息不同于数据信息,数据 信息一般通过处理过程处理被处理的数据, 信息一般通过处理过程处理被处理的数据,而控制信 息则是控制处理过程中的某些参数. 息则是控制处理过程中的某些参数.
�
控制耦合 公共耦合 内容耦合
高
功能单一) 强 (功能单一)
模块独立性
弱(功能分散) 功能分散
A.数据耦合
如果两个模块间的通讯 信息是若干参数,其中 信息是若干参数, 每一个参数都是一个数 据元素, 据元素,称这种耦合为 数据耦合. 数据耦合.这是模块之 间影响最小的耦合关系. 间影响最小的耦合关系.
因此,在设计模块时,应以数 因此,在设计模块时, 据耦合为主, 据耦合为主,辅以特征耦合与 控制耦合,消除公共耦合和内 控制耦合, 容耦合. 容耦合.
模块的内聚
模块的内聚 模块的内聚(cohesion)是指一个模块 是指一个模块 内部的各个组成部分的紧凑性,其处 内部的各个组成部分的紧凑性, 理动作的组合强度. 理动作的组合强度. 内聚有七种形式. 内聚有七种形式.
两个模块之间的耦合有五种形式,按照耦合程度由低到高 两个模块之间的耦合有五种形式, 排列为:数据耦合,特征耦合,控制耦合,公共耦合, 排列为:数据耦合,特征耦合,控制耦合,公共耦合,内 容耦合. 容耦合.
几种耦合方式的比较,如下图所示: 几种耦合方式的比较,如下图所示:
低
数据耦合 特征耦合
耦合性
C.控制耦合(3)
A
A
flag
f1
f2
f3
f1
f2
f3
控 制 耦 合
D.公共耦合(1)
如果两个模块都和同一个公共数据域有关,则 如果两个模块都和同一个公共数据域有关, 称为公共耦合. 称为公共耦合. 公用耦合是一种不良的耦合关系,它给模块的 公用耦合是一种不良的耦合关系, 维护和修改带来困难.如公共数据要作修改, 维护和修改带来困难.如公共数据要作修改, 很难判定有多少模块应用了该公共数据, 很难判定有多少模块应用了该公共数据,故在 模块设计时, 模块设计时,一般不允许有公共耦合关系的模 块存在. 块存在.
应该仔细设计模块接口使得信息传递简单并且和模块的功能一致接口复杂或不一致即看起来传递的数据之间没有联系是紧联结或低聚合的征兆应该重新分析这个模块的独立性
模块的耦合
耦合:(coupling)表示软件结构内不同模块彼此之间的相互 表示软件结构内不同模块彼此之间的相互 耦合 依赖(连接)的紧密程度; 依赖(连接)的紧密程度; 是对模块独立性的直接衡量指标; 是对模块独立性的直接衡量指标; 追求松散耦合避免强耦合 耦合强度取决于 模块接口的复杂度
F.逻辑内聚
如果一个模块内部的各组成部分的处理动作在 逻辑上相似,但功能都彼此不同或无关, 逻辑上相似,但功能都彼此不同或无关,则称 为逻辑内聚. 为逻辑内聚. 一个逻辑内聚模块往往包括若干个逻辑相似的 动作,使用时可以选用一个或几个功能. 动作,使用时可以选用一个或几个功能. 例如:把编辑各种输入数据的功能放在一个模 例如: 块中. 块中.
小结
软件总体设计的基本原理:抽象,模块化, 软件总体设计的基本原理:抽象,模块化, 自顶向下, 自顶向下,逐步球茎 模块的偶合,内聚 模块的偶合, 模块设计的一般准则
思考
举例说明各种类型的模块耦合. 简述模块,模块化以及模块化设计的概念.
客观事物(问题域)
面向对象编程语言 结构化编程语言 早期高级语言 汇编语言 机器语言 计算机
高
功能内聚 信息内聚
内聚性
通信内聚 过程内聚 时间内聚 逻辑内 聚
低
偶然内聚
功能单一) 强 (功能单一)
模块独立性
弱(功能分散) 功能分散)
A.功能内聚 Functional cohesion
如果一个模块内部的各组成部分的处理动 作全都为执行同一个功能而存在, 作全都为执行同一个功能而存在,并且只 执行一个功能,则称为功能内聚. 执行一个功能,则称为功能内聚. 判断一个模块是不是功能内聚,只要看这 判断一个模块是不是功能内聚, 个模块是"做什么" 个模块是"做什么",是完成一个具体的 任务,还是完成多任务. 任务,还是完成多任务.
C.通讯内聚(1)
如果一个模块内各组 成部分的处理动作都 使用相同的输入数据 或相同的输出数据, 或相同的输出数据, 称为通讯内聚. 称为通讯内聚
C.通讯内聚(2)
上图中有两个工作: 上图中有两个工作: – 按配件编号查询"数据存储",获得单价. 按配件编号查询"数据存储" 获得单价. – 按配件编号查询"数据存储",获得库存量. 按配件编号查询"数据存储" 获得库存量. – 这两个处理动作都使用相同的输入数据,称为通讯内聚 这两个处理动作都使用相同的输入数据,
B.特征耦合 特征耦合
如果两个模块都与 同一个数据结构有 关,则称为特征耦 合.
"特征耦合"图与"数据耦合"图的相互 特征耦合"图与"数据耦合" 特征耦合 转换
住户详情数据结构中包 括"本月用水量", 本月用水量" "本月用电量".上面 本月用电量" 的"特征耦合"图可改 特征耦合" 进为下面的"数据耦合" 进为下面的"数据耦合" 图.
模块设计中模块控制域与作用域的设计原则: 模块设计中模块控制域与作用域的设计原则:
1.对于任何一个内部存在判断调用的模块,它的判 对于任何一个内部存在判断调用的模块,
断作用的范围应该是其控制范围的一个子集. 断作用的范围应该是其控制范围的一个子集. 2.存在判断调用的模块,所在层次不要与那些属于判 存在判断调用的模块, 存在判断调用的模块 断作用范围的模块所在的层次相隔太远. 断作用范围的模块所在的层次相隔太远.
模块的分解
分解是指把一个模块分解成若干个从属于它 的下层模块. 一般按功能分解,分解到成为一个小的功能 单一的模块为止. 一般一个模块内包含的语句在30~50条左右 较好(指高级语言).
模块的扇出和扇入
模块的扇出指一个模块拥有的直属下级模块 的个数,一般扇出数控制在7以内. 模块的扇入是指一个模块的直接上级模块的 个数. 在设计中,扇入系数大,说明模块分解得好, 通用性强,冗余度低.
D.过程内聚
如果一个模块内各组成部分的处理动作各不 相同,彼此也没有联系, 相同,彼此也没有联系,但它们都受同一个 控制流支配,决定它们的执行次序, 控制流支配,决定它们的执行次序,称为过 程内聚.例如: 程内聚.例如:
E.时间(暂时)内聚
如果一个模块内的各组成部分的处理动 作和时间有关,则称为时间内聚. 作和时间有关,则称为时间内聚.时间 内聚模块的处理动作必须在特定的时间 内完成. 内完成. 例如:程序设计中的初始化模块. 例如:程序设计中的初始化模块