软件模块化设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
模块
模块是具有一定功能的可以用名词调用的程序语 句集合,如: 独立的汇编程序 Pascal过程
9
概要设计的基本概念 将系统划分成模块 决定每个模块的功能 决定模块的调用关系 决定模块的界面,即模块间传递的数据
10
2. 抽象(Abstraction)与细化
抽象:解决问题时只考虑与问题有关的方面,不 考虑与问题无关的方面。即抽出事物的本质特性 而不考虑细节。

模 块 独 立 性

36
(1) 非直接耦合
两个模块没有直接关系(模快1和模快2),模块独立性 最强。
模块1
模块2
模块3
模块4
37
(2) 数据耦合
一模块调用另一模块时,被调用模块的输入、 输出都是简单的数据,属松散耦合。
38
数据耦合举例
开发票
单价 数量
金额
计算水费
39
数据耦合举例
计算水电费
用水量 水费
用电量
电费
计算水费
计算电费
40
(3) 标记耦合(特征耦合)
如两个模块通过传递数据结构(不是简单数据, 而是记录、数组等)加以联系,或都与一个数据 结构有关系, 则称这两个模块间存在标记偶合。
41
标记耦合举例 计算水电费
住户情况 水费
电费
住户情况
计算水费
计算电费
“住户情况”是一个数据结构,图中模块都与此数据结
19
② 模块独立性的度量
模块独立性取决于模块的内部和外部特征。 SD方法提出的定性的度量标准: 模块自身的内聚性 模块之间的耦合性
20
2. 模块独立性的度量之一:内聚性
一个模块内部各成分之间相互关联的强度 设计目标:高内聚(一模块的所有成分都直接参与 并且对于完成同一功能来说都是最基本的)
成本越高。
如何确定模块化分的最小成本区,并保证模块的最佳性能,是设 计活动中的主要任务之一。
17
模块数与开发工作量的关系
软件总成本

本 或
最小成本区域
集成成本

M


成本/模块
模块数量
18
2. 模块的独立性
① 模块独立性的概念 模块完成独立的功能 符合信息隐蔽和信息局部化原则 模块间关连和依赖程度尽量小
60
耦合性越高,模块独立性越弱
34
耦合强度依赖的因素:
一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度
35
模块间耦合的类型:

非直接耦合
耦 (低耦合) 数据耦合

标志耦合
性 (中耦合) 控制耦合
外部耦合
(较强耦合)
公共耦合
高 (强耦合) 内容耦合
3
1.软件的总体结构主要回答的问题
软件的组成部分 软件的层次关系 模块的内部处理逻辑 模块之间的界面
4
2. 软件设计方法
结构化设计方法(SD) 面向数据结构的设计方法(JSD方法) 面向对象的设计方法(OOD)
5
3. 软件设计分为两个阶段:
(1)概要设计(总体设计) 确定软件的结构以及各组成成分(子系统或模块) 之间的相互关系。
23
(2) 逻辑内聚
把几种相关功能(逻辑上相似的功能)组合在一 模块内,每次调用由传给模块的参数确定执行 哪种功能。
24
A BC
逻辑内聚模块 公用代码段
E FG
E、F、G逻辑 功能相似,组
A1 B1 C1
成新模块EFG
A BC
公用代码段
EFG
EFG模块内部逻辑
缺点:增强了耦合程度(控制耦合)不易修改, 效率低。
信息隐蔽的基本原则: 功能独立,高内聚且低耦合
14
§5.3 模块化设计
1.分解 2.模块独立性 内聚 耦合 自顶向下与自底向上设计
15
模块化(Modularity)
模块化是好的软件设计的一个基本准则 从整体上把握问题,隐蔽细节
分解
复杂问题
较小问题
分解
可减小解题所需的总的工作
16
第五章 软件设计概述
§5.1 软件设计的目标和任务 §5.2 软件设计基本概念 §5.3 模块化设计
1
§5.1 软件设计的任务
软件需求:解决“做什么” 软件设计:解决“怎么做”
2
软件设计的任务
问题结构(软件需求)映射 软件结构;
从软件需求规格说明书出发,形成软件 的具体设计方案。
1.分解
C(p1)>C(p2) 则 E(p1)>E(p2)
其中: p1和p2是两个问题
C(p1+p2)> C(p1) +C(p2)
试验发现
C(x)是由x问题决定的复杂性 E(x)是解决x问题所需要的工作量
E(p1+p2)> E(p1) +E(p2)
"各个击破"理论
模块划分得越小成本越低 ,但是
Baidu Nhomakorabea
集成成本却随着模块划分得越小
A
平均/最高
成绩
B
计算平均分 或最高分
45
控制耦合举例
B
读入分数
调用逻辑性模块
B时,须先传递
平均/最高?
控制信号(平均分 /最高分),以选
择所需的操作。
计算平均分 计算最高分 控制模块必须知
道被控模块的内
部逻辑,增强了
输出结果
相互依赖。
46
控制耦合增加了理解和编程的复杂性,调用模块 必须知道被调模块的内部逻辑,增加了相互依赖。 去除模块间控制耦合的方法: (1)将被调用模块内的判定上移到调用模块中进行; (2)被调用模块分解成若干单一功能模块。
31
(7) 功能内聚
模块仅包括为完成某个功能所必须的所有成分。 ( 模块所有成分共同完成一个功能,缺一不可 ) 内聚性最强
32
功能内聚模块
建立方程组系数矩阵
高斯消去法


