第六章_详细设计


概要设计说明书
该说明书是概要实际阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。


什么是结构化程序设计?经典、扩展和修正的控制结构;

经典定义

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

更全面定义

结构程序设计是尽可能少用 GOTO 语句的程序设计方法。最好仅在检测出错误时才使用 GOTO 语句,而且应该总是使用前向 GOTO 语句。

  • 为了实际使用方便起见,常常还允许使用 DO-UNTIL 和 DO-CASE 两种控制结构。
    其他常用的控制结构
  • 有时需要立即从循环(甚至嵌套的循环)中转移出来,允许使用 LEAVE(或 BREAK)结构。LEAVE 或 BREAK 结构实质上是受限制的 GOTO 语句,用于转移到循环结构后面

经典的结构程序设计

只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这三种基本控制结构;

扩展的结构程序设计

如果除了上述3中基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构;

修正的结构程序设计

再加上允许使用LEAVE(或BREAK)结构。


人机界面设计遇到的4个问题:系统响应时间(长度和易变性)、用户帮助设施、出错信息处理、命令交互;

  • 人机界面设计是接口设计的重要组成部分。对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。
  • 人机界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命,必须对人机界面设计给予足够重视。

设计人机界面过程中会遇到的4个问题:

1. 系统响应时间:

系统相应时间指从用户完成某个控制动作,到软件给出预期的相应之间的这段时间。系统响应时间有两个重要属性:长度和易变性。

  • 长度: 如果系统响应时间过长,用户就会感到紧张
  • 易变性: 指系统响应时间相对于平均相应时间的偏差,即使系统响应时间较长,响应时间易变性低也有助于用户建立起稳定的工作节奏。

2. 用户帮助设施

大多数现代软件都提供联机帮助设施,用户无须离开用户界面就能解决自己的问题。常见的帮助设施可分为集成的和附加的两类。

  • 集成的帮助设施 设计在软件里面,它对用户工作内容是敏感的,用户可以从与刚刚完成的操作有关的主题中选择一个请求帮助。
  • 附加的帮助设施 是在系统建成后再添加到软件中的,它实际上是一种查询能力有限的联机用户手册。

集成的帮助设施优于附加的帮助设施。

3. 出错信息处理

出错信息和警告信息,是出现问题时交互式系统给出的“坏消息”。

4. 命令交互

多数情况下,用户既可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。
在理想的情况下,所有应用软件都有一致的命令使用方法。


过程设计的工具:图形、表格和语言。程序流程图、盒图(N-S图)、PAD图、判定表、判定树

  • 定义:描述程序处理工程的工具
  • 分类:图形、表格和语言
  • 基本要求:不论是哪类工具,对它们的基本要求都是能提供对设计的无歧义的描述, 也就是应该指明控制流程、处理功能、数据组织以及其他方面的实现细节,从而在编码阶段能把对设计的描述直接翻译成程序代码。

1. 程序流程图

  • 程序流程图又称为程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法。
  • 它的主要优点是对控制流程的描绘很直观,便于初学者掌握。
  • 程序流程图历史悠久,至今仍在广泛使用着。

程序流程图的符号

程序流程图符号

程序流程图的主要缺点:

>

  • 程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
  • 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
  • 程序流程图不易表示数据结构。

2. 盒图(N-S图)

盒图的特点:

>

  • 功能域明确。
  • 不可能任意转移控制。
  • 很容易确定局部和全称数据的作用域。
  • 很容易表示嵌套关系,也可以表示模块的层次结构。

盒图的基本符号:

盒图的基本符号
(a) 顺序;(b) IF_THEN_ELSE型分支;(c) CASE型多分支;(d) 循环;(e) 调用子程序 A

3. PAD图

  • PAD是问题分析图(problem analysis diagram)的英文缩写,自1973年由日本日立公司发明以后,已得到一定程度的推广。
  • 它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。

PAD图的基本符号:

PAD图的基本符号
(a)顺序(先执行P1后执行P2);(b)选择(IF C THEN P1 ELSE P2);(c)CASE型多分支(d)WHILE型循环(WHILE C DO P);(e)UNTIL型循环(REPEAT P UNTIL C);(f)语句标号;(g)定义

PAD图的主要优点:

  • 使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序。
  • PAD图所描绘的程序结构十分清晰。
  • PAD图表现程序逻辑易读、易懂、易记。
  • 容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成。
  • 既可表示程序逻辑,也可描绘数据结构。
  • PAD图的符号支持自顶向下、逐步求精方法的使用。

使用PAD提供的定义功能来逐步求精的例子
使用PAD提供的定义功能逐步求精_例

4. 判定表

  • 当算法中包含 多重嵌套的条件选择 时,用程序流程图、盒图、PAD图或后面即将介绍的过程设计语言(PDL)都不易清楚地描述。
  • 判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。

判定表组成(4部分)

  • 左上部列出所有条件;
  • 左下部是所有可能做的动作;
  • 右上部是表示各种条件组合的一个矩阵;
  • 右下部是和每种条件组合相对应的动作。

