软件工程导论-第六章 面向数据结构的分析与设计

几类主要的软件开发方法:
结构化方法,即SA、SD方法
面向数据结构的软件开发方法
面向对象的软件开发方法

第六章 面向数据结构的分析与设计

结构化的分析与设计(面向数据流的分析与设计):根据数据流确定软件结构的方法。
面向数据结构的分析与设计:根据数据结构分析程序处理过程的方法。
共同点都是数据信息驱动的,都试图将数据表示转换成软件表示
不同之处在于面向数据结构的设计不利用数据流图,而根据数据结构的表示来设计。

面向数据结构的需求分析与设计

  • 主要特点:
    信息对象及其操作为核心进行需求分析
    认为复合信息对象具有层次结构,并且可按顺序、选择、重复三种结构分解为成员信息对象
    提供由层次信息结构映射为程序结构的机制,从而为软件设计奠定良好的基础
  • JSP:Jackson结构程序设计方法
  • JSD:Jackson系统开发方法

* 数据结构和程序结构

  • 一般的数据处理系统处理的是具有层次结构的数据,因而其问题结构可以用它所处理的数据结构来表示
    软件工程导论-第六章 面向数据结构的分析与设计_第1张图片
  • JSP方法采用Jackson图来表示数据结构和程序结构
  • Jackson图是一种从左到右阅读的树状层次结构图,上下层之间是组成关系
    • 数据结构图中方框表示数据程序结构图中方框就表示模块(过程或函数)
    • 底部的叶子节点称为基本元素
    • 在底部枝干以上的节点称为结构元素
    • 三种元素类型:顺序元素、选择元素、重复元素

顺序元素

一个顺序元素由一个或多个从左到右的元素组成,每个组成的元素只出现一次
软件工程导论-第六章 面向数据结构的分析与设计_第2张图片

  • 结构正文的表示形式-1
    • 结构正文又称伪码,完全与结构图相对应
    • 分为:顺序结构正文、选择结构正文、重复结构正文
•	顺序结构正文
D  Seq            顺序
     A;           元素D是由一个元素A
     B;           跟随一个元素B
     C;           跟随一个元素C组成
D  END           元素D是元素A、元素B、元素C的序列

选择元素

  • 选择是“If Then Else”或“Case”的结构,而且必须有两个或多个元素
  • 使用选择元素时根据指定的条件从这些子元素中选择一个子元素
  • 供选择的子元素用右上角标以小圆的矩形表示
    示例:左图中A、B、C是D的可选项,而S是选择条件
  • 如果需要一个“If A=B Then X Else do nothing”那么需要加入一个空元素
    示例:右图中空元素用一个标有连字符的矩形表示
    软件工程导论-第六章 面向数据结构的分析与设计_第3张图片
  • 结构正文的表示形式-2
•	选择结构正文
	D  Select  S=cond1    选择
	      A               元素D或是由一个元素A
	    Or   S=cond2
	      B               或是由一个元素B
	    Or   S=cond3
	      C               或是由一个元素C组成
	D  END              
cond1、cond2、cond3分别是选择A,B,C的条件
If S=cond
	Then X 
Else 
	do nothing
Cond是选择的条件

重复元素

  • 重复元素仅由一个子元素构成,表示重复元素由子元素重复0次或多次组成
  • 子元素用右上角标以星号的矩形表示
  • 下图表示元素D由元素A重复0次或多次组成,其中 I 是重复条件
    软件工程导论-第六章 面向数据结构的分析与设计_第4张图片
  • 结构正文的表示形式-3
•	重复结构正文
	D  Iter until cond     重复
	    A;                 元素D是由 1 或多个元素A组成
	D  END                元素D 是元素A的重复
		   cond为循环终止的条件
	或者
  D  Iter  while cond    重复
	     A;                元素D是由 0 至多个元素A组成
	D  END                 cond为循环条件

案例1 打印表格程序的输出数据结构和对应的程序结构

设计一个打印XX学校人员一览表的程序,要求表格形式如图所示,这里,类别是学生和老师两种。打印状态这一项时,如果类别是教师,则打印出他的工龄,如果类别是学生,则打印出他的年级。
软件工程导论-第六章 面向数据结构的分析与设计_第5张图片
软件工程导论-第六章 面向数据结构的分析与设计_第6张图片

