结构化程序设计

结构化程序设计是 60 年代产生的一种程序设计理论和方法,它是目前使用最为广泛且为实践所证明行之有效的程序设计方法。

结构化程序设计方法是针对传统的非结构化程序设计而言的。在计算机技术的发展过程中,由于早期的计算机内存容量小,运行速度慢,为使程序得以装入内存并有可接收的运行效率,程序设计人员不得不精打细算,力争节约每一个存贮单元,抓住每一个可以提高运行速度的机会,结果形成强调技巧,重视效率的程序设计习惯。同时,由于软件开发没有一定的规范,程序设计又带有强烈的个人色彩,一些程序设计人员将设计看作是表现个人技巧及个性,显示聪明才智的机会,程序设计风格因人而异,而所设计出的程序往往是结构混乱、晦涩难懂。不仅其他人难以理解,就是设计者本人,经过一段时间之后,都无法读懂。而随着计算机硬件技术的发展,内存和速度已不再是制约程序设计的因素。同时,由于软件需求不断增加,要开发的软件数量和规模越来越大,程序设计已不再是一种个体行为,而成为群体合作的项目;程序设计也不再是一次性的编码,而需要反复地维护。大规模高效率的软件生产要求有新的方法指导程序设计,结构化程序因此而产生了。

结构化程序设计的概念最早是由 E.Dijkstra 提出的。由于 GOTO 语句是实现随意控制的极好工具,极易造成 BS(ABOWLOFSPAGHETTI)型的结构混乱的程序,1965 年 Di-jkstra 主张从一切语言中取消 GOTO 语句。他认为,程序的质量同程序中 GOTO 语句中数量成反比。但由于当时 GOTO 语句是FORTRAN 语言实现程序控制的重要语句,而 FORTRAN 是当时最为盛行的程序设计语言。因而 Dijkstra 的主张并未引起人们的注意。1964 年 Boehm 和 Jacopini 证明,只用“顺序”、“选择”和“循环”就可实现所有单入口、单出口的程序。图 3—2—1 为这三种结构的控制流程。由于循环控制可用顺序和选择结构来实现,因而本质上只有两种基本结构。1966 年 Boehm 和 Jacopini 以“流图、图灵机和仅含两个格式规则的语言”为题,在极有影响的杂志Communi-cationofACM 上发表了他们的研究成果,并在文中断言,用任何高级语言编写的程序都可以分解为上述三种基本控制结构及它们的组合。他们的证明使人们开始重视 Dijkstra 的观点,并为结构化程序设计奠定了理论基础。

结构化程序设计 - 图1

60 年代中,Dijkstra 进一步提出程序设计的层次化和抽象的观点,并多次建议从一切高级语言中取消 GOTO 语句,他的这种对 GOTO 语句根本性的否定态度引起激烈的争论。经过争论,人们意识到,不是简单地取消一个语句的问题,而是要确立一种新的程序设计方法和思想,以显著地提高软件生产率和降低维护代价。经过长期的努力,结构化程序设计的思想和方法逐步建立和完善起来。

随着软件开发工程化观念的提出和建立,结构化程序设计(SP)又向软件设计阶段扩展,形成结构化设计(SD),结构化设计又向软件分析阶段扩展,形成了结构化分析(SA),从而形成了系统的结构化方法。

结构化程序设计的基本原则是:

①采用自顶向下,逐步求精的设计方法;

②用顺序、选择和循环三种基本控制结构实现单入口和单出口的程序。一个不含 GOTO 语句,并仅由以上三种控制结构形成的具有单入口和单出

口的结构化程序有以下两方面的优点:

■程序的动态结构和静态结构一致,易于理解和维护。

■有利于程序正确性的证明。只有三种结构的程序可用严格的方法证明其正确性。