冒号课堂§2.1:命令范式 - 编程入门网
并未达标。”
叹号有些惊讶:“这个图不是再清晰不过了吗?” “根据结构化定理(structured program theorem)[2],任何程序都可用顺序(concatenation)、选择(selection)和循环(repetition)等三种基本控制结构来表示。”冒号画了几幅图—— 冒号课堂§2.1:命令范式(3)时间:2011-06-25 BlogJava xyz98冒号指点着黑板:“结构化编程就是在三种基本结构的基础上进行嵌套组合。如果将每个基本结构看作基本电器元件,编程就是将这些元件组装成复杂的电路。请注意,所有基本元件都满足‘单入口、单出口’(single entry, single exit,简称SESE)的原则,这使得电路井井有条,不会串线缠绕。” 引号已经看出:“上面的流程图无法用基本结构来组合,所以不是标准的结构化程序。” 冒号提出要求:“你能改造一下吗?” 引号走上讲台,在前图的基础上作了些许调整—— “嗯,不错。这下流程图可以拆解为基本结构了。”冒号表示认可,“二者的区别在于前者利用了break语句,在循环途中退出,后者通过引入quit标志(flag)保证了循环的完整性。” 逗号的脸上写下一个大大的问号:“难道连break语句都不能用吗?” “break语句只是在循环体内部的跳转,合理地使用它能简化代码,不致影响整体结构,大可不必拘泥于教条。但goto语句可以跳到程序过程中的任一点,造成静态程序(static program)与动态进程(dynamic process)之间的差异,影响程序可读性,是要竭力避免的[3]。”冒号如是说道,“结构化编程的思想包括两方面。在微观上,主张循规守矩,采用顺序、选择和循环三种逻辑结构,摒弃或限制goto语句[4],以避免杂乱无章的代码。在宏观上,主张分而治之(divide and conquer),采用‘自顶向下(top-down)’ [5] 的设计,通过模块化将一个较为复杂的系统分解为若干相对简单的子系统,每个子系统可以独立地进一步分解,直到容易编码实现为止。这两方面是互为因果、互为保障的——由基本结构拼装而成的系统一定是模块清晰、层次分明的;反之,系统逐步分解到最后,一定会演化成基本结构。” 叹号产生一个想法:“能从程序的流程图上看出结构化编程与非结构化编程之间的区别吗?” “一个按结构化编程思想设计的流程图,每个模块大小适中、模块之间关系简明、模块内部线路清晰,单从视觉上就会给人一种美感。相反,如果采用非结构化的设计,流程图往往结构如杂草般松散紊乱、脉络如迷宫般错综复杂、箭头如线头般剪不断理还乱,情节严重的会导致读者头晕目眩乃至抓狂吐血。”冒号极尽夸张之能事。 众人掩口失声。 冒号课堂§2.1:命令范式(4)时间:2011-06-25 BlogJava xyz98,插语 [1] 数据流机支持数据流式语言,归约机支持函数式语言。 [2] 见参考文献【1】 [3] 1967年,E.W. Dijkstra 在其著名论文“Goto statement considered harmful”中指出goto语句的危害性,主张废除这种用法。 [4] 1974年,Donald Knuth在论文“Structured Programming with Goto Statements”中认为goto语句仍有其合理性,应该限制而不是完全摒弃。 [5] 也称“自顶向下、逐步求精”。 。总结 命令式编程通过一系列改变程序状态的指令来完成计算,声明式编程只描述程序应该完成的任务。命令式编程模拟电脑运算,是行动导向的,关键在于定义解法,即“怎么做”,因而算法是显性而目标是隐性的;声明式编程模拟人脑思维,是目标驱动的,关键在于描述问题,即“做什么”,因而目标 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |