当前位置:文档之家› 第五章 总体设计(wang)

第五章 总体设计(wang)


全 局 性简单变量
外部耦合
T S1
Flag=1?
F
S2
设计原则:尽量使用数 据耦合,少用控制耦合,限 制公共环境耦合,完全不用 内容耦合
2014/12/5
19
5.2.5 模块独立——耦合
(1)非直接耦合
如果两个模块之间没有直接关系,
它们之间的联系完全是通过主模 块的控制和调用来实现的,这就
是非直接耦合。
15

信息隐蔽和局部化的优点


5.2.5 模块独立
模块独立是模块化、抽象、信息隐蔽和局部化概念的直接结果
每个模块完成一个相对独立的子功能,和其他模块间关系简单 为什么模块的独立性很重要呢?模块独立是做好设计的关键, 而设计又是决定软件质量的关键环节

有效的模块化(即具有独立的模块)的软件比较容易开发出来。 (当许多人分工合作开发同一个软件时,这个优点尤其重要。)

用户界面设计 数据结构与算法设计

系统实现

编码和单元测试 综合测试
1
软件工程
第五章
总体设计
中南大学 Central South University
总体设计阶段的任务
需求分析回答了“系统必须做什么?”这个问题。总体设计的
基本目的是回答“怎么做?如何实现?”这个问题
总体设计的两项任务 划分出组成系统的物理元素----程序、文件、数据库、文档 设计软件的结构----确定每个程序的模块组成及模块之间的相互关系
标识符代表它。 把程序划分成若干个模块,每个模块完成一个子功能,把这
些模块集成起来组成一个整体,可以完成指定的功能,满足用
户的需求。 有人认为模块化是为了使复杂的大型程序能被人的智力所管
理,软件应具备的唯一属性。
一个大型程序如果只有一个模块组成,它将很难被人理解。
6
5.2.1 模块化
设函数C(x)定义问题x的复杂程度,函数E(x)定义解决问题x需
5.1 设计过程
总体设计过程的两个阶段: 系统设计阶段,确定系统的具体实现方案 结构设计阶段,确定软件结构
3
5.1总体设计过程
1.设想供选 择的方案 2.选 取 合 理的方案 3.推荐最 佳方案 4.功能 分解 5.设计软 件结构
•系统流程图
数据流图是总 体设计极好的 出发点 •组成系统的物理元素清单 • 成本/效益分析 • 实现系统的进度计划 9.审查和 复 审 8.书写 文档 •系统说明 •用户手册 • 测试计划 • 详细的实现计划 • 数据库设计结果
弱耦合
模块B
模块1模块26. 共耦合7. 内容耦合较强耦合
模块3 模块4
同构耦合 通过数据结 构交换数据
强耦合
非直接耦合 控制耦合 公共环境耦合 内容耦合 低 高
2014/12/5
18
5.2.5 模块独立——耦合
耦合
模块B
模块A
模块C 模块D 全局性数据结构 公共耦合
模块L
模块N
模块1
控制耦合 模块之间传递 的是控制信息
步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细
节的考虑。” 逐步求精:最初是由Wirth提出的一种自顶向下的设计策略。按照此 策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。 通过逐步分解对功能的宏观陈述而开发出层次结构,最终得到用程序 设计语言表达的程序。
13
5.2.3
7.制订测 试计划
6.数据库 设 计
典型的总体设计过程步骤
4
5.2 设计原理
在软件设计过程中应该遵循的基本原理和 相关概念

模块化


抽象
逐步求精
信息隐蔽和局部化
模块独立
5
5.2.1 模块化
模块是由边界元素限定的相邻程序元素(如数据说明、可执
行语句等)的序列,是构成程序的基本构件,而且有一个总体

造和理解,这些高级概念又可以用一些较低级的概念构
造和理解,如此进行下去,直至最低层次的具体元素。
10
5.2.2 抽象

软件工程中的抽象:软件工程过程中的每一步都是对 软件解决方法抽象层次的一次细化。
一个元素(完整部件)。
① 在可行性研究(即系统定义)阶段,软件作为整个计算机系统的
② 在需求分析阶段,软件解决方案使用问题环境中的术语来描述。 ③ 从概要设计到详细设计阶段抽象层次逐步降低,将面向问题的计 算机术语和面向实现的计算机术语结合起来描述解决方法。 ④ 最低层抽象层次,是产生源代码,用可以直接实现的方法叙述问 题的解决方法。

“隐蔽”意味着模块彼此间仅仅交换那些为了完成系统功能而必 须交换的信息。

“局部化”是指把一些关系密切的软件元素物理地放得彼此靠近。 局部化有助于实现信息隐蔽。 测试期间和软件维护期间需要修改软件,使用信息隐蔽原理作为 模块化系统设计的标准就会带来极大好处。
因为大多数数据和过程对于软件的其他部分而言是隐蔽的,在修 改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。

逐步求精
抽象与求精的关系

抽象与求精是一对互补的概念。
抽象使得设计者能够说明过程和数据,同时却忽略低层细节。 求精则帮助设计者在设计过程中逐步揭示出低层细节。 这两个概念都有助于设计者在设计演化过程中创造出完整的设 计模型。
14
5.2.4 信息隐蔽和局部化

信息隐蔽原理:应该这样设计和确定模块,使得一个模块内包 含的信息(过程和数据)对于不需要这些信息的模块来说,是 不能访问的。


Computer_water(&Struct_user) { 计算水费 }; Computer_ elect (&Struct_user) { 计算电费 }; Main { Computer_water(&user1); Computer_elect(&user1); }
2014/12/5
22
5.2.5 模块独立——耦合
要的工作量(时间)。对于两个问题P1和P2,如果: C(P1)>C(P2)
那么 E(P1)>E(P2)
根据解决问题的经验,有一个规律是: C(P1+P2)>C(P1)+C(P2)
于是有
E(P1+P2)>E(P1)+E(P2)
“各个击破”的结论——把复杂的问题分解成许多容易解决的小问题, 原来的问题也就容易解决了
24
5.2.5 模块独立——耦合
(4)控制耦合
如果一个模块通过传送开关、标志、
名字等控制信息,明显地控制选择另 一模块的功能,就是控制耦合。


控制耦合传递的是控制变量。
对所控制模块的任何修改,都会影响 控制模块。

控制耦合也意味着控制模块必须知道 所控制模块内部的一些逻辑关系,这 些都会降低模块的独立性。
23
5.2.5 模块独立——耦合
将特征耦合转换为数据耦合?
Struct_user { char[8] name; Char[8] identy_ID; Char[20] address; float water; 数据耦合传递的是简单参数 float electricity; } user1; Computer_water(float) { 计算水费 }; Computer_ elect (float) { 计算电费}; Main { Computer_water(&user1->water); Computer_elect(&user1->electricity); }
这种耦合的模块独立性最强。

但是,在一个软件系统中不可能
所有模块之间都没有任何连接。
2014/12/5
20
5.2.5 模块独立——耦合
(2)数据耦合

如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控 制参数、公共数据结构或外部变量,而是简单的数据)来交换输入、 输出信息的,则称这种耦合为数据耦合。 数据耦合是松散的耦合,模块之间的独立性比较强。在软件程序结构 中至少必须有这类耦合。最好的耦合方式 main() { int x,y; printf("x+y=%d",sum(x,y)); } sum(int a,int b) { int c; c=a+b; return(c); } 主函数与sum函数之间即为数据耦合关系
11
5.2.2 抽象

抽象在软件设计中的作用:

抽象与逐步求精,模块化密切相关; 抽象帮助我们定义软件结构中模块的实体; 由抽象到具体地分析和构造出软件的层次结构,提高软件的可
理解性。
12
5.2.3

逐步求精
什么是逐步求精
逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工 程技术(例如,规格说明技术,设计和实现技术)的基础。可以把逐
控制耦合:模块之间传递的参数含有控制信息
公共环境耦合:两个或多个模块通过一个公共数据环境相互作用 内容耦合:是最高程度的耦合,出现下列情况之一,两个模块就发 生了内容耦合: 一个模块访问另一个模块的内部数据 一个模块不通过正常入口而转到另一个模块内部 两个模块由一部分程序代码重叠
Struct_user { char[8] name; Char[8] identy_ID; Char[20] address; float water; float electricity; } user1; Computer_water(&Struct_user) { 计算水费 }; Computer_ elect (&Struct_user) { 计算电费 }; Main { 标记耦合传递的是数据结构的地址 Computer_water(&user1); Computer_elect(&user1); }
相关主题