第4章 结构化设计方法

合集下载

第四章 结构化设计习题

第四章 结构化设计习题

第四章结构化设计习题(一)名词解释

1. 软件概要设计

2. 模块

3. 模块化

4. 抽象

5. 信息隐蔽

6. 模块独立性

7. 耦合性

8. 数据耦合

9. 标记耦合

10. 控制耦合

11. 公共耦合

12. 内容耦合

13. 内聚性

14. 偶然内聚

15. 逻辑内聚

16. 时间内聚

17. 通信内聚

18. 顺序内聚

19. 功能内聚

20. 软件结构图

21. 结构化设计

22. 变换流

23. 事务流

24. 详细设计

25. 流程图

26. 过程设计语言

(二)填空题

1. 软件结构的设计是以为基础的。

2. 软件设计阶段,是把软件“”的逻辑模型变换为“”的物理模型。

3. 数据库的“概念设计”与“逻辑设计”分别对应于系统开发中的“”与“”,而数据库的“物理设计”与模块的“”相对应。

4. 概要设计文档主要有、、和。

5. 模块具有、、和几种基本属性。

6. 模块化指解决一个复杂问题时逐层把软件系统划分成若干的过程。

7. 衡量软件的独立性有两个定性的度量标准,即和。

8. 模块之间联系越紧密,其就越强,模块的则越差。

9. 模块的耦合性由低到高分为、、、、和。

10. 数据耦合传递的是,标记耦合传递的是,控制耦合传递的是。

11. 软件结构往往用结构的图形来表示。软件结构图是软件系统的

结构。

12. 面向数据流的设计又称,它是以需求分析阶段产生的为基础,按一定的步骤映射成软件结构。

13. 数据流图一般可分为和两类。

14. HIPO图中图用于描述软件总的模块层次结构,图用于说明模块间的信息传递及模块内部的处理。

15. 详细设计也称,它是软件设计的第二阶段,主要确定每个的具体执行过程。

软件工程 第七版 第4章 概要设计

软件工程 第七版 第4章 概要设计

第4章 4.3 概要设计的原则
9
2.抽象与分解 抽象是指忽视一个主题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方 面。抽象可以分成若干级别,级别越高,细节越少。其实整个软件的开发过程就是一个从抽象 到具体的过程:需求分析时,使用问题域语言来概括性地描述解决方案,抽象级别最高;软件 设计时,同时使用面向问题域和面向实现的两种术语描述解决方案,抽象级别次之;在编码时, 使用直接实现的方式(源程序代码)来描述解决方案,抽象级别最低。在软件设计中,过程抽 象和数据抽象是两种常用的抽象手段。
软件设计不同于程序设计,程序设计是软件设计的编码实现过程。软件设计的重要性有以 下几点:
(1)软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件 开发中形成质量的关键环节。
(2)软件设计是开发阶段最重要的步骤,是将用户需求准确地转化为最终的软件产品的 唯一途径。
(3)软件设计作出的决策,最终将直接影响软件实现的成败。 (4)软件设计是软件工程和软件维护的基础。
概要设计的基本任务是: (1)设计软件系统结构; (2)数据结构及数据库设计; (3)编写概要设计文档; (4)评审概要设计文档。
第4章 4.2 概要设计的任务与步骤
7
4.2.2 概要设计的步骤
概要设计的一般步骤如下: 1.选定体系结构 2.确定设计方案 3.设计软件结构 4.数据结构及数据库设计 5.制订测试计划 6.编写概要设计文档 7.概要设计文档评审

004第4章结构化程序设计

004第4章结构化程序设计

4.3.1 条件语句
if (InputScore >= 70) { if (InputScore >= 80) { if (InputScore >= 90) { OutputScore = "优秀"; //优秀 } else { OutputScore = "良好"; //良好 } } else { OutputScore = "中等"; //中等 } }
4.3.2 分支语句
case 7: OutputScore = "中等"; break; case 6: OutputScore = "及格"; break; default: OutputScore = "不及格"; break; } Console.WriteLine("百分制下{0}分经转换,为5分制下的{1}", InputScore, OutputScore); }
}
4.3.1 条件语句

2. if…else语句 if…else语句是一种更为常用的选择语句。if…else语 句的语法如下: if(表达式) { 语句块A; }
else
{ 语句块B; }
【例4-3】根据输入的学生
成绩Score的值,显示 其是否及格。
using System; class Score { static void Main() { Console.WriteLine("请您 输入学生成绩:"); int Score = int.Parse(Console.ReadLi ne());//转换为整数

第四章 结构化程序设计

第四章 结构化程序设计

4.2.3字符输入函数getchar()
运行结果如下: boy↙ boy
4.2.4格式化输出函数printf()
printf函数是C语言提供的标准输入函数, 它的作用是:按照规定的格式向终端设备输 出数据。 printf函数的一般调用形式如下: printf(格式控制串,输出表列) 其中,输出表列中列出要输出的数据项 (可以是常量、变量、表达式),如果是多 个输出项,则输出项之间用“,”隔开。格 式控制字符串则是用来说明输出数据的输出 格式。
4.2.4格式化输出函数printf()
①格式符
表格4.1种列出了几种常用格式符及其功能。
4.2.4格式化输出函数printf()
②宽度说明符 宽度说明符通常由以下三种形式:
m:m是一个整数,用来指定输出数据的宽度,当 数据的实际宽度大于指定宽度时,按实际宽度输出。 如果实际宽度小于指定宽度,则按指定宽度输出, 若无特殊说明,数据右对齐,左边补空格。 例如: printf(“%2d,%7d,%d”,123,123,123); 输出:123, 123,123
图4.2
4.1结构化程序设计概述
循环结构 又称重复结构,重复执行某段程 序,直到某个条件满足为止。循环结 构又分当型循环和直到型循环。
4.1结构化程序设计概述
当型循环的特点是: 先判断条件是否满足( 成立),满足就执行循 环体,每执行完一次就 判断一次,直到条件不 满足停止。如图所示。

第4章 结构化分析

第4章 结构化分析

7
Leabharlann Baidu.2 数据流图
三、数据流图绘制实例
实例:该供销系统可以接受顾客的订货单,当库存中某配件的数量小于订购量
或库存量低于一定数量时,向供应商发出采货单;当某配件的库存量大于或等于 订购量时,或者收到供应商的送货单并更新了库存后,向顾客发出提货单。该系 统还可随时向总经理提供销售和库存情况的统计表以备审查。该供销系统的部分 数据流组成如下所示: 订货单=配件号+配件名+规格+数量+顾客名+地址 提货单=订货单+金额 采货单=配件号+配件名+规格+数量+供货商名+地址 送货单=配件号+配件名+规格+数量+金额
缺货订单
采购清单 需增配件 清单 缺货单
不 货单
查询销售及 库存情况
1.4 更新库存 1.3 制作销售及 库存情况表
到货单
送 合格
提货单
请 求
销售及库存情况
采 购
2.3 计算配 件增量
2.4 核对送 货单

送货单



销售历史
配件库存
10
4.3 实体—关系图
数据模型包含3种相互关联的信息:数据对象、描述数据对象的属性及数据对
12
4.4 数据字典
一、数据字典的定义与用途
定义:数据字典是关于数据信息的集合,是数据流图中所有元素严格定义
的场所,每个元素要对应数据字典中的一个条目。数据字典中的条目应按一 定次序排列,以方便查阅。

《软件工程概论》郑人杰版 第4章 结构化设计方法

《软件工程概论》郑人杰版 第4章 结构化设计方法

4.1 软件设计的概念及原则
(2) 模块独立性
定义: 是指软件系统中每个模块只涉及软件要求 的具体的子功能, 而和软件系统中其它模块的接 口是简单的。
有效的模块化使软件便于分工协作开发。 独立的模块比较容易测试和维护。
4.1 软件设计的概念及原则
模块独立性的度量准则
耦合:是模块之间的互相连接的紧密程度的度量。 内聚:是模块功能强度(一个模块内部各个元素彼
4.1 软件设计的概念及原则
模块内聚
低 低等内聚
偶然内聚 逻辑内聚

时间内聚


过程内聚
通信内聚
中等内聚
顺序内聚
高 功能内聚
高等内聚


模块独立性
4.1Fra Baidu bibliotek软件设计的概念及原则
偶然内聚(Coincidental Cohesion)
• 当模块内各部分之间没有联系,或者即使有联系,这种联 系也很松散,则称这种模块为偶然内聚模块,内聚程度最 低。
此结合的紧密程度)的度量。 模块独立性比较强的模块应是高内聚低耦合的模
块。
4.1 软件设计的概念及原则
高 耦 合 性
高等耦合
内容耦合 公共耦合
特征耦合 控制耦合
中等耦合
数据耦合
低 非直接耦合
低等耦合

CHAP04 结构化设计_1 总体设计

CHAP04 结构化设计_1 总体设计


模块间的耦合度就是模块间的依赖性。耦合越高,维护成本越 高。因此模块设计应使模块间的耦合最小。 设计模块时,尽量使用数据耦合,少用特征耦合与控制耦合, 限制使用公共耦合,完全不用内容耦合。
4.2.4 模块独立 • 内聚
– 定义:模块的内聚是指一个模块内部的各个组成部 分的紧凑性,其处理动作的组合强度。 – 内聚的种类(只介绍几种)
发货
单价 总金额 数量 计算金额 计算水费 水费 电费 计算电费 本月用水量 计算水费和电费 本月用电量
特征耦合的耦合强度显然比数据耦合要高。 不仅在模块间传递的数据量增加了,而且当“住户详情”的数据 结构发生变化时,图中的两个模块都要发生变化。
• 2、特征耦合
– 一组模块通过某一数据结构来传递记录信息,而不 是简单变量。这种耦合称为特征耦合。
• 设计阶段
– 解决“怎么做”的问题 – 软件系统设计是开发者之间的分工和合作的基础 – 设计方案是决定系统质量的主要因素
• 设计方案可以借鉴成熟的设计经验 • 设计方案完成后需要经过质量分析和评审
– 好的设计方案不仅能很好地支持当前需求的实现, 而且能减小未来的系统维护成本。
计划 时期
问题定义
可行性研究
• 总体设计方法
– 结构化设计(SD)方法:以数据流图为基础构造 模块结构; – Jackson方法:以数据结构为基础构造模块结构 – Parans方法:以信息隐蔽为原则构造模块结构

第四章 结构化分析与设计3

第四章 结构化分析与设计3

层次图比较适于在自顶向下逐步求精设计软件的过程中使用。
优点是图形清晰,因此被广泛地应用。
缺点是不能表明软件的主要执行逻辑,尤其没有表明模块之
间的通讯情况。
4.3.1 软件结构的图形表示
(2)软件结构图 结构图(Structure Chart,简写为SC)是进行软件结构设计 的一个有力工具。软件结构图符号表4.2所示。
4.3.2 数据流的类型
(2)事务型数据流图 数据流沿着输入路径到达一个事务处理中心,事务处理中心 根据输入的值选择多条加工路径中的其中一条来执行,具有这 种特征的信息流称为事务流,事务型数据流图如图4.17所示。
图4.17 事务型数据流
4.3.2 数据流的类型
图4.17中的加工T称为事务处理中心,其主要任务如下: ①接收输入数据流(即事务)。 ②分析每个事务的类型,确定其类型。 ③根据事务类型选择执行一条加工路径。
形式的转换:格式转换、组成物理块、缓冲处理等。
4.3.4 变换分析
③确定变换中心 在确定了所有的逻辑输入和逻辑输出后,在两者之间虚线画出一个边界 线,在界线以内的部分,就是变换中心部分。
图4.19 统计成绩子图的输入、输出流边界
4.3.4 变换分析
(2)完成第一级分解,设计软件结构的顶层和第一层 在变换中心确定以后,就相当于决定了主模块的位置,这就是软件结构 的项层。

第4章管理信息系统的结构化开发方法

第4章管理信息系统的结构化开发方法
12
三、制定开发计划
管理信息系统开发计划主要是针对已确定的开发策略, 相应的开发方法。我们在选择开发方法时必须注意到这种方 法所适用的开发环境、所需要的计算机软、硬件技术支撑以 及开发者对其的熟悉程度。
开发计划主要包括制定系统开发的工作计划、投资计划、 进度计划、资源利用计划。制定开发计划一般是根据系统的 具体问题、具体情况而定。在一般情况下,我们可利用项目 管理中的甘特图来记载和描绘系统开发计划的时间、进度、 投入和工作顺序之间的关系。
20
三、系统详细调查的内容及方法
一般用组织结构图来描述组织的结构,用管理业务流程图和 表格来描述管理业务状况,用功能结构图描述系统的功能体 系,用数据流程图描述系统的数据流程。 ⑴组织结构的调查与分析 系统组织结构调查主要是通过对系统组织结构进行调查研究, 组织结构是指一个组织(企业、部门、车间、科室等)及其 组成部分之间的隶属关系或管理与被管理的关系,一般用组 织结构图表示。
通过调查,认识现行系统 抽象出现行系统的逻辑模型 建立新系统的逻辑模型
18
4.2.2 现行系统的详细调查
一、系统详细调查的目的 详细调查的目的是深入了解组织管理工作中信息处理的全部 具体情况和存在的具体问题,为确定新系统的逻辑模型提供 可靠的依据。因此详细调查的工作量也要大得多。
19
二、系统详细调查的范围
一般来说,可行性分析工作的成本是预期项目总成本 的5%-10%。

软件工程第4章概要设计

软件工程第4章概要设计

6.数据耦合
如果一个模块访问另一个模块时,彼此之 间是通过简单数据参数,来交换输入、输出 信息的 不是 控制参数 公共数据结构 外部变量
数据耦合举例
开发票 单价 数量
金额
计算水费
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
水费
本月 用电量
电费 计算电费
计算水费
7.非直接耦合
3. 深度、宽度、扇出和扇入
扇出=3
深度 =5
扇出=4
扇入=4 深宽 =8
3. 深度、宽度、扇出和扇入(2)
深度表示软件结构中所控制的层数,它往往能 粗略地标志一个系统的大小和复杂程度。深度 和模块源代码长度之间应该有大致的对应关系, 当然这个对应关系是在一定范围内变化的。如 果层数过多则应该考虑管理模块是否过分简单 了,能否适当合并。 宽度是软件结构中模块数最多那一层的模块数 目。一般说来,宽度越大系统越复杂。
函数A 函数B 函数C 数据集
通常,通信内聚模块是通过数据流图来定义的。
5.通信内聚(2)
6.功能内聚
一个模块中各个部分都是完成某一具体功能 必不可少的组成部分 或者说该模块中所有部分都是为了完成一项 具体功能而协同工作,紧密联系,不可分割 的 软件结构中应多使用功能内聚类型的模块
内聚类型汇总
5. 降低模块接口的复杂性

第三章软件工程结构化分析

第三章软件工程结构化分析
决定模块耦合程度的因素:
模块间接口的复杂性、调用的方式、传递的信息(数据)。
结论:
块间联系越紧密→耦合性就越强→模块的独立性就越差
设计原则: 尽量使用数据耦合,少用控制耦合 限制公共耦合的范围,完全不用内容耦合
模块间的耦合类型
② 内聚
定义
又称为块内联系,是对模块功能强度的度量。即对一 个模块内部各个元素间彼此结合紧密程度的度量。
C
D
E
F put f9 G put f10
get f1 A
H put f11
事务型 DFD
1、确定DFD中的事务中心和处理路径
当数据流图中的某个处理模块具有明显地将一个输入数 据流分解成多个发散的输出数据流时,该处理模块就是
事务中心,从事务中心辐射出去的数据流即为各个 处理路径。
2、设计软件系统的顶层和第0层
f1
接 收 分 支
主模块A
f1
f1
get f1
调度
发 送 分 支
事务中心 输入流
处理路径
B CD 动作层
细节层
数据流图转换为软件系统结构
实例1:机票预订系统
旅行社 订票单 分类并检查 有效订票单 订票
票有 单效
= 记帐文件



旅客

记帐
机票准备

软件工程导论第四章

软件工程导论第四章

34
4.4 启发规则(模块设计原则)
• 软件工程师们在开发计算机软件的长期实 践中积累了丰富的经验,总结这些经验得 出了一些启发规则 • 往往能帮助软件设计人员找到改进软件设 计提高软件质量的途径,因此有助于实现 有效的模块化
2017/12/18
35
4.4 启发规则(模块设计原则)
• 1)提高模块独立性 • 2)模块规模应该适中
12
4.2 软件设计的概念和原理
• 2)抽象
什么是抽象
• 抽出事物的本质特性而暂时不考虑它们的细节
软件工程过程的每一步都是对软件解法的抽象 层次的一次精化
• 计划阶段
– 软件系统被描述为整个计算机系统中的一个部分
• 需求分析
– 软件用问题域约定的大家所熟悉的习惯用语描述
2017/12/18
13
2017/12/18
24
耦合与模块独立性
数据耦合 模块独立性 特征耦合 控制耦合 公共环境耦合 内容耦合 耦合性
原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,不用内容耦合
2017/12/18
25
内聚
• 内聚是一个模块内各个元素彼此结合的紧 密程度,好内聚的模块只做一件事情
功能内聚 顺序内聚 通信内聚
• (5) 模块保护性
–如果在一个模块内出现异常情况时,它的影响局限在该模 块内部,则由错误引起的副作用将最小

精选第4章结构化程序设计资料

精选第4章结构化程序设计资料

Chap4 结构化程序设计及正确性证明
流程图程序举例
流程图程序举例:
g q
p f
Chap4 结构化程序设计及正确性证明
正规程序
4. 正规程序
定义:满足以下两个条件的流程图程序称为正规程 序。条件:
具有一条入口线和一条出口线,且
对每个节点,都有一条从入口线到出口线的通路通过该 节点。
为提高效率,同时又不破坏程序的良好结构,有控制地使用 GOTO语句是有必要的。
Chap4 结构化程序设计及正确性证明
结构程序设计结论
结论:
结构程序设计讨论的是一种程序设计的方法和 风格。关注的焦点是得到的程序的结构的好坏, 而有无GOTO语句并不是一个程序结构好坏的 标志。避免和限制使用GOTO语句是得到结构 化程序的一种手段,而不是我们的目的。
[while-do] = {(x,y)|k0 ((j:0<=j<k:p ·f j(x))| ¬p ·f k(x)y= f k(x))}
[do-until] = {(x,y)| k>0 (j:1<=j<k)( ¬ p ·f j(x)| p ·f k(x)y= f k(x))}
[do f while p do g od] = {(x,y)| k0 ( j : 0<=j<k : p ·f ·(g ·f) j(x))| ¬p ·f ·(g ·f) k(x)y= f ·(g ·f) k(x))}

