当前位置:
文档之家› 5系统设计-模块设计原则(2)new
5系统设计-模块设计原则(2)new
数据耦合举例
开发票
单价 数量
金额
计算水费
数据耦合举例
计算水电费 用电量 电费
用水量
水费
计算水费
计算电费
标记耦合(特征耦合) (3) 标记耦合(特征耦合)
如两个模块通过传递数据结构(不是简单数据, 如两个模块通过传递数据结构(不是简单数据,而 传递数据结构 是记录、数组等)加以联系, 是记录、数组等)加以联系,而被调用模块只需要部 分数据项, 分数据项,则称这两个模块之间存在标记耦合或特 征耦合。 征耦合。 特征耦合传递的是数组之类的数据结构, 特征耦合传递的是数组之类的数据结构,使互不 相关的模块建立了依赖关系, 相关的模块建立了依赖关系,往往会造成侦错上的 困难。 困难。
改控制耦合为数据耦合举例
A
平均成绩
最高成绩
B1 计算平均分
B2 计算最高分
控制耦合举例
A 名次 开关量) (开关量) 奖牌 功能A 功能A 发奖牌 控制耦合 被调用模块内 处理逻辑模式
判别 功能B 功能B
改控制耦合为数据耦合举例
A 金牌 银牌 发金牌 发银牌 发铜牌 铜牌
控制耦合举例
A
用户名、 用户名、 口令
模块
模块是可以组合、分解和更换的单元,是组成系统、 模块是可以组合、分解和更换的单元,是组成系统、易 于处理的基本单元。 于处理的基本单元。系统中的任何一个处理功能都可以 看成一个模块, 看成一个模块,也可以理解为用一个名字就可以调用的 一段程序语句。 一段程序语句。 a. 模块应具备以下四个要素: 模块应具备以下四个要素: 输入和输出: ●输入和输出:模块的输入来源和输出去向都是同一个调 用者, 一个模块从调用者取得输入, 加工后再把输出返 用者 , 一个模块从调用者取得输入 , 回调用者。 回调用者。 功能:模块把输入转换成输出所做的工作。 ●功能:模块把输入转换成输出所做的工作。 内部数据:仅供该模块本身引用的数据; ●内部数据:仅供该模块本身引用的数据; 程序代码:用来实现模块功能的程序。 ●程序代码:用来实现模块功能的程序。
计算平均分
计算最高分
输出结果
改进的方法: 改进的方法 控制耦合增加了模块之间的复杂性, 控制耦合增加了模块之间的复杂性, 调用模块必须知道被调模块的内部逻辑,增 调用模块必须知道被调模块的内部逻辑, 加了相互依赖。 加了相互依赖。 去除模块间控制耦合的方法: 去除模块间控制耦合的方法:
(1)将被调用模块内的判定上移到调用模块中进行 (1)将被调用模块内的判定上移到调用模块中进行 (2)被调用模块分解成若干单一功能模块 (2)被调用模块分解成若干单一功能模块
标记耦合举例
计算水电费
住户情况
水费 电费
住户情况
计算水费
计算电费
“住户情况”包含水费和电费、煤气费、电话费等。 包含水费和电费、煤气费、电话费等。 是一个数据结构,图中模块都与此数据结构有关. “住户情况”是一个数据结构,图中模块都与此数据结构有关. 计算水费” 计算电费”本无关, “计算水费”和“计算电费”本无关,由于引用了此数据结构产 生依赖关系,它们之间也是标记偶合. 生依赖关系,它们之间也是标记偶合.
模块调用实例
int max( int x, int y) { int z; z=x>y? x: y; return(z); } Main( ) {: max( 3, 4) : }
Main()
x y
Z
Max( Max(x,y) 求最大值
模块划分的目的
主要是降低系统的开发难度 , 主要是 降低系统的开发难度, 增加系统的 降低系统的开发难度 可维护性等 可维护性等。 可维护性 局部修改
控制耦合举例
A
平均/最高 B
B 读入分数 平均/最高? 平均/最高? 调用逻辑性模块 B时,须先传递 控制信号( 控制信号(平均分 最高分) /最高分),以选 择所需的操作。 择所需的操作。 控制模块必须知 道被控模块的内 部逻辑, 部逻辑,增强了 相互依赖. 相互依赖.
第五章 系统分析(2)
---模块设计的原则
模块
为降低系统开发的难度或复杂性,常常将系统进 为降低系统开发的难度或复杂性, 行模块化。 行模块化。 所谓模块化,就是将系统划分为子系统 系统划分为子系统, 所谓模块化,就是将系统划分为子系统,子系统 划分为若干模块,大模块划分为小模块的过程。 划分为若干模块,大模块划分为小模块的过程。 模块划分的目的主要是降低系统的开发难度,增 模块划分的目的主要是降低系统的开发难度, 主要是降低系统的开发难度 加系统的可维护性等。 加系统的可维护性等。
(1)系统可理解性降低 (1)系统可理解性降低 模块间存在错综复杂的连系) (模块间存在错综复杂的连系) (2)系统可维护性差 (2)系统可维护性差 修改变量名或属性困难) (修改变量名或属性困难) (3)系统可靠性差 (3)系统可靠性差 (公共数据区及全程变量无保护措施) 公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!! 慎用公共数据区和全程变量!!!
模块间耦合的类型:
低
非直接耦合 数据耦合 标记耦合 控制耦合
公共耦合 内容耦合
强 模 块 独 立 性 弱
高
(1) 非直接耦合
两个模块没有直接关系(模块1和模块2), 两个模块没有直接关系(模块1和模块2),模块之间的联系是 2) 通过主模块的控制和调用实现的,模块独立性最强。 通过主模块的控制和调用实现的,模块独立性最强。
模块
其中,输入/输出和功能是模块的外部特性, 输出和功能是模块的外部特性 其中,输入 输出和功能是模块的外部特性,反映 模块的外貌;内部数据和程序代码是模块的内部 模块的外貌;内部数据和程序代码是模块的内部 特性。在结构化设计中,首先关心外部特性, 特性。在结构化设计中,首先关心外部特性,其 内部特性只做必要了解。 内部特性只做必要了解。 因此,可以认为,模块就是指具有输入 输出、 指具有输入/输出 因此,可以认为,模块就是指具有输入 输出、逻 辑功能、 运行程序和内部数据4种属性的 种属性的一组程 辑功能 、 运行程序和内部数据 种属性的 一组程 序。
公共耦合举例
A B A B
common 公共数据区 松散的公共耦合
common 公共数据区 紧密的公共耦合
公共耦合举例
A B C
公共数据区 模块A 模块A、B、C间存在错综复杂的联系
公共耦合举例
A B E 6个模块共享一 个公共数据区
C 所有的公共 耦合关系
F
D
公共耦合存在的问题: 公共耦合存在的问题:
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
水费 电费
本月 用电量
计算水费
计算电费
(4) 控制耦合
控制耦合是指一个模块将控制信息传递给 控制耦合是指一个模块将控制信息传递给 另一个模块,以控制该模块的内部处理逻辑。 另一个模块,以控制该模块的内部处理逻辑。 从分解的角度看, 从分解的角度看,导致控制耦合的主要原 因是分解不彻底, 因是分解不彻底,被调用模块不是执行单一 的功能。 的功能。
模块间的联系尽可能的少 (低耦合) 低耦合) 高聚合) 而模块内的联系尽可能多 (高聚合)
模块独立性的度量之一: 模块独立性的度量之一:耦合度
耦合度是模块间的联结关系, 耦合度是模块间的联结关系,衡量不同模块间的 模块间的联结关系 相互依赖的紧密密程度。 相互依赖的紧密密程度。 耦合度越高, 耦合度越高,模块独立性越弱
模块调用
模块调用的类型如图所示。 模块调用的类型如图所示。
模块调用
调用: 在模块结构图中, 调用 : 在模块结构图中 , 用连接两个模块的箭头表示调 箭头总是由调用模块指向被调用模块, 用 , 箭头总是由调用模块指向被调用模块 , 但是应该理 解为被调用模块执行后又返回到调用模块。 解为被调用模块执行后又返回到调用模块。 判断调用: 一个模块是否调用一个从属模块, 判断调用 : 一个模块是否调用一个从属模块 , 取决于调 用模块内部的判断条件, 用模块内部的判断条件 , 则该调用称为模块间的判断调 采用菱形符号表示。 用,采用菱形符号表示。 循环调用: 如果一个模块通过其内部的循环功能循环调 循环调用 : 用一个或多个从属模块, 则该调用称为循环调用, 用一个或多个从属模块 , 则该调用称为循环调用 , 用弧 形箭头表示。 形箭头表示。
模块耦合度
无耦合- 无耦合-没有 依赖关系 紧密耦合-有 紧密耦合- 很多依赖关系 松散耦合-有 松散耦合- 少量依赖关系
耦合度强弱的因素: 耦合度强弱的因素:
一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度
耦合有6种不同的类型(即模块间的联结方式) 耦合有 种不同的类型(即模块间的联结方式),由好 种不同的类型 到差依次为:非直接耦合、数据耦合、标记(特征) 到差依次为 : 非直接耦合 、 数据耦合 、 标记 ( 特征 ) 耦合、控制耦合、公共耦合、内容耦合。 耦合、控制耦合、公共耦合、内容耦合。
对/不对
B
取口令并核对
将B中核对口令功能划分到 A
A
用户名
口令
B
取口令
公共耦合(公共数据区耦合) (5) 公共耦合(公共数据区耦合)
如果多个模块访问同一公共数据区( 如果多个模块访问同一公共数据区(global 公共数据区 area),则称之为公共耦合。 ),则称之为公共耦合 data area),则称之为公共耦合。可以理 解为: 解为:公共耦合就是多个模块访问同一个全 局变量, 局变量,或者多个模块访问同一全局性的数 据结构。 据结构。 公共数据区指 公共数据区指: 全局数据结构 共享通讯区 内存公共覆盖区等
直接引用 接口方 式 接 口 复 杂 性 过程调用语句 数据项作参数 数据结构,变 量名作参数 接口数据 的复杂性 开关量,起 控制变量作用 全程变量 公用数据区 无接口关系 非直接耦合 内容耦合 其它耦合 数据耦合 标记耦合 控制耦合 公共耦合