第4章 结构化设计方法

合集下载

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

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

软件需求分析阶段的工作,可以分成以下四个方面 :对问题的识别、分析与综合、制定规格说明以及 ( )。 A.总结 B.实践性报告 C.需求分析评审 D.以上答案都不正确
答案:C
需求验证应该从下述几个方面进行验证:(C ) A 可靠性、可用性、易用性、重用性 B可维护性、可移植性、可重用性、可测试性 C一致性、现实性、完整性、有效性 D 功能性、非功能性
3、需求分析步骤
1、需求获取
3、亲身实践:观察用户工作流程
优点: 1. 通过直接观察提取用户或系统的特性; 2. 有助于理解难以用语言描述清楚的复杂业务。 3. 更加准确和真实 缺点:
1. 观察可能使用户紧张,从而表现与往常不同。 2. 比较费时间
3、需求分析步骤
1、需求获取
3、需求分析步骤
3、需求分析步骤
3 需求描述
1. 又叫:需求规约
2. 是分析任务的最终产物,给出对目标软件的 各种需求。
3. 需求规约作为用户和开发者之间的一个协议 (需求规格说明书),在之后的软件工程各 个阶段发挥重要作用
软件需求分析阶段的目的是澄清用户的要求 ,并把双方共同的理解明确地表达成一份书 面文档——(软件需求规格说明书)。
经调查,系统分析员给出有问题的初略陈述, 其中部分描述如下:某商场的采购部门要求每 天开出定购清单,交采购员输入系统;仓库管 理员还要将库存信息此输入系统,经库存业务 (进贷或出贷)处理后输出。从这段描述可知 该部分数据流图中的外部项为:
A.采购员、仓库管理员 B.定购清单、库存业务 C.库存业务 D.定购清单、采购员 答案A
3、需求分析步骤
4、需求验证
1. 进行需求评审
2. 验证需求的一致性
3. 验证需求的现实性

第四章 不同结构化程度的幼儿园教育活动设计4-1

第四章 不同结构化程度的幼儿园教育活动设计4-1

案例2
• 小班科学活动“谁的小脚丫”设计思路
补充案例
• 大班数学活动“区别左右”
• 思考:设计思路说明了什么?
区别左右(大班)
瑞金一路幼儿园 徐艳峰 2012.10
设计思路:
区分左右是前后上下方位学习的延续, 但认识左右比认识前后上下对幼儿而言 要更具挑战性,因为“左右”的含义及 其相对性要具有更强的空间观念。
参考网站:中国幼儿园教案网
大班科学活动:水的三态变化
• 活动目标:1.了解水的变化,知道水遇热会变成水蒸气,遇冷会结冰。 2.那用语言表达自己观察到的水的三态变化。3.用多种感觉和体验 水的变化的有趣和好奇。 • 活动准备:电热水壶一个、2人一块冰 • 活动过程: • *小实验:水→蒸气:在孩子共同关注下,观察烧开水,水和蒸气互 变现象,看看电热水壶口往外冒气时,把一个盘子放在壶口上会发生 什么现象,观察蒸气凝成的小水珠。蒸气→水:看看盘子上有什么, 小朋友可以把手掌触摸蒸气感受手的潮湿。 • *让孩子看一看、闻一闻、摸一摸冰块,感知冰的特性,说一说冰块 放在手心有什么感觉。
设想通过这样一个学习活动达到发展 幼儿的空间观念,为今后认识立体图 形进一步发展幼儿空间方位知觉打好 基础。
从本班幼儿的年龄特点、已有数学经验和水 平进行考量,此次活动的目标预设为: 1、尝试以自身为中心区分左右,初步积累 判断左右的方法。 2、提高幼儿细致观察和辨别能力,体验与 同伴合作游戏的快乐。
参考网站:中国幼儿园教案网
大班科学活动:水的三态变化
• 孩子们看到老师准备电热水壶,又打了水,都围起来看。小实验开 始了,插电加热,很快水开了。老师说:“水壶的嘴巴冒气了,这个 现象我们叫它什么?” 有的说冒烟、有的说“水蒸气”在孩子共同 关注下,观察烧开水,水和蒸气互变现象,看看电热水壶口往外冒气 时。老师把一个盘子放在壶口上发生什么现象?看看盘子上有什么, 盘里有许多水珠。小朋友可以把手掌触摸蒸气,感受水的变化。老师 打开窗,水蒸气出去了,去哪儿?变成什么? 老师告诉他们,为什么会有这种变化,冰在0度凝固,温度升高了冰 块会融化的。小朋友很喜欢冰块,这些冰块被小朋友玩到融化成水了, 还依依不舍。怎么会变成冰呢?请大家回去放水到一个容器内进冰箱 里,一段时间,就做成冰块了。

