92
1 第第第 第第第第第 传统 第第第 第第第第第 传统 第第第第第 第第第第第 第第第第第第第第第第第第第第 传统 第第 第第第第第第第第第第第第第第第第第第第第第 第第第第第第 。( 第第第第第 第第第第第第第第第第 Jackson 第第第第 第第第第第第第第第第第 第第第第第第第第 ,。

第五章 传统的设计方法

  • Upload
    warren

  • View
    203

  • Download
    0

Embed Size (px)

DESCRIPTION

第五章 传统的设计方法. 本章介绍了传统的设计模型,以及从分析模型导出设计模型的一般方法。重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的 Jackson 设计方法。 重点掌握: 结构化设计模型,结构化设计方法。. 结构化设计模型 结构化设计方法 过程设计 Jackson 方法. 本章内容 介绍了传统的设计模型,以及从分析模型导出设计模型的一般方法。 重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的 Jackson 设计方法。 重点掌握 结构化设计模型,结构化设计方法。. 5.1 概述. - PowerPoint PPT Presentation

Citation preview

Page 1: 第五章  传统的设计方法

1

第五章 传统的设计方法第五章 传统的设计方法 本章介绍了传统的设计模型,以及从分析模

型导出设计模型的一般方法。重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的 Jackson 设计方法。

重点掌握: 结构化设计模型,结构化设计方法。

Page 2: 第五章  传统的设计方法

2

结构化设计模型 结构化设计方法 过程设计 Jackson 方法

Page 3: 第五章  传统的设计方法

3

本章内容 介绍了传统的设计模型,以及从分析模型导出设计模

型的一般方法。 重点讲述了面向数据流设计的结构化设计方法(包括

结构设计和过程设计)和面向数据结构设计的 Jackson 设计方法。

重点掌握 结构化设计模型,结构化设计方法。

Page 4: 第五章  传统的设计方法

4

5.1 5.1 概述概述

面向数据流设计和面向数据设计 从分析模型导出设计模型

Page 5: 第五章  传统的设计方法

5

5.1.1 5.1.1 面向数据流设计和面向数据设计面向数据流设计和面向数据设计 面向数据流设计

将信息流映射成软件结构 数据流是考虑一切问题的出发点 最终目的

给出设计软件结构的一个系统化的途径 数据流的类型决定映射方法

变换流 事务流

该方法适用于概要设计阶段 常称为结构化设计( SD )方法

Page 6: 第五章  传统的设计方法

6

面向数据设计 该方法不明显的使用软件结构的概念,模块是设计

过程的副产品。对于模块独立性也没有给予应有的重视。

以数据结构作为分析和设计的基础 最终目标

得出程序的过程性描述 该方法适用于过程设计 / 详细设计阶段 主要设计方法

Jackson 方法 Warnier 方法

Page 7: 第五章  传统的设计方法

7

结构化设计与结构化分析的关系 软件设计必须依据对软件的需求来进行,结构

化分析的结果为结构化设计提供了最基本的输

入信息。 分析模型的每个元素都提供了创建设计模型时

所需要的信息。

5.1.2 5.1.2 从分析模型导出设计模型从分析模型导出设计模型

Page 8: 第五章  传统的设计方法

8图 5.1 将分析模型转换为软件的设计模型

Page 9: 第五章  传统的设计方法

9

数据设计把分析阶段创建的信息域模型转变成实现软件所需要的数据结构。 体系结构设计确定了程序的主要结构元素 ( 即程序构件 ) 之间的关系。 接口设计的结果描述了软件内部、软件与协作系统之间以及软件与使用者之间的通信方式。 过程设计把程序体系结构中的结构元素,变换成对软件构件的过程性描述。 在软件设计期间我们所做出的决策,将最终决定软件开发能否成功,更重要的是,这些设计决策将决定软件维护的难易程度。

Page 10: 第五章  传统的设计方法

10

5.2 5.2 结构化设计方法结构化设计方法 (SD(SD 方法方法 ))

SD 方法的中心任务 把用 DFD 图表示的系统分析模型方便地转换

为软件结构的设计模型。 软件结构的描述工具

H 图(层次图) SC 图(软件结构图)

Page 11: 第五章  传统的设计方法

11

层次图 通常使用层次图描绘软件的层次结构。在层次图中一个矩形框代表一个模块,框间的连线表示调用关系。

Page 12: 第五章  传统的设计方法

12

HIPO 图 HIPO 图是美国 IBM 公司发明的“层次图 + 输入 /处理 / 输出图”的英文缩写。为了使 HIPO 图具有可追踪性,在 H 图 ( 即层次图 ) 里除了顶层的方框之外,每个方框都加编号。

Page 13: 第五章  传统的设计方法

13

基本的 IPO 图

Page 14: 第五章  传统的设计方法

14

表格式的 IPO 图( IPO 表)

Page 15: 第五章  传统的设计方法

15

5.2.1 5.2.1 SCSC 图图 (Structure Chart)(Structure Chart)

SC 图的组成符号 矩形框来表示模块 带箭头的连线表示模块间的调用关系 在调用线的两旁标出传入和传出模块的数据流

SC 图中的模块符号 传入 传出 变换 源 漏 控制

P88 实物投影解释

用于表达软件的组成模块及其调用关系。

Page 16: 第五章  传统的设计方法

16

SC 图中的模块调用 简单调用:调用线的箭头指向被调用模块 选择调用:图中用菱形符号表示选择 循环调用:用叠加在调用线始端的环形箭头表示循环

A

B C D

A

B C

A

CB

X,Y

Z

Z

简单调用 选择调用 循环调用

Page 17: 第五章  传统的设计方法

17

在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息。如果希望进一步标明传递的信息是数据还是控制信息,则可以利用注释箭头尾部的形状来区分:尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息

Page 18: 第五章  传统的设计方法

18

注意: 层次图和结构图并不严格表示模块的调用次序。层次图和结构图并不指明什么时候调用下层模块。 通常用层次图作为描绘软件结构的文档。结构图作为文档并不合适。但是,利用 IPO 图和数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,却可以作为检察设计正确性和评价模块独立性的好方法。

Page 19: 第五章  传统的设计方法

19

5.2.2 5.2.2 数据流图的类型与数据流图的类型与 SDSD 方法的步方法的步骤骤

数据流图的类型 变换型结构 事务型结构

Page 20: 第五章  传统的设计方法

20

变换型结构变换型结构组成

传入路径 变换中心 传出路径

数据流 传入流 变换流 传出流

变换中心:通过计算或处理,将系统的传入流变为传出流。又称加工中心。

传入流:离输入始端最远但仍可被看作系统输入的那些数据流。

传出流:离输出末端最远但仍可被看作系统输出的那些数据流。

变换中心

传入 传出

信息 传入流 传出流

变换流

时间

基本模型基本模型

数据流数据流

Page 21: 第五章  传统的设计方法

21

事务型事务型 组成

一条接受路径 一个事务中心 若干条动作路径

特征 具有在多种事务中执行某类事务的能力。

事务 中心

接受路径 动作路径

基本模型基本模型

Page 22: 第五章  传统的设计方法

22

从从 DFDDFD 图到图到 SCSC 图的映射图的映射

复审 DFD 图,必要时可再次进行修改或细化 鉴别 DFD 图的结构特征 : 事务?变换? 按照规则,把DFD图为初始的SC图 改进初始的 SC 图,获得最终 SC 图。

Page 23: 第五章  传统的设计方法

23

两种映射方法 变换映射 事务映射

变换型 DFD图

事务型 DFD图

初始 SC 图

初始 SC 图

变换映射

事务映射

Page 24: 第五章  传统的设计方法

24

适用于将变换型结构的 DFD图转换为初始软件结构图。步骤如下:1、区分传入、传出和变换中心三个部分,在DFD图上标明它们的分界线(1) 变换中心的任务:通过计算或处理,把系统的逻辑输入变换 (或加工 ) 为系统的逻辑输出。(2)逻辑输入 ( 传入数据项 ) :离物理输入端 ( 输入始端 ) 最远,但仍可以被看作系统输入的那些数据流。

5.2.3 5.2.3 变换映射变换映射

Page 25: 第五章  传统的设计方法

25

(3)逻辑输出 ( 传出数据项 ) :离物理输出端 ( 输出末端 ) 最远,但仍可以被看作系统输出的那些数据流。(4) 数据在系统中流动时,不仅在通过变换中心时要被变换,在传入路径和传出路径上,其内容和形式也可能发生变化。故变换中心又称为“中心加工”,以区别于数据在传入传出过程中的其它加工。(5)划分的结果可能会受经验的影响,但必须从实际情况出发,对DFD图作认真和细致的分析(6)几种可能遇到的情况及其处理方法

Page 26: 第五章  传统的设计方法

26

有些系统没有中心加工,系统的逻辑输入和逻辑输出是完全相同的数据流,应将DFD划分为传入和传出两部分,不要强求一律硬分成三个部分。除传入部分外,在变换中心甚至传出部分也可能从系统外接受某些输入数据流,称为二次传入数据。该数据不应当作传入部分的一部分。有些 DFD图可能失之太粗,缺少应有的细节,可考虑对自己用于分析的DFD进行补充。

Page 27: 第五章  传统的设计方法

27

Page 28: 第五章  传统的设计方法

28

2、完成“第一级分解”,建立初始SC图的框架。包括顶层控制模块和第一层模块。两种画法:a.顶层控制模块 + 传入、传出和中心变换 3个一层模块b.顶层控制模块 +按照传入、传出实际数据流数和中心变换模块数确定数量的模块

Page 29: 第五章  传统的设计方法

29

Mc

MTMA ME

c,e w,uc,e w,u

Mc

P

c

R ME

1

ME

2

MA

1

MA

2

Q

e e pc,p r r w,u w u

Page 30: 第五章  传统的设计方法

30

3、完成“第二级分解 / 分支分解”,分解SC图的各个分支。对初始SC图的框架继续进行由顶向下的分解,直至画出每个分支所需要的全部模块。

传入路径的处理 : 由变换中心外移,把传入路径中每个处理映射成软件结构中输入处理的低一层模块 传出路径的处理 : 由变换中心外移,通路中各处理直接映射成输出处理的低一层模块

Page 31: 第五章  传统的设计方法

31

MA

c,e

C

B

A

E

D

e

d

c

b

a

MA

c,e

GetC

GetB

ReadA

GetE

AtoB

ec

b

a

BtoCa b

b c

ReadD

d

DtoEd e

为了显式的表示在传入 / 传出路径上的数据变换,在分支分解中可考虑增加变换模块,功能为 Read/Get 和 Write/Put。

传入路径处理

Page 32: 第五章  传统的设计方法

32

ME

W U

V

u

v

w

u,w

ME

WriteW

u

v

w

u,w

PutU

UtoVu

WriteV

v

传出路径处理

Page 33: 第五章  传统的设计方法

33

MT

P RQ

e pc,p r r w,u

变换中心的处理

Page 34: 第五章  传统的设计方法

34

Mc

MA

c,e

GetC

GetB

ReadA

GetE

AtoB

ec

b

a

BtoCa b

b c

ReadD

d

DtoEd e

ME

WriteW

u

v

w

u,w

PutU

UtoVu

WriteV

v

MT

c,e w,u

合成

Page 35: 第五章  传统的设计方法

35

虽然在任何情况下都可以使用变换分析方法设计软件结构,但是在数据流具有明显的事务特点时,也就是有一个明显的“发射中心” ( 事务中心 ) 时,还是以采用事务分析方法为宜。 事务:引发、触发或启动某一动作或一串动作的任何数据、控制、信号、事件或状态变化

5.2.4 5.2.4 事务映射事务映射

Page 36: 第五章  传统的设计方法

36

事务分析步骤: 1、在 DFD图上确定事务中心、接受部分( 包括接受路径 ) 和发送部分 ( 包含全部动作路径 )

事务中心通常位于DFD图中多条动作路径的起点;向事务中心提供信息的路径,是系统的接受路径;动作路径通常不止一条,切每条均具有自己的结构特性 ( 变换或事务型 ) 。

Page 37: 第五章  传统的设计方法

37

Page 38: 第五章  传统的设计方法

38

2、画出 SC图框架,把 DFD图的三个部分分别映射为事务控制模块、接受模块和动作发送模块

事务控制

接收 发送

事务控制

事务

分析发送

Page 39: 第五章  传统的设计方法

39

3、分解和细化接受和发送分支,完成初始的 SC图接受分支一般具有变换特性,可对其进行变换分析;动作分支典型的可映射为 4层: P-处理层、 T-事务层、A- 操作层、D-细节层。 A、D常可被 P 、 T共享。

P

T1 T2

A2A1 AjA3

Ti

D2D1 Dk

Page 40: 第五章  传统的设计方法

40

在大型系统的 DFD中,变换型和事务型两类结构往往同时存在。对于一个大系统,常常把变换分析和事务分析应用到同一个数据流图的不同部分,由此得到的子结构形成“构件”,可以利用它们构造完整的软件结构。

Page 41: 第五章  传统的设计方法

41

混合结构一例混合结构一例

C1

A

C3B

C2

D

LF

G

E KJ

a

b

b1 b2

b3

c1

c2

c3

d e

f

g

h

j

k

l

m

总体为变换型结构传入路径为事务型结构

Page 42: 第五章  传统的设计方法

42

面向数据流方法的设计过程

Page 43: 第五章  传统的设计方法

43

软件工程师们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发规则。这些启发规则在许多场合能给软件工程师有益的启示,往往能帮助他们找到改进软件设计提高软件质量的途径,因此有助于实现有效的模块化。 下面介绍几条常用的启发规则。

5.2.5 5.2.5 结构化设计的优化规则结构化设计的优化规则

Page 44: 第五章  传统的设计方法

44

一、改进软件结构提高模块独立性 通过模块分解或合并,力求降低耦合提高内聚。二、模块规模应该适中 一页纸内 (≤60行 ) 。 过大,可考虑继续分解模块功能;过小,可考虑合并到上层模块。

Page 45: 第五章  传统的设计方法

45

三、深度、宽度、扇出和扇入都应适当1、概念深度:软件结构中控制的层数,往往粗略的标志一个系统的大小和复杂程度。越大,意味着模块功能可能过分简单,软件的程序控制复杂。宽度:软件结构内同一个层次上的模块总数的最大值。宽度越大系统越复杂。 ( 主要受扇出影响 )扇出:模块直接调用的下级模块数目,也称模块的控制宽度。扇入:直接调用它的上级模块数。

Page 46: 第五章  传统的设计方法

46

2、高扇出结构扇出数应保持在: <7。太高:调用的控制困难;太低:应考虑向上合并功能。

(1)高扇出结构:称为“煎饼”结构

计算实发工资

取得工资数据

计时制工资额

薪金制工资额

编外人员工资

税收扣款

编外人员税款

常规扣款

编外人员扣款

Page 47: 第五章  传统的设计方法

47

(2)改进方法:增加中间层,形成塔形结构

计算实发工资

取得工资数据

计时制工资额

薪金制工资额

编外人员工资

税收扣款

编外人员税款

常规扣款

编外人员扣款

计时工人实发工资

计薪工人实发工资

编外人员实发工资

Page 48: 第五章  传统的设计方法

48

3、高扇入结构(1) 一个模块的扇入越高,则共享这一模块的上级模块数目越多,消除重复代码的效果就越明显。(2)底层高扇入结构:可共享的底层功能多,形成“瓮形”或“清真寺”结构。

(3)高扇入结构的画法:调用线太多,交叉,乱。考虑用编号代替功能方框,直接画在调用模块下。

Page 49: 第五章  传统的设计方法

49

四、模块的作用域应该在控制域之内1、两个范围的含义控制范围:包括模块本身及其下属模块,不论这些模块系由该模块直接调用,还是间接调用。作用范围:是一个与条件判定相联系的概念,指模块内的某条件判定涉及的直接调用和间接调用模块。 一般情况,一个判定作用范围内的模块可能会有 3种情况:

整个模块是否执行,依赖于判定的结果; 上述模块的下属模块; 模块内有部分功能的执行依赖于这一判定。

Page 50: 第五章  传统的设计方法

50

2、作用范围 / 控制范围原则(1) 把一个判定的作用范围限制在判定所在模块的控制范围之内,是改进模块结构的基本原则。(2) 理想情况,是使判定的作用范围和判定所在模块的控制范围尽可能的吻合。3、把系统中有较大影响的判定放在层次结构中较低的位置,可能是导致违反作用范围 / 控制范围原则的主要原因。因此,要么把这类重要的判定从低层次上移到足够高的上层模块中,要么把受这些判定影响的模块调整并下移到控制范围之内。

Page 51: 第五章  传统的设计方法

51

M

A G

B C

D E F

Page 52: 第五章  传统的设计方法

52

五、力争降低模块接口的复杂程度 模块接口复杂是软件发生错误的一个主要原因。设计接口时,应使得信息传递简单并且和模块的功能一致。 接口复杂或不一致 ( 即看起来传递的数据之间没有联系 ) ,是紧耦合或低内聚的征兆,应该重新分析这个模块的独立性。如:一元二次方程求根的两种接口设计:quad_root(TBL , X) ,其中 TBL 和 X均为数组quad_root(A, B , C, ROOT1, ROOT2)

Page 53: 第五章  传统的设计方法

53

六、设计单入口单出口的模块 不要设计内容耦合模块。七、模块功能应该可以预测 模块的功能应该能够预测,但也要防止模块功能过分局限。

Page 54: 第五章  传统的设计方法

54

书例 P100

Page 55: 第五章  传统的设计方法

55

5.3 5.3 过程设计(详细设计)过程设计(详细设计)

目的与任务 原则与方法 常用表达工具

流程图与 N-S 图 伪代码和 PDL 语言

Page 56: 第五章  传统的设计方法

56

5.3.1 5.3.1 目的与任务目的与任务 目的

为软件结构图中的每一个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出更清晰地描述。

任务 编写软件的“过程设计说明书”

为每个模块确定采用的算法 确定每一模块使用的数据结构 确定模块接口的细节

为每个模块设计出一组测试用例。

Page 57: 第五章  传统的设计方法

57

5.3.2 5.3.2 过程设计的原则与方法过程设计的原则与方法

清晰第一的设计风格 结构化的控制结构

任何程序的逻辑均可用顺序、选择和循环3种控制结构或它们的组合来实现;

每个控制结构只该有一个入口和一个出口。 逐步细化的实现方法

过程设计的结果基本上决定了最终的程序代码的质量

Page 58: 第五章  传统的设计方法

58

1. 1. 清晰第一的设计风格清晰第一的设计风格

在大多数情况下,应该优先考虑程序的清晰度,把效率的考虑放在第二位。

Page 59: 第五章  传统的设计方法

59

在软件的生命周期中,设计测试方案,诊断程序错误,修改和改进程序等都必须首先读懂程序。实际上对于长期使用的软件系统而言,人读程序的时间可能比写程序的时间还要长得多。因此,衡量程序的质量不仅要看它的逻辑是否正确,性能是否满足要求,更主要的是要看它是否容易阅读和理解。 过程设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。结构程序设计技术结构程序设计技术是实现上述目标的关键技术,因此是过程设计的逻辑基础。

Page 60: 第五章  传统的设计方法

60

2.2. 结构化程序设计 结构化程序设计 (Structured Programming,SP)(Structured Programming,SP)

任何程序的逻辑均可用顺序、选择和循环 3种控制结构或它们的组合来实现;

每个控制结构只该有一个入口和一个出口。 如果在详细设计中,所有的模块都只使用单入

口、单出口的 3种基本控制结构,则整个程序将保持一条清晰的线索。

结构化程序设计的经典定义

如果一个程序的代码块仅仅通过顺序、选择和循环这三种控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

Page 61: 第五章  传统的设计方法

61

对经典结构程序设计的补充完善 增加两种控制结构

DO-UNTIL DO-CASE

允许多个出口使程序可以立即从循环中转移出来;

GOTO 语句不应滥用,但也不必完全禁止 最好仅在错误处理时才使用 GOTO 语句 应该总是使用前向 GOTO 语句 应限制在一个模块内跳转

Page 62: 第五章  传统的设计方法

62

3. 3. 逐步细化的实现方法逐步细化的实现方法 由粗到细的逐步描述程序

需从算法 ( 处理过程 ) 和数据结构两个方面同时逐步细化

逐步细化的优点 每一步只优先处理当前最需要细化的部分,其余部分推迟到适当的时机再考虑;

易于验证程序正确性,比形式化的程序正确性证明更易为非专业人员接受,因而也更加实用。

结论 模块的逻辑设计必须用结构程序设计的原理来指导。

Page 63: 第五章  传统的设计方法

63

5.3.3 5.3.3 常用表达工具常用表达工具

流程图与 N-S 图 伪代码和 PDL 语言

Page 64: 第五章  传统的设计方法

64

1. 1. 流程图与流程图与 N-SN-S 图图 流程图

最古老的设计表达工具 具有能随意表达任何程序逻辑的优点

部分图例

Page 65: 第五章  传统的设计方法

65

缺点:

本质上不是逐步求精的好工具,过早考虑太多细节,而忽视全局结构

流程图中的箭头代表控制流,使得程序员可以随意转移控制,不符合结构化程序设计思想。

程序流程图难以表示数据结构

Page 66: 第五章  传统的设计方法

66

N-S 图是完全遵循结构化程序的流程图技术俗称“方框图”只能描述结构化程序所允许的标准结构

Page 67: 第五章  传统的设计方法

67

N-SN-S 图 图例图 图例

(a) 顺序 (b)IF-THEN-ELSE型分支 (c)CASE型多分支(d) 循环 (e) 调用子程序 A

Page 68: 第五章  传统的设计方法

68

优缺点:

一个特定控制结构的作用域明确,不能随意转移

很容易确定局部和全局数据的作用域

很容易表现嵌套关系,也可表示模块的层次结构

但区域狭窄,难以适用于大的程序设计

Page 69: 第五章  传统的设计方法

69

2. 2. 伪代码和伪代码和 PDLPDL 语言语言

伪代码 属于文字形式的表达工具 工作量小,且较易转换为真正的代码

PDL 语言 (Program Design Language) 一种软件设计工具 具有很强的描述功能,是一种十分灵活和有

用的过程设计表达工具

Page 70: 第五章  传统的设计方法

70

小结小结 以上四种工具都可用来描述模块的逻辑过程; 一般用 PDL 进行过程设计; 设计完成后用流程图或 N-S 图表示所设计的程

序,以便复审或进行交流。

Page 71: 第五章  传统的设计方法

71

补充:改进的补充:改进的 IPOIPO 图图

输入

数据存储

处理 输出

Page 72: 第五章  传统的设计方法

72

1、面向数据结构的设计方法的基本思想:算法 + 数据结构 = 程序,算法的结构常常依赖于要处理的数据结构。只要事先知道一个问题的数据结构,就可由此导出它的程序结构。2、面向数据流的设计方法 SD与面向数据结构的设计方法的比较SD方法的目标是得出软件的最终 SC图,注意力集中在模块的合理划分;面向数据结构的设计则要求在最终得出程序的过程性描述,并不明确地提出软件应该先分成模块等概念。

不同

5.4 Jackson5.4 Jackson 方法方法

Page 73: 第五章  传统的设计方法

73

相同:都遵循结构程序设计、由顶向下逐步细化策略;都服从“程序结构服从问题结构”的基本原则;都拥有从问题结构 ( 包括数据结构 ) 导出程序结构的一组映射规则。

两种方法的应用:一般用 SD方法确定软件结构,在详细设计阶段用面向数据结构的方法确定部分或全部模块的逻辑过程。

Page 74: 第五章  传统的设计方法

74

一、 Jackson 图 1975年, M.A.Jackson 提出了一类至今仍广泛使用的软件开发方法。这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。这一方法对输入、输出数据结构明确的中小型系统特别有效,如商业应用中的文件表格处理。该方法也可与其它方法结合,用于模块的详细设计。在实际应用中,许多报表程序的设计可按照这种方法。 该方法的特点:程序模块结构与数据结构相对应

Page 75: 第五章  传统的设计方法

75

1. Jackson 方法设计结果的表示 结构图解 :表示数据结构、程序结构的类型 图解逻辑 :使用类似 PDL语言的工具补充结构

图解2. Jackson 图的组成 由方框、连线和一些附加的标记组成。 0代表选择,* 代表重复,连线表示“包含”或“由……组成”( 不一定是调用 );连线上可标记 Sn 、 In 表示是第几个选择或循环。

Page 76: 第五章  传统的设计方法

76

3.三种基本程序结构的表示图例

(1) 顺序结构

顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次

A由 B 、 C、 D三个元素顺序组成( 每个元素只出现一次,出现的次序依次是 B 、 C和D)

Page 77: 第五章  传统的设计方法

77

3.三种基本程序结构的表示图例

(2) 选择结构选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个。

根据条件, A是 B或C或D中的某一个(注意:在 B 、 C和 D的右上角有小圆圈做标记 )

Page 78: 第五章  传统的设计方法

78

3.三种基本程序结构的表示图例

(3) 重复结构重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。

A由 B 出现 N 次 (N≥0) 组成(注意:在 B 的右上角有星号标记 )

Page 79: 第五章  传统的设计方法

79

(a) 顺序结构, B 、C、 D中任一个都不能是选择出现或重复出现的数据元素;(b) 选择结构, S右面括号中的数字 i是分支条件的编号;(c) 可选结构, A或者是元素 B或者不出现 ( 可选结构是选择结构的一种常见的特殊形式 );(d) 重复结构,循环结束条件的编号为 i 。

改进的 Jackson 图

Page 80: 第五章  传统的设计方法

80

数据结构与问题结构相对应

姓名 类别 津贴

教职工名册表头

表体

名册

表体表头

栏名行表名行 行 *

类别姓名 津贴

教龄津贴 0 工龄津贴 0

例:表格的计算机处理

Page 81: 第五章  传统的设计方法

81

程序模块结构与数据结构相对应

名册

表体表头

栏名行表名行 行 *

类别姓名 津贴

教龄津贴 0 工龄津贴 0

产生名册文件

产生表体产生表头

产生栏名行产生表名行 产生行 *

产生类别产生姓名 产生津贴

产生教龄津贴 0 产生工龄津贴 0

Page 82: 第五章  传统的设计方法

4. Jackson伪代码: seq 代表顺序结构; select代表选择结构; iter[until|while] 代表循环结构; end代表一个结构的结束。

顺序结构

A seq

B

C

D

end A

选择结构

A select cond1

B

or cond2

C

end A

循环结构

A iter cond

B

end A

untilwhile

Page 83: 第五章  传统的设计方法

83

二、 Jackson 方法1. Jackson 方法与 SD方法的设计步骤图解

数据结构(Jackson 图 )

程序结构(Jackson 图 )

程序的过程性表示(Jackson 伪代码 )

映射

程序分析 程序设计

问题结构(DFD 图 )

软件结构(SC 图 )

各模块的过程表示(PDL 等工具 )

映射

概要设计 详细设计

SD

方法

Jackson

Page 84: 第五章  传统的设计方法

84

2. Jackson 方法设计步骤(1) 建立数据结构,评价数据结构的特征 (特别是输入和输出数据结构 ) ,按照基本形式对数据进行描述;(2) 把数据结构转换为软件的控制层次,建立程序模块结构。步骤如下:

为每一对在输入结构与输出结构中有对应关系的单元画一个处理框

为输入结构中每一剩余的数据单元画一处理框 为输出结构中每一剩余的数据单元画一处理框 所有处理框在程序结构图上的位置,应与由它处理

的数据单元在数据结构 Jackson 图上的位置相对应;

Page 85: 第五章  传统的设计方法

85

(3) 列出程序的各种操作;(4) 将每个操作分配给适当的模块;(5) 用 Jackson伪代码写出与程序结构图对应的过程性描述

Page 86: 第五章  传统的设计方法

86

3、设计实例:正文文件处理程序

[例]一个正文文件由若干个记录组成,每个记录是一

个字符串。要求统计每个记录中空格字符的个数,以及

文件中空格字符的总个数。要求的输出数据格式是,每

复制一行输入字符串之后,另起一行印出这个字符串中

的空格数,最后印出文件中空格的总个数。

Page 87: 第五章  传统的设计方法

87

表示输入 / 输出数据结构的 Jackson 图(a) 输入数据结构; (b) 输出数据结构

Page 88: 第五章  传统的设计方法

88描绘统计空格程序结构的 Jackson 图

Page 89: 第五章  传统的设计方法

89把操作和条件分配到程序结构图的适当位置

1. 停止2. 打开文件……I(2) 字符串结束S(3)字符是空格

Page 90: 第五章  传统的设计方法

90

4、补充技术 数据有效性检查和出错处理:有可能修改软件结构以增加有效性检查和出错处理部分 结构冲突:指在输入结构和输出结构间找不到对应的结构关系。 解决方法之一是:在输入结构和输出结构之间建立一些中间数据结构,使输入结构通过它们逐步过渡到输出结构

Page 91: 第五章  传统的设计方法

91

本章小结本章小结

本章介绍了两种结构化的系统设计方法,即面向数据流的 SD 方法,和面向数据结构的 Jackson 方法。它们都是传统软件开发常用的方法。

Page 92: 第五章  传统的设计方法

作业