计算机编程/结构化编程
结构化编程是针对非结构化编程的建议解药,非结构化编程在结构化编程发明之前存在了几十年。
非结构化程序是一种过程式程序 - 语句按编写顺序执行。但这种类型的编程使用 goto 语句。goto 语句允许将控制权传递到程序中的任何其他位置。当执行 goto 语句时,序列从 goto 的目标继续。因此,要了解程序的工作原理,您必须假装执行它。这意味着通常很难理解这种程序的逻辑。一些程序编译器交叉索引 goto 连接到的位置,使其能够快速浏览源代码。然而,在某些编程语言中,将变量与 goto 的目标相关联是一种常见的做法,这使得自动化索引变得不切实际。在某些结构化编程语言中存在类似的问题,例如如何实现外语视图,以允许许多人以其人类语言查看相同的数据。.
这与使用某种形式的抽象来理解程序工作原理的想法形成对比 - 就像结构化编程中那样。
为此,Dijkstra 建议禁止 goto 语句。
从一个角度来看,结构化编程是指避免使用可能危险的 goto 语句的编程。这可以防止潜在的混乱控制转移。许多结构化编程语言支持 goto 语句,该语句可以以结构化的方式使用。例如,退出到例程的末尾,或返回到循环的开头。
从另一个角度来看,结构化编程仅限于使用只有单个入口点和单个出口点的控制结构。这些结构中最重要的结构是顺序、选择(if 和 if..else)和重复(while)。
另一个观点是,结构化程序是以这样一种方式编写的程序,可以通过抽象轻松地理解它们。抽象意味着能够理解某些代码的整体目的,而无需理解细节。抽象的主要机制是过程(方法)。但上面提到的单入口单出口结构也有助于使用抽象。
结构化编程得益于高级语言和相关程序包,这些程序包可以通过软件图表技术进行流程图绘制,这些技术可以被非程序员理解。
一些计算机科学家负责发现结构化编程的概念,并将这一概念传达给其他程序员的世界。结构化编程首次体现在 ALGOL(算法语言)语言中(该语言成为第一个用于 Burroughs B5000 MCP(OS)系统编程的高级语言),(由 Bob Barton 设计,后来成为犹他大学的教授,他在那里影响了学生 Alan Kay,他发明了 GUI 窗口,并且是 Smalltalk 的开发人员之一)。反过来,ALGOL 成为 Simula 的基础,Simula 是第一个面向对象的语言。
ALGOL 基于一种名为 BNF(巴克斯-诺尔范式)的语言设计形式主义,以其创始人 John Backus 和 Peter Naur 的名字命名。
该技术的重要著作是“结构化编程”(学术出版社 1972 年),该书包含三个部分:“关于结构化编程的笔记”由 Edsger W. Dijkstra 撰写,“关于数据结构的笔记”由 C.A.R. Hoare 撰写,“层次程序结构”由 Ole-Johan Dahl 和 C.A.R Hoare 撰写。最后一节介绍了 Simula 及其面向对象和并发功能。
Edsger Djikstra 还撰写了《编程纪律》(Prentice Hall,1976 年)一书。
结构化编程领域的另一位杰出人物是 Donald Knuth,他撰写了多卷本的《计算机程序设计艺术》一书。
后来,Ed Yourdon 和 Larry Constantine 撰写了一本名为“结构化设计”的书,许多人认为是结构化编程,但它并非如此。这是一种图形技术,在实践中极其繁琐,尽管它基本已被抛弃,但在其他非正式方法(如 UML)中也有继任者。结构化设计和结构化编程中概述的技术非常不同,不应混淆,因为它们共享“结构化”一词。
进一步阅读
- goto 不邪恶吗? - 比较 goto 和 return。