004第4章结构化程序设计

004第4章结构化程序设计

4.3.1 条件语句
if (InputScore >= 70) { if (InputScore >= 80) { if (InputScore >= 90) { OutputScore = "优秀"; //优秀 } else { OutputScore = "良好"; //良好 } } else { OutputScore = "中等"; //中等 } }
if (Score >= 60) { Console.WriteLine("该成 绩合格。"); } else { Console.WriteLine("该成 绩不合格。"); } }
}
4.3.1 条件语句

如果程序的逻辑判定关系比较复杂,可以用if…else嵌套语句 形式如下: if(表达式1) if(表达式2) if(表达式3) ... 语句1; else 语句2; else 语句3; else 语句4;
}
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-4】假设考查课的成绩按优秀、良好、中等、及格和不及

软件工程概论课后答案解析

软件工程概论课后答案解析

第1章软件与软件工程的概念1、1 举出您所知道的应用软件的例子。

办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。

1、2 认为“软件就就是程序,软件开发就就是编程序。

”这种观点就是否正确?为什么?认为“软件就就是程序,软件开发就就是编程序。

”这种观点就是错误的。

首先,软件就是计算机系统中与硬件相互依存的另一部分,它就是包括程序,数据及其相关文档的完整集合,程序只就是软件的组成部分之一;其次,在软件开发中,编程只就是软件开发过程的一个阶段。

1、3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么?可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。

1、4 什么就是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机:软件危机就是指在计算机软件的开发与维护过程中所遇到的一系列严重问题。

典型表现:(1)对软件开发成本与进度的估计常常很不准确。

(2)用户对“已完成的”软件系统不满意的现象经常发生。

(3)软件产品的质量往往靠不住。

(4)软件常常就是不可维护的。

(5)软件通常没有适当的文档资料。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。

(7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。

产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面:(1) 缺乏软件开发的经验与有关软件开发数据的积累,使得开发工作计划很难制定。

(2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。

(3) 软件开发过程不规范。

如,没有真正了解用户的需求就开始编程序。

(4) 随着软件规模的增大,其复杂性往往会呈指数级升高。

需要很多人分工协作,不仅涉及技术问题,更重要的就是必须有科学严格的管理。

(5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。

1、5 什么就是软件工程?软件工程就是指导计算机软件开发与维护的工程学科。

第四章 结构化程序设计的三种结构

第四章 结构化程序设计的三种结构

第四章结构化程序设计的三种结构4.1 顺序结构程序设计一、结构化程序设计的程序结构顺序结构、分支结构/选择结构、循环结构二、C语言语句1、9种控制语句2、表达式语句3、特殊语句三、格式化输出--printf()函数printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。

printf()函数的一般格式printf("格式字符串" [,输出项表]);1、"格式字符串"也称"转换控制字符串",可以包含三种字符(1)格式指示符。

格式指示符的一般形式如下:%[标志][宽度][.精度][F|N|h|L][类型]常用的标志字符如表3-1所示,常用的宽度指示符如表3-2所示,常用的精度指示符如表3-3所示,长度修饰符如表3-4所示,类型转换字符如表3-5所示。

(2)转义字符'\n'就是转义字符,输出时产生一个"换行"操作。

转义字符通常起控制作用(3)普通字符──除格式指示符和转义字符之外的其它字符。

格式字符串中的普通字符,原样输出。

例如printf("radius=%f\n", radius);语句中的"radius="是普通字符。

2.输出项表输出项表是可选的。

如果要输出的数据不止1个,相邻2个之间用逗号分开。

下面的printf()函数都是合法的:(1)printf("I am a student.\n");(2)printf("%d",3+2);(3)printf("a=%f b=%5d\n", a, a+3);必须强调:"格式字符串"中的格式指示符,必须与"输出项表"中、输出项的数据类型一致,否则会引起输出错误3、格式指示符输出不同类型的数据,要使用不同的类型转换字符。

第4章 结构化分析

第4章 结构化分析

基本目标:
(1)描述用户的需求。 (2)为软件设计工作奠定基础。 (3)定义一组需求,一旦开发出软件 产品之后,就可以用这组需求作为标准 来验收该产品。
实体 -关系图 数据流图
数据 字典
状态转换图
控制规约
结构化分析模型的结构
4
4.2 数据流图
一、数据流图的基本成分
数据流图的基本图形元素:
或 数据的源点/终点 source or sink
⊕ T
C 只有数据流A或只有数据流B(但数据流A和数据 流B不能同时)输入时变换成数据流C B 数据流A变换成数据流B或数据流C,但不能变换 T ⊕ C 成数据流B和数据流C
6
4.2 数据流图
二、数据流图绘制方法
绘制步骤: 找出系统的输入和输出
画系统的内部 画加工的内部
注意事项: (1)命名 (2)层次结构 (3)图和加工的编号 (4)在系统分析中要注意区别物流和数据流 (5)每个加工至少有一个输入数据流和一个输出数据流 (6)数据存储的读取 (7)数据守恒 (8)父图和子图的平衡 (9)局部数据存储 (10)合理分解
的信息存储。
13
4.4 数据字典
二、内容及格式
1.数据流条目 要定义数据流图中的数据流就要用数据流条目。数据流条目给出了某个数据流的 定义,它通常是列出该数据流的各个组成数据项。
表4.1 数据字典使用的描述符号
符 号 = + [· · · |· · · ] [· · · ,· · · ] 含 义 被定义为 与 或 或 示 例 X=· · · 表示X由· · · 组成 X=a+b表示X由a和b组成 X=[a|b]表示X由a或b组成 X=[a,b]表示X由a或b组成
4.4 数据字典

第4章结构化程序设计

第4章结构化程序设计
数据库应用基础
第 4章
结构化程序设计
重点:控制结构 、程序实例
东方学院 信息分学院 陈国顺
内 容 பைடு நூலகம் 航
学习提要 教学内容
要点回顾
习题/实验
2
学习提要与目标
理解结构化程序设计的概念 熟练掌握程序控制的基本结构 掌握控制结构嵌套
掌握过程与自定义函数
3
目 录
4.1 程序文件设计 4.2 程序控制的基本结构 4.3 子程序和用户自定义函数 4.4 本章小结
19
4.2.2
选择结构
1.二路分支选择结构
格式:IF <条件表达式> [THEN]
<语句序列1>
[ELSE <语句序列2>] ENDIF
20
4.2.2
选择结构
【例4.4】如果在例题4.2中,根据行李重量的不同,采用不同的收费标准。即当 重量不超过50kg时,按每千克0.60元收费;当重量超过50kg,超出50kg的 部分按每千克0.90元收费,而其中的50kg仍按每千克0.60元收费。试编写 程序计算托运费。 程序代码如下: *****CH4-4.PRG ***** SET TALK OFF CLEAR INPUT "请输入货物的重量(Kg):" TO W IF W<=50 F=W*0.60 ELSE F=50*0.6+(W-50)*0.9 ENDIF ?"货物重量"+ALLTRIM(STR(W,19,2))+" 千克需要的托运费为:"+ALLTRIM(S TR(F,19,2))+"元" 21 SET TALK ON
31

软件工程教案_4(第四章)

软件工程教案_4(第四章)

耦合强度依赖的因素: 耦合强度依赖的因素:
•一模块对另一模块的引用 •一模块向另一模块传递的数据量 •一模块施加到另一模块的控制的数量 •模块间接口的复杂程度
模块间耦合的类型
低 耦 合 性 无直接耦合
(低耦合) 数据耦合 低耦合)
强 模 块 独 立 性 弱
标记耦合
(中耦合) 控制耦合 中耦合)
外部耦合
§4.3 模块的独立性
4.3.1 模块独立性的概念 模块独立的含义: 模块独立的含义:
模块完成独立的功能 符合信息隐蔽和信息局部化原则 模块间关连和依赖程度尽量小
4.3.2 模块独立性的度量
模块独立性取决于模块的 内部和外部特征。 内部和外部特征。 SD方法提出的定性的度量标准: 方法提出的定性的度量标准: • 模块之间的耦合性 • 模块自身的内聚性
数据耦合举例
开发票 单价 数量 计算水费 金额
(3) 标记耦合(特征耦合) 3) 标记耦合(特征耦合)
如两个模块通过传递数据结构 如两个模块通过传递数据结构
(不是简单数据,而是记录、数组 不是简单数据,而是记录、 等)加以联系,或都与一个数据 加以联系,或都与一个数据
结构有关系, 结构有关系, 则称这两个模块 有关系 间存在标记偶合。 间存在标记偶合。
第四章 软件设计
主要内容: 主要内容: ▲ 软件设计的目标和任务 ▲ 软件设计基础 ▲ 模块的独立性 ▲ 结构化设计方法 ▲ 数据设计及文件设计 ▲ 过程设计
讨论要点
(1)如何将分析模型转换为软件 (1)如何将分析模型转换为软件 设计? 设计? (2)作为软件工程师在软件设计 (2)作为软件工程师在软件设计 方面应使用哪些基本原则和 概念? 概念?
将标记耦合修改为数据耦合举例

