加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

结构程序设计 -- 软件发展的里程碑

(2011-03-28 18:55:35)
标签:

杂谈

分类: 技术

结构程序设计”概念被称为软件发展中的第三个里程碑(第一、二个里程碑是子程序和高级语言),是由著名的荷兰计算机科学家埃德斯加·狄克斯特拉(Edsgar Wybe Dijkstra)。早在1965年召开的IFIP会议上,Dijkstra就提出“Go To语句可以从高级语言中取消”,“一个程序的质量与程序中所含的Go To语句的数量成反比”。在1966年,C·Bohm和G·Jacopini就证明了程序设计语言中,只要有顺序、选择和循环三种形式的控制结构,就足以表示出其他各式各样的程序结构。1968年3月,ACM通讯(Communications of ACM)登出了狄克斯特拉的那封影响深远的信《Goto语句看来是有害的》("GOTO Statement Considered Harmful"),在信中他根据自己编程的实际经验和大量观察,得出如下结论:一个程序的易读性和易理解性同其中所包含的无条件转移控制的个数成反比关系,也就是说,转向语句的个数愈多,程序就愈难读、难懂。因此他认为"GOTO是有害的”,并从而启发了结构化程序设计的思想。1972年,他与当时在爱尔兰昆士大学任教的英国计算机科学家、1980年图灵奖获得者霍尔(C.A.R.Hoare)合著了《结构程序设计》一书(Structured Programming,Academic Pr.),进一步发展与完善了这一思想,并且提出了另一个著名的论断:“程序测试只能用来证明有错,决不能证明无错!”(Program testing can be used to show the presence Of bugs,but never to show their absence!)。有关Goto语句的争论,直到1974年克努特发表文章《带有Goto语句的结构化程序设计》之后才平息下来。他主张在语言控制划分中仍然保留Goto语句,在功能方面不加限制,但限制其使用范围。结构化程序允许有Goto语句,但它只能在本程序块内使用,不允许从一个结构转移到另一个结构。

在与癌症进行了多年的斗争之后,伟大的荷兰计算机科学家Edsger Wybe Dijkstra已经于2002年8月6日在荷兰Nuenen自己的家中与世长辞!终年72岁。

“结构程序设计”的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、重复三种基本控制结构构造;其实质是控制编程中的复杂性。该方法的要点是:
(1) 没有GOTO语句;
(2) 一个入口,一个出口;
(3) 自顶向下、逐步求精的分解;
(4) 主程序员组。
其中(1)、(2)是解决程序结构规范化问题;(3)是解决将大划小,将难化简的求解方法问题;(4)是解决软件开发的人员组织结构问题。

详细描述处理过程常用三种工具:图形、表格和语言。
图形:程序流程图、N-S图、PAD图
表格:判定表
语言:过程设计语言(PDL)

a)选择(分支);(b)注释;(c)预先定义的处理;(d)多分支;(e)开始或停止;(f)准备;(g)循环上界限;(h)循环下界限;(i)虚线;(j)省略符;(k)并行方式;(1)处理;(m)输入/输出;(n)连接;(0)换页连接;(p)控制流。从20世纪40年代末到70年代中期,程序流程图一直是过程设计的主要工具。它的主要优点是对控制流程的描绘很直观,便于初学者掌握。由于程序流程图历史悠久,为最广泛的人所熟悉,尽管它有种种缺点,许多人建议停止使用它,但至今仍在广泛使用着。不过总的趋势是越来越多的人不再使用程序流程图了。

    程序流程图的主要缺点如下:

    程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。

    程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。

    程序流程图不易表示数据结构。

    应该指出,详细的微观程序流程图——每个符号对应于源程序的一行代码,对于提高大型系统的可理解性作用甚微。

 

PAD图

定义

PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日立公司发明以来,已经得到一定程度的推广。它用二维数形结构的图表示程序的控制流,将这种图转换为程序代码比较容易。

 http://a1.att.hudong.com/03/79/01000000000000119087904888603.jpg-- 软件发展的里程碑" />

优点

1. 使用表示结构优化控制结构的PAD符号所设计出来的程序必然是程序化程序
2. PAD图所描述的程序结构十分清晰。图中最左边的竖线是程序的主线,即第一层控制结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数;
3. 用PAD图表现程序逻辑,易读、易懂、易记。PAD图是二维数型结构的图形,程序从图中最左边上端的结点开始执行,自上而下,从左到右顺序执行;
4. 很容易将PDA图转换成高级程序语言源程序,这种转换可由软件工具自动完成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。
5. 可用于表示程序逻辑,也可用于描述数据结构
6. PAD图的符号支持自顶向下、逐步求精方法的使用。开始时设计者可以定义一个抽象程序,随着设计工作的深入而使用“def”符号逐步增加细节,直至完成详细设计。

 

 

 

结构程序设计的相关论文和书籍

(1) Bohm, C, and G. Jacobini, Flow Diagrams, Turing Machines, and Languages with only Two Formation Rules, Comm, ACM(9)5 (1966 May),366-371.

    C·Bohm和G·Jacopini证明了程序设计语言中,只要有顺序、选择和循环三种形式的控制结构,就足以表示出其他各式各样的程序结构。

(2) E. Dijkstra. "GOTO Statement Considered Harmful" Communications of the ACM, 11:3, p. 147, March 1968.

    Dijkstra根据自己编程的实际经验和大量观察,得出如下结论:一个程序的易读性和易理解性同其中所包含的无条件转移控制的个数成反比关系,也就是说,转向语句的个数愈多,程序就愈难读、难懂。因此他认为"GOTO是有害的”

(3) O.-J. Dahl, E.W. Dijkstra, C.A.R. Hoare."Structured Programming" Academic Press, 1972.

    《结构程序设计》达尔,O.-J., DIJKSTRA,E.W., HOARE  (陈火旺等译)科学出版社,1980年.

(4) Knuth, Donald E. "Structured Programming with go to Statements" ACM Computing Surveys 6(4):261-301, December 1974.

    Knuth主张在语言控制划分中仍然保留Goto语句,在功能方面不加限制,但限制其使用范围。结构化程序允许有Goto语句,但它只能在本程序块内使用,不允许从一个结构转移到另一个结构。

(5) Edsger Dijkstra, Notes on Structured Programming, pg. 6

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有