1、程序步骤图程序步骤图独立于任何一个程序设计语言,比较直观、清楚,易于学习掌握。但步骤图也存在部分严重缺点。比如步骤图所使用符号不够规范,常常使用部分习惯性使用方法。尤其是表示程序控制步骤箭头能够不受任何约束,随意转移控制。这些现象显然是和软件工程化要求相背离。为了消除这些缺点,应对步骤图所使用符号做出严格定义,不许可大家随心所欲地画出多种不规范步骤图。比如,为使用步骤图描述结构化程序,必需限制步骤图只能使用图3.25所给出五种基础控制结构。图4.3 步骤图基础控制结构任何复杂程序步骤图全部应由这五种基础控制结构组合或嵌套而成。作为上述五种控制结构相互组合和嵌套实例,图示给出一个程序步骤图。图中
2、增加了部分虚线组成框,目标是便于了解控制结构嵌套关系。显然,这个步骤图所描述程序是结构化。图4.4步骤图基础控制结构N-S图Nassi和Shneiderman 提出了一个符合结构化程序设计标准图形描述工具,叫做盒图,也叫做N-S图。为表示五种基础控制结构,在N-S图中要求了五种图形构件。参看图4.5。为说明N-S图使用,仍用图4.4给出实例,将它用图4.6所表示N-S图表示。如前所述,任何一个N-S图,全部是前面介绍五种基础控制结构相互组合和嵌套结果。当问题很复杂时,N-S图可能很大。图4.5 N-S图五种基础控制结构图4.6 N-S图实例PAD PAD是Problem Analysis Di
3、agram缩写,它是日本日立企业提出,由程序步骤图演化来,用结构化程序设计思想表现程序逻辑结构图形工具。现在已为ISO认可。PAD也设置了五种基础控制结构图式,并许可递归使用。图4.7 PAD基础控制结构做为PAD应用实例,图4.8给出了图4.4程序PAD表示。PAD所描述程序层次关系表现在纵线上。每条纵线表示了一个层次。把PAD图从左到右展开。伴随程序层次增加,PAD逐步向右展开。PAD实施次序从最左主干线上端结点开始,自上而下依次实施。 每碰到判定或循环,就自左而右进入下一层,从表示下一层纵线上端开始实施,直到该纵线下端,再返回上一层纵线转入处。如此继续,直到实施到主干线下端为止。图4.8
4、 PAD实例 判定表当算法中包含多重嵌套条件选择时,用程序步骤图、N-S图或PAD全部不易清楚地描述。然而,判定表却能清楚地表示复杂条件组合和应做动作之间对应关系。仍然使用图4.4例子。为了能适应判定表条件取值只能是T和F情形,对原图稍微做了些改动,把多分支判定改为两分支判定,但整个图逻辑没有改变。见图4.9。和图3.31表示步骤图对应判定表图3.32所表示。在表右上半部分中列出全部条件,表示该条件取值为真,表示该条件取值为假,空白表示这个条件不管取何值对动作选择不产生影响。在判定表右下半部分中列出全部处理,画表示要做这个动作,空白表示不做这个动作。判定表右半部每一列实质上是一条规则,要求了和
5、特定条件取值组合相对应动作。图4.9 不包含多分支结构步骤图实例PDL(Program Design Language) PDL是一个用于描述功效模块算法设计和加工细节语言。称为设计程序用语言。它是一个伪码。通常地,伪码语法规则分为外语法和内语法。外语法应该符合通常程序设计语言常见语句语法规则;而内语法能够用英语中部分简单句子、短语和通用数学符号,来描述程序应实施功效。使用PDL语言,能够做到逐步求精:从比较概括和抽象PDL程序起,逐步写出更具体更正确描述。PDL就是这么一个伪码。它含有严格关键字外语法,用于定义控制结构和数据结构,同时它表示实际操作和条件内语法又是灵活自由,可使用自然语言词汇
6、。下面举一个例子,来看PDL使用。 从上例能够看到,PDL 语言含有正文格式,很像一个高级语言。大家能够很方便地使用计算机完成PDL书写和编辑工作。PROCEDURE spellcheck IS 查找错拼单词 BEGINsplit document into single words 把整个文档分离成单词lood up words in dictionary 在字典中查这些单词display words which are not in dictionary 显示字典中查不到单词create a new dictionary 造一新字典END spellcheck PDL作为一个用于描述程序逻
7、辑设计语言,含有以下特点:有固定关键字外语法,提供全部结构化控制结构、数听说明和模块特征。属于外语法关键字是有限词聚集,它们能对PDL正文进行结构分割,使之变得易于了解。为了区分关键字,要求关键字一律大写,其它单词一律小写。内语法使用自然语言来描述处理特征。内语法比较灵活,只要写清楚就能够,无须考虑语法错,以利于大家可把关键精力放在描述算法逻辑上。有数听说明机制,包含简单(如标量和数组)和复杂(如链表和层次结构)数据结构。有子程序定义和调用机制,用以表示多种方法接口说明。HIPO图(Hierarchy plus Input Process Output) HIPO最初只用做文档编写格式要求,随
8、即发展成比较有名软件设计手段。HIPO图采取功效框图和PDL来描述程序逻辑,它由两部分组成:可视目录表和IPO图。可视目录表给出程序层次关系,IPO图则为程序各部分提供具体工作细节。1、可视目录表可视目录表由体系框图、图例、描述说明三部分组成。(1)体系框图又称层次图(H图),是可视目录表主体,用它表明各个功效隶属关系。它是自顶向下逐层分解得到,是一个树形结构。它顶层是整个系统名称和系统概括功效说明;第二层把系统功效展开,分成了多个框;第二层功效深入分解,就得到了第三层、第四层,直到最终一层。每个框内全部应有一个名字,用以标识它功效。还应有一个编号,以统计它所在层次及在该层次位置。(2)图例每
9、一套HIPO图全部应该有一个图例,即图形符号说明。附上图例,不管大家在什么时侯阅读它全部能对其符号意义一目了然。 (3)描述说明它是对层次图中每一框补充说明,在必需说明时才用,所以它是可选。描述说明能够使用自然语言。比如,应用HIPO法对盘存/销售系统进行分析。得到图4.10所表示工作步骤图。分析此工作步骤图,可得图3.34所表示可视目录表。图4.11(a)是系统层次图,图4.11(b)是后面IPO图图例,图4.11(c)是描述说明。 图4.10 盘存/销售系统工作步骤图图4.11 盘存/销售系统可视目录表2、IPO图IPO图为层次图中每一功效框具体地指明输入、处理及输出。通常,IPO图有固定
10、格式,图中处理操作部分总是列在中间,输入和输出部分分别在其左边和右边。因为一些细节极难在一张IPO图中表示清楚,常常把IPO图又分为两部分,简单概括称为概要IPO图,细致具体部分称为具体IPO图。概要IPO图用于表示对一个系统,或对其中某一个子系统功效概略表示,指明在完成某一功效框要求功效时需要哪些输入,哪些操作和哪些输出。图4.12是表示销售/盘存系统第二层对应于H图上1.1.0框概要IPO图。图4.12 对应H图上1.1.0框概要IPO图在概要IPO图中,没有指明输入处理输出三者之间关系, 用它来进行下一步设计是不可能。故需要使用具体IPO 图以指明输入处理输出三者之间关系,其图形和概要I
11、PO图一样,但输入、输出最好用具体介质和设备类型图形表示。图4.13是销售/盘存系统中对应于1.1.2框一张具体IPO图。图4.13 对应于H图1.1.2框具体IPO图3、利用HIPO进行迭代式细化设计在软件设计时,处理设计问题通常需要经历一个认识逐步发展过程,而且对部分问题还要经过反复考虑才可能达成比较满意设计效果。我们称此为迭代式细化设计。HIPO能很好地适应这一要求。图4.14是利用HIPO进行迭代式细化设计示意图。从图中可看到,把可视目录表和IPO图结合起来,反复交替地使用它们,可使得设计工作逐步深化,最终取得完满设计结果。其实这正是自顶向下,逐步求精结构化程序设计思想。HIPO有自己特点。首先,这一图形表示方法轻易看懂。其次,HIPO适用范围很广,绝不限于具体设计。实际上,画可视目录表就是和概要设计亲密相关工作。假如利用它仅仅表示软件要达成功效,则是需求分析中描述需求很好工具。因为HIPO是在开发过程中表示工具,所以它又是开发文档编制工具。开发完成后,HIPO图就是很好文档,而无须在设计完成以后,专门补写文档。图4.14 利用HIPO进行迭代式细化设计