第四章 结构化分析与设计

第四章 结构化分析与设计

第四章结构化分析与设计

学习目的及要求:通过本章结构化分析与设计的学习,掌握结构化方法的主要思想和过程。重点要求掌握软件系统结构化分析阶段的数据流图、数据字典和加工小说明的绘制和编写;结构化设计阶段从数据流图到结构图的映射方法,理解模块的合并、分解和优化方法。

引言

结构化方法是传统的软件分析和设计方法,包括在需求分析阶段的结构化分析方法和设计阶段的结构化设计方法,也就是把结构化的思想融入到分析和设计阶段。在结构化分析阶段,通过对软件的数据、功能和行为的分析并进行分析建模,产生软件系统的数据流图、数据字典和加工小说明。结构化设计阶段应用一定的规则把数据流图映射为结构图,转换为模块化的系统体系结构,并进行对模块的修改和优化,为结构化程序设计打下基础。

4.1结构化分析方法概述(历史、主要思想、过程)

结构化开发方法(Structured Developing Method)是现有的软件开发方法中最成熟、应用最广泛的方法,其主要特点是快速、自然和方便。结构化开发方法由结构化分析方法(Structured Analysis Method)、结构化设计方法(Structured Design Method)及结构化程序设计方法(Structured Program Method)构成的。结构化分析方法于20世纪70年代中期由E.Yourdon,Constaintine及DeMarco等人提出并得到了广泛的应用,是强调开发方法的结构合理性以及所开发软件的结构合理性的一种面向数据流的分析方法。所谓结构是指系统内各个组成部分之间的相互关系,而结构化方法采用一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等来进行分析建模。结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术,它一般利用图形表达用户需求,主要使用的手段有数据流图、数据字典、结构化语言、判定表以及判定树等。