软件工程第4章习题解答

软件工程第4章习题解答
解:(1)判定表:
说明:1,每一笔交易有3种属性:“交易金额”、“每股售价”、“股数”。
2,“交易总额”有3种值;“每股售价”有3种值;“股数”有2种值。所以每笔交易有18种状态。(表有19列,第1列是说明列)
3,每种状态有一个决策公式。判定表中的决策方案有18行。
4,每个计算公式中只有一个变量“交易金额”,设为a。
教师的工资档案存储在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇佣日期等信息。需要写一个计算程序计算并印出每名教师的原有工资和调整后的新工资。要求:
⑴画出此系统的数据流图;
⑵写出需求说明;
⑶设计上述的工资调整程序(要求用判断表描述),设计时请分别采用下述两种算法,并比较这两种算法的优缺点;
set START to (I+1)
else if TABLE(I) > ITEM then
set FINISH to (I-1)
endif
enddo
if TABLE(I) = ITEM or TABLE(START) = ITEM or TABLE(FINISH) = ITEM then
set FLAG to 1
解:
⑴ 系统的数据流图
⑵ 需求说明:(略)
⑶ 程序框图:
算法说明:1 此算法是先找出工资少于$26,000的人, 再进行工资调整,属算法a
2 算法a适于数据库的记录不太多的情况,在数据库中查找较费时。
但是,调整系统的主要部分少一个判断,结构清晰一些。
3 算法b适于数据库的记录较多的情况,利用数据库的排序功能可很快地将教师的档案数据按工资大小排好序,调整程序只对前若干个记录进行操作。这个算法对于修改数据库回更便捷些。
交易

第4章-实用软件工程(第4版)-陆惠恩-清华大学出版社