判定表组成

优点:

能清晰地表示复杂的条件组合与应做的动作之间的对应关系。

缺点:

  • 判定表的含义不是一眼就能看出来的,初次接触这种工具的人理解它需要有一个简短的学习过程。
  • 当数据元素的值多于两个时,判定表的简洁程度也将下降。

5. 判定树

  • 判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。
  • 多年来判定树一直受到人们的重视,是一种比较常用的系统分析和设计的工具。

>

判定树例子

优点:

形式简单,一眼就可以看出其含义,因此易于掌握和使用。

缺点:

  • 简洁性不如判定表,数据元素的同一个值往往要重复写多遍,而且越接近树的叶端重复次数越多。
  • 画判定树时分枝的次序可能对最终画出的判定树的简洁程度有较大影响。

6. 过程设计语言


过程设计语言(PDL):伪码

  • 过程设计语言(PDL)也称为伪码,它是用正文形式表示数据和处理过程的设计工具。
  • PDL具有严格的关键字外部语法,用于定义控制结构和数据结构;另一方面,PDL表示实际操作和条件的内部语法通常又是灵活自由的,可以适应各种工程项目的需要。
  • PDL是一种“混杂”语言,它使用一种语言的词汇,同时却使用另一种语言的语法。

伪代码的基本控制结构:

  • 简单陈述句结构:避免复合语句。
  • 判定结构:IF_THEN_ELSE 或 CASE_OF 结构。
  • 选择结构:WHILE_DO或REPEAT_UNTIL 结构

PDL的特点:

  1. 关键字的固定用法,它提供了结构化控制结构、数据说明和模块化的特点。
  2. 自然语言的自由语言,它描绘处理特点。
  3. 数据说明的手段。应该既包括简单的数据结构,又包括复杂的数据结构。
  4. 模块定义和调用的技术,应该提供各种接口描述模式。

PDL的优点:

  • 可以作为注释直接插在源程序中间。有助于保持文档和程序的一致性,提高了文档的质量。
  • 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。
  • 已经有自动处理程序存在,并且可以自动由PDL生成代码。

PDL的缺点:

不如图形工具直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。


面向数据结构的设计方法-Jackson图,和步骤

  • 数据结构既影响程序的结构又影响程序的处理过程
    • 重复出现的数据通常由具有循环控制结构的程序来处理
    • 选择数据要用带有分支控制结构的程序来处理
    • 层次的数据组织通常和使用这些数据的程序的层次结构十分相似。
  • 面向数据结构的设计方法的最终目标是得出对程序处理过程的描述。

Jackson图

数据结构中数据元素彼此间的逻辑关系:

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

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

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

优点:

  • 便于表示层次结构,而且是对结构进行自顶向下分解的有力工具;
  • 形象直观可读性好;
  • 技能表示数据结构也能表示程序结构。

缺点:

表示选择或重复结构时,选择条件或循环结束条件不能直接在图上表示出来,影响了图的表达能力,也不易直接把图翻译成程序;
框间连线为斜线,不易在行式打印机上输出。

改进的Jackson图

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

Jackson程序设计方法由5个步骤组成:

  1. 分析并确定输入数据和输出数据的逻辑结构,用 Jackson 图描绘数据结构。
  2. 找出输入数据结构和输出数据结构中有对应关系的数据单元。所谓有对应关系是指有直接的因果关系,在程序中可以同时处理的数据单元(对于重复出现的数据单元必须重复的次序和次序都相同才可能有对应关系)。
  3. 用下述规则从描绘数据结构的 Jackson 图导出描绘程序结构的 Jackson 图:

    • 第一,为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框(层次不同时与图中层次低的那个对应);
    • 第二,根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;
    • 第三,根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。
    • 改进的Jackson图规定在构成顺序结构的元素中不能有重复出现或选择出现的元素,因此可能需要增加中间层次的处理框。
  4. 列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。

  5. 用伪码表示程序。
顺序结构 选择结构 循环结构
A seq</br>B</br>C</br>D</br>A end A select cond1</br>$\quad$B</br>A or cond2</br>$\quad$C</br>A or cond3</br>$\quad$D</br>A end A iter until(或while) cond</br>$\quad$B</br>A end$\quad$

设计步骤如下:

  1. 用Jackson图描绘的输入输出结构。

输入输出结构

  1. 分析确定在输入数据结构和输出数据结构中有对应关系的数据单元。

对应关系的数据单元

  1. 从数据结构图导出程序结构图。

从数据结构图导出程序结构图

  1. 列出所有操作和条件,并且把它们分配到程序结构图的适当位置。

  1. 用伪码表示程序处理程序。

Jackson、层次图和层次方框图的区别

Jackson图 层次图 层次方框图
作用 1. 描述数据结构</br>2. 描绘程序结构 描绘软件结构 描绘数据结构
矩形框 1. 数据结构</br>2. 几个语句 模块 数据元素
连线 组成关系 调用关系 组成关系