第四章结构化程序设计控制结构

第四章结构化程序设计控制结构


PRINT*,‘TRIPS =’,TRIPS

T=TStart
下面例子是算术IF 语句
• SUBROUTINE Proc(A,B,C)

!求方程 A*X^2+B*X+C=0 的根,用算术 IF 语句

REAL,INTENT(IN)::A,B,C

REAL X1,X2,Disc

IF (A==0) GOTO 40

Disc=B*B-4*A*C

IF (Disc)10,20,30
(5)循环次数的计算按下面公式:
• MAX ((表达式2 - 表达式1+ 表达式 3)/表达式3,0)
系统在进行确定性循环时,先按上述公式计算循环次数,如 果循环变量的步长为0,就会发生除 0 运算的错误。

DO I = 2,7,2

WRITE(*,‘(I3)’,ADVANCE = ‘NO’) I

case default

PRINT*,‘Consonant’

END SELECT

ELSE

PRINT*,‘Something else’
CASE块的构造形式为:

SELECT CASE (expr)

CASE (se来自百度文库ector1)

第4章 结构化系统开发方法

第4章 结构化系统开发方法

图4-4 DFD的绘制流程
第4章 结构化系统开发方法 4.3系统分析 4.3.2数据流图 2.DFD绘制流程 (1)范围图
图4-5 系统的范围图
第4章 结构化系统开发方法 4.3系统分析 4.3.2数据流图 2.DFD绘制流程 (2)顶层图
图4-7 图书管理信息系统的顶层图
第4章 结构化系统开发方法 4.3系统分析
图4-11 图书管理系统的功能图
第4章 结构化系统开发方法 4.3系统分析 4.3.4信息系统逻辑模型 2.信息处理描述 (1)程序流程图 (2)决策树 (3)决策表 (4)结构化语言 4.3.5系统分析的成果
第4章 结构化系统开发方法 4.4系统设计 4.4.1系统总体设计 1.系统结构 2.U/C矩阵 3.系统结构的优化
第4章 结构化系统开发方法 4.2系统规划
4.2.1规划的任务 1.信息系统规划的目的 解决管理效率问题或提高科学决策的水平; 提高竞争力; 寻找新的发展机会等 2.信息系统规划的步骤 规划基本问题的确定;收集信息;现状的评价和约束 的识别;设置具体目标和初步方案;规划内容及其相 关性分析;目标的分析及实现的优先级;人员组织; 实施进度计划,包括经费预算和使用计划;成本分析、 效益初步分析;开发平台硬件软件环境(不一定马上 购买);可行性分析。
第4章 结构化系统开发方法 4.3系统分析 4.3.4信息系统逻辑模型 信息系统的逻辑模型的表达主要包括: 功能模型:描述新系统的功能; 数据流程图:描述信息和信息的流动; 信息模型:数据字典和数据库结构等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章结构化设计方法

4.1 当你“编写”程序时你设计软件吗?软件设计和编码有什么不同吗?

在“编写”程序时并没有设计软件。软件设计包括概要设计和详细设计,编码是将详细设计中的过程描述转换成用程序设计语言来描述。

4.2 举出3个数据抽象的例子和可以用来操作这些数据抽象的过程抽象的一个例子。

抽象是忽略事物的细节,获取其本质特征的过程。抽象是一种重要的机制,使人们能够对复杂系统能够很好地理解、交流和推理。在软件领域,可以将抽象分为两类,即数据抽象和过程抽象。

在传统的结构化程序设计语言中,就提供了这两种抽象机制。

(1) 数据抽象:在所有的结构化程序设计语言中,用户都可以自定义抽象数据类型。如定义抽象数据类型Student(学生)、Course(课程)、ClassScoreList(班级成绩单)。

(2) 过程抽象:过程抽象也称为是基于方法的抽象。过程抽象使我们关心处理过程的名字和它能做什么,而无需知道如何完成所有实现细节。如求班级总平均分average(ClassScoreList)就是一个过程抽象。

在面向对象的程序设计语言中,抽象与封装的概念密切相关,数据抽象和相关的过程抽象被封装在类中,不同类中相似的过程抽象(方法)又可以进一步抽象,放在接口中。封装是保证事物有明确内外界限的机制。内部是受保护的,与外部事物相隔离。

4.3 应在什么时候把模块设计实现为单块集成软件?如何实现?性能是实现单块集成软件的唯一理由吗?

由于模块之间的调用降低了系统的运行速度,可能会导致满足不了用户的性能要求,这时就需要将软件设计为单块集成软件。但是在设计时,最好按照模块化的原则进行设计,只是没有显式的模块定义而已。这样的程序也具有模块化的优点。性能是实现单块集成软件的唯一理由。

4.4 是否存在一种情况:复杂问题需要较少的工作去解决?这样的情况对模块化观点有什么影响?

通过对复杂的问题进行合理分解,分解为若干个相对简单及独立的子问题,就可以用较少的工作去解决。这种情况能够较好地支持模块化的观点,每个子问题用单独的模块去解决,模块之间应该是高内聚、低耦合的,这样才能减少工作量,否则,虽然每个模块的工作简单了,但模块之间的联系很复杂,也增加了问题解决的难度和工作量。

4.5 使用数据流程图和处理叙述,描述一个具有明显事务流特性的计算机系统。使用本章所介绍的技术定义数据流的边界,并将DFD 映射成软件结构。 略。

4.6 一些设计人员认为所有的数据流都可以当做是变换流。试讨论当事务流被当成变换流时,会对导出的软件体系结构有什么影响。请使用例子来说明要点。

当事务流被当成变换流时,首先按变换流导出软件结构,之后再将位于中间的“变换模块”替换成事物中心。所不同的是,其输入数据不是来自下属的输入模块,而是从最顶层的主控模块传入的,输出数据也是传给主控模块,之后再由主控模块传给输出模块。这样会增加模块层次及数据的传送次数。

例如,对于下面的事务型数据流,如果按照事务型数据流进行处理,得到的初始模块结构如右图所示。

事务型数据流 按事务型得到的软件结构 如果按变换型处理,得到的初始结构图如下图所示。

初始结构图 再对中间部分进一步分解,得到下面的结构图。

第4章 习题与思考题参考答案

3

如果想缩短数据传递的路径,就需要对上图进行改进,可以将“调度”模块合到“事务中心”模块中。 4.7 什么是持久的数据源?

对于应用系统来说,持久的数据源是指应用系统关闭再重新启动后,关闭之前的数据依然存在。这些数据一般要存储在文件或数据库中。

4.8 用面向数据流的方法设计第3章习题3.4所描述的银行存款业务的软件结构,并使用改进方法对模块结构进行精化。

(1) 对第3章习题3.4给出的数据流图进行精化,确定其边界,如下图所示。

(2) 对上图按事务型数据流进行处理,完成第一级分解,得到顶层和一层模块结构图。

第一级分解后的结构图

(3) 完成第二级分解。对上图所示的“输入数据”、“输出数据”和“调度”模块进行分解,得到未经精化的输入结构、输出结构和事务结构。

未经精化的输入结构

未经精化的输出结构

第4章习题与思考题参考答案

未经精化的事务结构

将上面的三部分合在一起,得到初始的软件结构,如下图所示。

初始软件结构图

(4) 对软件结构进行精化。

1) 由于调度模块下只有两种事务,因此,可以将调度模块合并到上级模块中,如图所示。

将调度模块合并到上级模块后的软件结构

2) “记录密码”模块的作用范围不在其控制范围之内(即“输入密码”模块不在“记录密码”模块的控制范围之内),需对其进行调整,如图所示。

3) 提高模块独立性,对模块结构进行调整,如下图所示。

调整后的模块结构图

4.9 将大的软件划分成模块有什么好处?是不是模块划分得越小越好?划分模块的依据是什么?

将大的软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同的功能或职责。这种方法有利于将复杂的问题简单化,是分而治之策略的具体表现。

尽管模块分解可以简化要解决的问题,但模块分解并不是越小越好。当模块数目增加时,每个模块的规模将减小,开发单个模块的成本确实减少了;但是,随着模块数目增加,模块之间关系的复杂程度也会增加,设计模块间接口所需要的工作量也将增加。

划分模块的依据是,模块只具有单一的功能且与其他模块没有太多的联系。

4.10 什么叫“自顶向下、逐步细化”?

自顶向下、逐步细化的设计过程,主要包括两个方面:一是将复杂问题的解法分解和细化成由若干个模块组成的层次结构;二是将每个模块的功能逐步分解细化为一系列的处理。

在处理较大的复杂任务时,常采取“模块化”的方法,即在程序设计时不是将全部内容都放在同一个模块中,而是分成若干个模块,每个模块实现一个功能。划分模块的过程可以使用自顶向下的方法实现。

模块分解完成后,下一步的任务就是将每个模块的功能逐步分解细化为一系列的处理。这个过程是对问题求解,并由抽象逐步具体化的过程。使用这种方法便于检查程序的正确性。在每一步细化之前,应仔细检查当前的设计是否正确。如果每一步细化、设计都没有问题,则整个程序的算法是正确的。由于每一次向下细化都不太复杂,因此容易保证整个算法的正确性。

相关文档
最新文档