第4章-实用软件工程(第4版)-陆惠恩-清华大学出版社
❖ 结构化程序设计(Structured Programming ,SP)
❖ 1、采用自顶向下、逐步求精的程序设计方法; ❖ 2、仅采用顺序、选择、重复三种基本控制结构,每种基本结构只有一个
入口、一个出口;将这三种基本控制结构根据程序的逻辑,嵌套或组合 成结构化程序,完成预定的功能。 ❖ 3、采用主程序员组的组织形式。
【例4.4】用因果图法设计测试用例
某规格说明规定:输入的第一列字符必须是A或B,第二列字符必须是一个数字。 第一、二列都满足条件时执行操作H;如果第一列字符不正确,则给出信息L; 如果第二列字符不正确,则给出信息R。
根据上述要求画出因果图,并设计测试用例。
例4.4 的因果图
例4.4的判定表
《实用软件工程(第3版)》陆惠恩编著
源程序文档编写规则 1.源程序文档书写规则:含义鲜明的标识符名称、适当的注解和程序布局阶梯式。 2. 数据说明:易于理解、便于查阅 3. 语句构造要简单明了 4. 输入输出语句要合理 5. 程序效率要满足用户需求。
▪ 程序设计主要应考虑的是程序的正确性、可理解性、可测试性和可维护性。
4.2 软件测试目标
《实用软件工程(第3版)》陆惠恩编著
8
程序流程图
《实用软件工程(第3版)》陆惠恩编著
9
程序图
《实用软件工程(第3版)》陆惠恩编著
10
计算程序的环行复杂度:
方法1:图中有4个线性无关的有向环:R1、R2、R3、R4。 在图4.4(b)中,实线弧数为14,节点数为12。因此,环行复杂度为 V(G)=14-12+2=4
《实用软件工程(第3版)》陆惠恩编著
5
4.5 设计测试方案
测试方案包括三个内容:
要测试的功能

C语言程序设计第四章

C语言程序设计第四章

运行情况: 1989↙ 1989is not a leap year.
2000↙
2000 is a leap year.
C程序设计
第五章
选择结构程序设计
例4.6 求
2 ax bx c 0 方程的解
#include "stdio.h" #include "math.h" main() {float a,b,c,d,disc,x1,x2,realpart,imagpart; scanf("%f,%f,%f",&a,&b,&c); printf("The equation"); if (fabs(a)<=1e-6) printf("is not a quadratic"); else disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("has two equal roots:%8.4f\n",-b/(2*a)); else if(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2); } else {realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } }

软件工程第四章结构化需求分析

软件工程第四章结构化需求分析
在开始建立分析模型之前先理解问题。 以业务流程为中心来理解用户需求。 使用多个需求分析视图,建立数据、功能和行为模
型。
结构化分析模型
系统模型从以下不同的角度表述系统:
从外部来看,它是对系统分析上下文或系统环
境建模; 从行为上看,它是对系统行为建模; 从结构上看,它是对系统的体系结构和系统处 理的数据结构建模。
实例分析:图书馆系统
借书者 1 借书记录 包含 1 预约 M 书目
1
借/还/续借
M
图书 N
预约记录
实例分析:图书馆系统
实体:图书、借书者、管理员、借书目录、 预约记录、书目 属性给出如下:
借书者:借书者编号、姓名、性别、借书数、
最大借书数、罚金金额、有限期 图书:图书号、书目号 书目:书目号、书名、作者、出版社、丛书名、 收藏数、在馆数、预约数 借书记录:图书号、借书者编号、借出日期、 应还日期、续借次数 预约记录:书目号、借书者编号、预约日期
数据字典
数据字典是分析模型中出现的所有名字的一个 集合,并包括有关命名实体的描述 数据字典有以下两个作用:
它是所有名字信息管理的有效机制 作为连接软件分析、设计、实现和进化阶段的开发
机构的信息存储
数据字典应该由四类元素的定义组成:
数据流 数据流分量 数据存储 处理
实例分析:POS机系统
1 销售记录 1 付款 包含 M 商品 N 描述
N
1
商品描述
支付记录
实例分析:POS机系统
实体有销售记录、支付记录、商品、商品 描述 关联:
销售包含一组商品; 每个商品都有相应的描述信息; 每个支付对应一个销售。
实体的属性:

软件工程第4章概要设计