JSP方法

  • 总结了COBOL事务处理程序中的开发方法而发展起来的,特点
    重点不是自顶向下逐步求精,而是在数据结构基础上进行构造
    根据输入/输出的数据结构建立程序结构
  • 目标:获得简单清晰的设计方案
  • 设计原则:使程序结构与问题结构(数据结构)相对应

JSP方法的分析和设计步骤

分析文件格式、输出格式
案例2:一个正文文件由若干个记录组成,每个记录是一个字符串,要求统计每个记录中空格个数,以及文件中空格的总数。
要求输出的格式是:每复制一行输入字符串后,另起一行输出该字符串中的空格数,最后输出文件空格的总数
软件工程导论-第六章 面向数据结构的分析与设计_第7张图片

  • 第1步.分析并确定输入和输出数据结构的逻辑结构,并用Jackson图画出
    软件工程导论-第六章 面向数据结构的分析与设计_第8张图片

  • 第2步.找出输入数据结构与输出数据结构中有对应关系的数据元素
    有对应关系是指有直接因果关系,即在程序中可以同时处理的数据元素
    对于表示“重复”的数据元素,只有其重复次数和次序都相同时才有对应关系
    输入/输出数据结构最高层次的两个数据元素总是有对应关系的
    软件工程导论-第六章 面向数据结构的分析与设计_第9张图片

  • 第3步.从描述数据结构的Jackson图导出描述程序结构的Jackson图,导出规则

    • 有对应关系的数据元素,按照它们在数据结构图中的层次在程序结构图的相应层次上画一个处理框(如果它们在输入和输出图中的层次不同,则程序结构图中处理框层次与较低的那个对应)
    • 为输入数据结构图中剩余的每个数据元素,在程序结构图的相应层次上画一个处理框, 在模块名称上增加“分析”或“处理”或取一个具有实际含义的名称
    • 为输出数据结构图中剩余的每个数据元素,在程序结构图的相应层次上画上一个处理框
      软件工程导论-第六章 面向数据结构的分析与设计_第10张图片
  • 第4步.列出所有操作和条件,并将它们分配到程序结构图的适当位置
    首先从输出操作开始,再回到输入操作
    加入必须的与条件有关的操作
    最后把每个操作都分配到程序结构中去
    软件工程导论-第六章 面向数据结构的分析与设计_第11张图片

  • 第5步.把带有操作的程序结构图转换成结构正文,同时加入选择及迭代条件
    软件工程导论-第六章 面向数据结构的分析与设计_第12张图片

JSP方法的特点

  • 简单、易学、形象直观、可读性好
  • 便于表示层次结构
  • 适用于小型数据处理系统