高斯消去法解题流程 33
模块独立性的度量之二:
耦合性是模块间相互依赖程度的度量,耦合 的强弱取决于模块间接口的复杂程度,进入或访 问一个模块的点,以及通过接口的数据。
25
(3) 时间内聚
模块完成的功能必须在同一时间内执行,这些功能只 因时间因素关联在一起。 例如:初始化系统模块、
系统结束模块、 紧急故障处理模块等。
26
(4) 过程内聚
模块内各处理成分相关,且必须以特定次序执行。
27
过程内聚模块
读入 成绩单
审查 成绩单
统计 成绩
打印 成绩
读入并审查 成绩单
统计并打印 成绩
接口复杂性与耦合类型的关系: 直接引用
接口方式 过程调用语句
数据项作参数

口 复 接口数据
数据结构,变 量名作参数
杂 的复杂性 性
开关量,起 控制变量作用
公用数据区 无接口关系
内容耦合 其它耦合 数据耦合
标记耦合
控制耦合
外部耦合 公共耦合 非直接耦合59
内聚与耦合密切相关,同其它模块强耦合的模块 意味着弱内聚,强内聚模块意味着与其它模块间 松散耦合。 设计目标:力争强内聚、弱耦合。
28
(5) 通信内聚
模块内各部分使用相同的输入数据,或产生 相同的输出结果。
29
通信内聚模块例
职工工 资记录
产生工 资报表
职工工 资报表
计算平 均工资
平均 工资
产生职工工资报表并计算平均工资模块 30
(6)信息内聚
信息内聚指模块完成多个功能,各个功能 都在同一数据结构上操作,每个功能有 唯一入口。如对同一个数据库的“查找 —添加—删除—修改”模块。
构有关。 “计算水费”和“计算电费”本无关,由于引用了此数 据结构产生依赖关系,它们之间也是标记偶合。
42
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
本月
水费
用电量
电费
计算水费
计算电费
43
(4) 控制耦合
一模块通过开关量、标志、名字等控制信息, 明显地控制另一模块的功能。
44
控制耦合举例
(2)软件可维护性差 (修改变量名或属性困难)
(3)软件可靠性差 (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!
54
(7) 内容耦合
一模块直接访问另一模块的内部信息(程序代码 或数据)。 最不好内容耦合形式 !!!
55
发生内容耦合的情形:
(1)一模块直接访问另一模块的内部数据 (2)一模块不通过正常入口转到另一模块内 (3)两模块有一部分代码重叠 (4)一模块有多个入口
13
3.信息隐蔽(Information Hiding)
信息隐蔽:对模块内部信息访问的约束
信息隐蔽的含义:有效的模块化可以通过定义一 组独立模块来实现,这些模块相互之间只交流软件 功能必需的信息。 换句话说:模块所包含的信息,不允许其它不需要这
些信息的模块访问,独立的模块间仅仅交换为完成 系统功能而必须交换的信息。
(2)详细设计 确定模块内部的算法和数据结构,产生描述各模 块程序过程的详细文档。
6
§5.2 软件设计的基本概念
1.模块化 2.抽象与细化 3.信息隐蔽 4.软件复用
7
1.模块化
模块化:把程序划分成若干个模块,每个模块完成一个子功能, 把这些模块集总起来组成一个整体,可以完成指定的功能,满 足问题的功能。 模块:一个拥有明确定义的输入、输出和特性的程序实体。
11
抽象(Abstraction)
抽象原则应用举例 Windows NT一体化的I/O系统设计
文件管理 O 网络管理 S 设备管理
高速缓冲存储器
抽象
对虚拟文件的 字节流, 虚拟文件可为 任何设备和实 体
12
细化:即分解。 在逐步细化中,特别强调这种分解的“逐步” 性质,即每一部分仅较其前一部增加“少量” 的细节。这样,在相邻两部之间就只有微小的 变化,不难验证它们的内容是否等效。
56
模块化设计的原则和目标
耦合是影响软件复杂程度和设计质量的重要因素 目标:建立模块间耦合度尽可能松散的系统。
57
如何降低模块间耦合度?
(1) 如模块必须存在耦合,选择适当的耦合类型 原则:尽量使用数据耦合
少用控制耦合 限制公共耦合的范围 坚决避免使用内容耦合 (2) 降低模块间接口的复杂性
58
50
公共耦合举例
AB
common 公共数据区
松散的公共耦合
AB
common 公共数据区
紧密的公共耦合
51
公共耦合举例
AB C
公共数据区 模块A、B、C间存在错综复杂的联系
52
公共耦合举例
B
6个模块共享一
A
个公共数据区
E
C
所有的公共耦合 关系
D
F
53
公共耦合存在的问题:
(1)软件可理解性降低 (模块间存在错综复杂的连系)
21
模块的内聚性类型:
低 巧合内聚 内 逻辑内聚 聚 时间内聚 性 过程内聚
通信内聚 信息内聚 高 功能内聚
弱(功能分散)
模 块 独 立 性
强(功能单一)
22
(1) 巧合内聚(偶然内聚)
模块内各部分间无联系
例: A
B
C
M MOVE O TO R
READ FILE F MOVE S TO T 模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差。
47
改控制耦合为数据耦合举例
A
平均成绩
B1
计算平均分
最高成绩
B2
计算最高分
48
(5) 外部耦合
一组模块均与同一外部环境关联(例如,I/O模块 与特定的设备、格式和通信协议相关联),它们之 间便存在外部耦合。 外部偶合必不可少,但这种模块数目应尽量少。
49
(6) 公共耦合(公共数据区耦合)
一组模块引用同一个公用数据区(也称全局数据区、 公共数据环境)。 公共数据区指: 全局数据结构 共享通讯区 内存公共覆盖区等
相关文档
最新文档