软件工程第4章概要设计
函数A 函数B 函数C 数据集
通常,通信内聚模块是通过数据流图来定义的。
5.通信内聚(2)
6.功能内聚
一个模块中各个部分都是完成某一具体功能 必不可少的组成部分 或者说该模块中所有部分都是为了完成一项 具体功能而协同工作,紧密联系,不可分割 的 软件结构中应多使用功能内聚类型的模块
内聚类型汇总
5.标记耦合
如果一组模块通过参数表传递信息 这个参数是: 数据结构 字符串 记录 不是简单变量
标记耦合举例 计算水电费
住户情况
计算水费
水费
住户情况
电费
计算电费
“住户情况”是一个数据结构,图中模块都 与此数据结构有关. “计算水费”和“计算电费”本无关,由于 引用了此数据结构产生依赖关系,它们之间 也是标记偶合.
4.2.2 软件结构风格与策略
1.软件结构风格取决于 程序的模块结构表明了程序各个模块的 组织情况,是软件的过程表示 数据的结构表明各个数据之间的关系和 各个数据元素的约束,是软件的信息表 示
2.软件结构的独立性风格
(1).独立性 软件系统中每个模块只涉及软件要求的 具体的子功能, 而和软件系统中其它的 模块的接口是简单的 一个模块和其它模块的独立程度是评价 一个模块设计好坏的重要度量尺度。
例如初始化模块和终止模块。
4.过程内聚
一个模块内部的处理成分是相关的,而且这些处 理必须以特定的次序执行
函数A 函数B 函数C
例如,把流程结构中的循环部分、判定部分、计 算部分分成一个模块,这三个任务组成的模块是 过程内聚模块。
5.通信内聚
如果一个模块内各功能部分都使用了相同的输入数 据,或产生了相同的输出数据,则称之为通信内聚 模块。

《软件工程实用教程》第4章_结构化软件设计

《软件工程实用教程》第4章_结构化软件设计

第4 章 結構化軟體設計
3.虛擬機風格 例:解釋器,通過虛擬機特定模組的解釋步驟 如下: 解釋引擎從被解釋的模組中選擇一條指令; 基於這條指令,引擎更新虛擬機內部的狀 態; 上述過程反復執行。
第4 章 結構化軟體設計
特點: 在虛擬機環境中運行的代碼不必須瞭解虛擬 機的具體細節。 一旦運行環境發生變化,只需要重寫虛擬機 本身,而不是整個系統。 通常虛擬機會限制在其中運行的軟體的行為, 特別是那些以實現跨平臺為目的的虛擬機, 如Java虛擬機和.NET CLR。 能夠使系統的結構更具層次性,使用虛擬機 提供的設施編寫的代碼,可以不考慮虛擬機 以外的實際環境,而在正確地實現了這種虛 擬機的環境中執行。
第4 章結構化軟體設計
本章學習內容: 1.瞭解概要設計的任務與過程 2.掌握結構化設計技術的基本原理與準則 3.掌握面向數據流分析的設計方法 4.瞭解面向數據的設計方法 5.掌握資料庫設計原則和步驟 6.瞭解常用的詳細設計工具 7.瞭解概要設計說明書的基本內容
第4 章 結構化軟體設計
4.1 概要設計的任務與過程 概要設計的目標是概要地說明軟體 應該怎樣實現,即解決軟體系統總 體結構設計的問題,包括軟體系統 的結構、模組劃分、模組功能和模 組間的聯繫等。
第4 章 結構化軟體設計
4.2.1 現代體系結構模型的基本概念
1.模式:是針對特定問題的成功解決方案,是指形成 了一種趨於固定的結構形式。 結構模式表達了軟體系統的基本結構組織形式或結 構方案,包含了一組預定義的子系統,規定了這些 子系統的責任,同時還提供了用於組織和管理這些 子系統的規則和嚮導。 設計模式為軟體系統的子系統、構件或者構件之間 的關係提供一個精練後的解決方案,描述了特定環 境下,用於解決通用軟體設計問題的構件以及這些 構件相互通信時的可重現結構。

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

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