课堂练习:

  1. 问题陈述
    某仓库存放多种零件(如P1, P2, ……),每个零件的每次进货、发货都有一张卡片作出记录,每月根据这样一叠卡片打印一张月报表。 报表每行列出某种零件本月库存量的净变化。用JSP方法给出输入输出数据结构、程序结构图以及伪码。

  2. 建立输入、 输出数据结构
    建立输入、 输出数据结构的步骤如下:
    (1) 输入数据: 根据问题陈述, 同一种零件的进货、 发货状态不同,每月登记有若干张卡片。
    把同一种零件的卡片放在一起组成一组,所有的卡片组按零件名排序。 所以输入数据是由许多零件组组成的文件,每个零件组有许多张卡片, 张卡片上记录着本零件进货或发货的信息。因此输入数据结构的Jackson图为图(a)。
    (2) 输出数据:根据问题陈述,输出数据是一张如图(c)的月报表, 它由表头和表体两部分组成,表体中有许多行, 一个零件的净变化占一行,其输出数据结构的Jackson图为图(b)。
    3) 找出输入、 输出数据结构中有对应关系的单元
    月报表由输入文件产生,有直接的因果关系, 因此顶层的数据单元是对应的。表体的每一行数据由输入文件的每一个“零件组”计算而来,行数与组数相同,且行的排列次序与组的排列次序一致,都按零件号排序。因此“零件组”与“行”两个单元对应,以下再无对应的单元。
    软件工程导论-第六章 面向数据结构的分析与设计_第13张图片
    4) 导出程序结构
    找出对应关系后,根据以下规则导出程序结构:对于输入数据结构与输出数据结构中的数据单元,每对有对应关系的数据单元按照它们所在的层次,在程序结构图适当位置合画一个处理框,无对应关系的数据单元,各画一个处理框。
    根据以上规则, 画出的程序结构图如图所示。
    在图的程序结构的第4层增加了一个“处理零件组”的框,因为改进的Jackson图规定顺序执行的处理中不允许混有重复执行和选择执行的处理。 增加了这样一个框, 使符合该规定,同时也提高了结构图的易读性。
    软件工程导论-第六章 面向数据结构的分析与设计_第14张图片
    5) 列出并分配操作与条件
    为了对程序结构作补充,要列出求解问题的所有操作和条件,然后分配到程序结构图的适当位置, 就可得到完整的程序结构图。
    (1) 本问题的基本操作列出如下:
    A、终止 B、打开文件 C、关闭文件 D、打印字符行 E、读一张卡 F、产生行结束符 G、累计进货量 H、累计发货量 I、计算净变化 J、置零件组开始标志
    (2) 列出条件如下:
    I(1):输入条件未结束I(2):零件组未结束S(3): 进发货标志将操作与条件分配到适当位置的程序结构图如图所示。
    软件工程导论-第六章 面向数据结构的分析与设计_第15张图片
    在分配操作时注意:为了能获得重复和选择的条件, Jackson建议至少超前读一个记录,以便使得程序不论在什么时候判定, 总有数据已经读入,并做好使用准备。 因此在图中, 将操作E(读一张卡)放在打开文件之后,同时在处理完一张卡片后再读一次。

  3. 用纲要逻辑写出程序
    Jackson方法中的纲要逻辑与Jackson所示的程序结构图完全对应,用纲要逻辑写出程序的过程,实际上就是自顶向下用这些纲要逻辑替换Jackson图中每个处理框的过程,每个处理框都看作是下层处理框及分配在上面的操作组成。
    图所示的程序结构的纲要逻辑为:
    软件工程导论-第六章 面向数据结构的分析与设计_第16张图片
    软件工程导论-第六章 面向数据结构的分析与设计_第17张图片
    软件工程导论-第六章 面向数据结构的分析与设计_第18张图片
    软件工程导论-第六章 面向数据结构的分析与设计_第19张图片

    结构冲突问题
    JSP方法适用于输入数据和输出数据结构之间有对应关系的问题求解。但有些情况下,输入数据和输出数据结构之间找不到对应关系, 若仓库系统中的卡片不按零件名分组,而是按进货、发货的日期顺序排列,这样“零件组”与“行”就不对应了。 输入数据与输出数据结构找不到对应关系的情况,称为结构冲突。 对这种结构冲突的问题,Jackson提出了引入中间数据结构或中间文件的办法, 将冲突部分分隔开来,建立多个程序结构, 再利用中间文件把它们联系起来,构成一个系统的整体。

JSD方法

  • JSP广泛使用十多年后,Jackson把它进行了扩充,不再局限于中小规模范围的问题及顺序范围,新的开发方法称为JSD
  • JSD覆盖了整个系统的分析到实现
  • JSD的本质:先建立一个现实模型,然后加入功能性处理,最后阶段,逻辑系统才转换为实际设计

JSD方法步骤

  • 标识实体与行为
    建立现实的模型,列出与系统有关的实体表及活动表
  • 生成实体结构图
    分析实体表中实体之间的关系,形成实体结构图
  • 创造软件系统模型
    根据现实世界,对实体与行为的组合建立进程模型
  • 扩充功能性过程
    说明系统输出的功能,必要时在规格说明中加入附加的处理
  • 施加时间控制
    开发者考虑进程调度的某些特征,这些特征可能影响系统功能所输出的结果的正确性及时间关系
  • 实现
    开发者考虑运行系统的软硬件方面的问题,采用变换技术、调度技术、数据库定义技术等,以使系统能有效地运行

小结

面向数据结构的分析和设计方法是以数据结构为中心,从输入/输出的数据结构导出程序结构
由于这种方法在国内用得比较少,因此只作了简单介绍,主要是通过实例来介绍JSP方法,使读者对这种方法有一个大致的了解

你可能感兴趣的:(软件工程导论,软件工程,数据结构,java)