图4-20 信息系统切换方法示意图
第4章 结构化系统开发方法 4.6系统维护和评价 4.6.1系统维护和管理 1.系统维护的重要性 2.系统维护的主要任务 4.6.2系统评价的目的和任务 1.目标评价 2.性能评价 3.经济效益评价
4.7小结
结构化方法是目前仍然比较广泛应用的系统开发方法 之一。结构化方法主要分为系统规划、系统分析、系 统设计、系统实施和系统维护、评价等5个主要的阶 段。本章按照结构化方法的生命周期,详细介绍了结 构化信息系统设计方法的阶段、步骤、方法和要求。 1.本章学习目标 熟悉结构化系统开发方法的实施过程; 熟练掌握结构化开发方法使用的各种工具的使用; 能够使用结构化方法和相应的开发工具开发信息系统。 2.本章主要内容 3.重要术语
第4章 结构化系统开发方法 4.3系统分析 4.3.4信息系统逻辑模型 信息系统的逻辑模型的表达主要包括: 功能模型:描述新系统的功能; 数据流程图:描述信息和信息的流动; 信息模型:数据字典和数据库结构等。
第4章 结构化系统开发方法 4.3系统分析 4.3.4信息系统逻辑模型 1.功能描化系统开发方法 4.4系统设计
4.4.6系统设计阶段的成果 主要成果是系统设计说明书文档。应包括以下主要内 容: (1)控制结构图及每一模块详细说明; (2)数据库设计说明; (3)计算机和网络系统设计说明; (4)代码设计说明; (5)用户界面设计说明; (6)计算机处理过程说明; (7)实施费用估计。
第4章 结构化系统开发方法 4.3系统分析 4.3.1详细调查 1.调查方法 2.组织结构调查 3.业务流程调查 4.信息调查 5.PIECES方法图 4-2 库存管理业务流程图
第4章 结构化系统开发方法 4.3系统分析 4.3.2数据流图 1.DFD的图形符号

第4章 结构化设计方法

第4章 结构化设计方法

第4章结构化设计方法4.1 当你“编写”程序时你设计软件吗?软件设计和编码有什么不同吗?在“编写”程序时并没有设计软件。

软件设计包括概要设计和详细设计,编码是将详细设计中的过程描述转换成用程序设计语言来描述。

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

抽象是忽略事物的细节,获取其本质特征的过程。

抽象是一种重要的机制,使人们能够对复杂系统能够很好地理解、交流和推理。

在软件领域,可以将抽象分为两类,即数据抽象和过程抽象。

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

(1) 数据抽象:在所有的结构化程序设计语言中,用户都可以自定义抽象数据类型。

如定义抽象数据类型Student(学生)、Course(课程)、ClassScoreList(班级成绩单)。

(2) 过程抽象:过程抽象也称为是基于方法的抽象。

过程抽象使我们关心处理过程的名字和它能做什么,而无需知道如何完成所有实现细节。

如求班级总平均分average(ClassScoreList)就是一个过程抽象。

在面向对象的程序设计语言中,抽象与封装的概念密切相关,数据抽象和相关的过程抽象被封装在类中,不同类中相似的过程抽象(方法)又可以进一步抽象,放在接口中。

封装是保证事物有明确内外界限的机制。

内部是受保护的,与外部事物相隔离。

4.3 应在什么时候把模块设计实现为单块集成软件?如何实现?性能是实现单块集成软件的唯一理由吗?由于模块之间的调用降低了系统的运行速度,可能会导致满足不了用户的性能要求,这时就需要将软件设计为单块集成软件。

但是在设计时,最好按照模块化的原则进行设计,只是没有显式的模块定义而已。

这样的程序也具有模块化的优点。

性能是实现单块集成软件的唯一理由。

4.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 什么叫“自顶向下、逐步细化”?自顶向下、逐步细化的设计过程,主要包括两个方面:一是将复杂问题的解法分解和细化成由若干个模块组成的层次结构;二是将每个模块的功能逐步分解细化为一系列的处理。

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

划分模块的过程可以使用自顶向下的方法实现。

模块分解完成后,下一步的任务就是将每个模块的功能逐步分解细化为一系列的处理。

这个过程是对问题求解,并由抽象逐步具体化的过程。

使用这种方法便于检查程序的正确性。

在每一步细化之前,应仔细检查当前的设计是否正确。

如果每一步细化、设计都没有问题,则整个程序的算法是正确的。

由于每一次向下细化都不太复杂,因此容易保证整个算法的正确性。

第4章 习题与思考题参考答案74.11 结构化程序设计禁止使用goto 语句吗?如果程序中使用了goto 语句,是否就可以断定它是非结构化的?结构化程序设计并不禁止使用goto 语句。

如果程序中使用了goto 语句,并不能断定它是非结构化的。

4.12 对于给定的算法,如何判断它是否是结构化的?对于给定的算法,如果符合以下三条原则,就可以判断它是结构化的。

(1) 使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。

(2) 选用的控制结构只准许有一个入口和一个出口。

(3) 程序语句组成容易识别的块(Block ),每块只有一个入口和一个出口。

4.13 对于图4-49所示的流程图,试分别用N-S 图和PAD 表示之。

图4-49 流程图对应的N-S 图如下:对应的PAD 如下:4.14 图4-50所示的流程图完成的功能是使用二分查找方法在table 数组中找出值为item 的数是否存在。

(1) 判断此算法是否是结构化的,说明理由。

(2) 若算法是非结构化的,设计一个等价的结构化算法,并用N-S 图表示。

图4-50 二分查找算法的流程图(1) 不是结构化的,最上面的循环有两个出口,最下面的分支有三个入口。

第4章习题与思考题参考答案(2) 等价的结构化算法如下:或者9或者4.15 使用自顶向下、逐步细化方法设计算法,完成下列任务:产生一个10⨯10的二维随机整数方阵,先求出每一行的最大值和每一列的最小值;然后求10个最大值中的最小者,10个最小值中的最大者;最后求这两个数之差的平方。

(1) 首先写出下面的程序框架:main (){定义10⨯10的二维整数数组A,长度为10的一维数组B, C;建立10⨯10的二维随机整数数组A;- - - - - - -- -- - - - - - - - - - - - 1求A中每一行的最大值→数组B;- - - - - - - - -- - - - - - - - - - - - 2求A中每一列的最小值→数组C;- - - - - - - - -- - - - - - - - - - - - 3求数组B中的最小值→minOfB; - - - - - - - - -- - - - - - - - - - - - 4求数组C中的最大值→maxOfC; - - - - - - - - -- - - - - - - - - - - - 5(minOfB- maxOfC)^2 →result;}(2) 对后面加标记的部分进行细化main (){定义10⨯10的二维整数数组A,长度为10的一维数组B, C;/*建立10⨯10的二维随机整数数组A*/ - - - - - -- -- - - - - - - - - - - - 1for (i=0; i<=9; i++)for (j=0; j<=9; j++)产生随机整数→ A[i,j];/*求A中每一行的最大值→数组B*/ - - - - - - - - -- - - - - - - - - - - - 2for (i=0; i<=9; i++) {求数组A第i行的最大值→B[i]; --------------------------------------2.1}/*求A中每一列的最小值→数组C*/ - - - - - - - - -- - - - - - - - - - - - 3for (j=0; j<=9; j++) {求数组A第j列的最小值→C[j]; --------------------------------------3.1}第4章习题与思考题参考答案/*求数组B中的最小值→minOfB*/ - - - - - - - - -- - - - - - - - - - - - 4minOfB = B[0];for (i=1; i<=9; i++) {if (minOfB < B[i]) {minOfB = B[i];}}/*求数组C中的最大值→maxOfC*/ - - - - - - - - -- - - - - - - - - - - - 5maxOfC = C[0];for ( i=1; i<=9; i++) {if (maxOfC>C[i]) {maxOfC = C[i];}}(minOfB- maxOfC)^2 →result;}(3) 下一步可以继续对2.1和3.1进行细化。

具体略。

4.16 设计算法完成下列任务:输入一段英文后,无论输入的文字都是大写,还是小写,或大小写任意混合,都能将其整理成除每个句子开头字母是大写外,其他都是小写的文字。

相关文档
最新文档