• 命令式编程范式初探

    一切行动听指挥
    服务器君一共花费 380.984 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    命令式编程

    命令式编程(Imperative Programming)是最原始也是我们最熟悉的编程范式。用命令式编写的程序由命令序列组成,即一系列祈使句:“先做这,再做那”,强调“怎么做”。

    更学术点说,命令式编程是电脑——准确地讲,是冯•诺伊曼机(von Neumann machine)——运行机制的抽象,即依序从内存中获取指令和数据然后去执行。从范式的角度看,其世界观是:程序是由若干行动指令组成的有序列表;其方法论是:用变量来储存数据,用语句来执行指令。

    • 绝大多数语言是命令式的。编程语言的演化是渐进的,大多数语言追根溯源是汇编语言的升级,而作为与机器语言一一对应的汇编语言自然是命令式的,因而这种范式最为传统和普及。

    命令式编程与过程式编程

    严格说来,过程式编程(procedural programming)是指引入了过程(procedure)、函数(function)或子程序(subroutine/subprogram)的命令式编程。但由于现代的命令式语言均具备此特征,故二者往往不加区分。

    • 就是说,过程式编程是命令式编程的一个规模差不多的子集吧。两者的思想差异不大,虽然不加区分,但是我们还是得了解他们之间那细小的差异。

    由于常用的语言基本上都是命令式的,其思想也与计算机的运行机制相符,一切对我们来说,似乎都是自然而然的事。

    结构化编程

    单纯的命令式思想的确很朴素,毋庸赘述。但有必要提一下结构化编程(structured programming或简称SP),它是在过程式编程的基础上发展起来的。其本质是一种编程原则,提倡代码应具有清晰的逻辑结构,以保证程序易于读写、测试、维护和优化。可别小瞧它,在上世纪六十年代首次爆发的软件危机中,它曾起着中流砥柱的作用,就像后来的OOP一样。Pascal正是遵循结构化编程原则而设计的一种教学语言,当年也是风光无限。

    这是一个流程图(flowchart),或称程序框图,它描述了一个简单程序:用户从标准输入中键入算术表达式,程序打印出结果,如此循环往复,直到用户输入字符‘q’为止。

    若以纯粹的结构化编程的标准来衡量,该流程图并未达标。根据结构化定理(structured program theorem),任何程序都可用顺序(concatenation)、选择(selection)和循环(repetition)等三种基本控制结构来表示。

    结构化编程就是在三种基本结构的基础上进行嵌套组合。如果将每个基本结构看作基本电器元件,编程就是将这些元件组装成复杂的电路。请注意,所有基本元件都满足‘单入口、单出口’(single entry, single exit,简称SESE)的原则,这使得电路井井有条,不会串线缠绕。

    上面的流程图无法用基本结构来组合,所以不是标准的结构化程序。

    关于Goto语句

    break语句只是在循环体内部的跳转,合理地使用它能简化代码,不致影响整体结构,大可不必拘泥于教条。但goto语句可以跳到程序过程中的任一点,造成静态程序(static program)与动态进程(dynamic process)之间的差异,影响程序可读性,是要竭力避免的。

    结构化编程的思想包括两方面。在微观上,主张循规守矩,采用顺序、选择和循环三种逻辑结构,摒弃或限制goto语句,以避免杂乱无章的代码。在宏观上,主张分而治之(divide and conquer),采用‘自顶向下(top-down)’的设计,通过模块化将一个较为复杂的系统分解为若干相对简单的子系统,每个子系统可以独立地进一步分解,直到容易编码实现为止。这两方面是互为因果、互为保障的——由基本结构拼装而成的系统一定是模块清晰、层次分明的;反之,系统逐步分解到最后,一定会演化成基本结构。

    一个按结构化编程思想设计的流程图,每个模块大小适中、模块之间关系简明、模块内部线路清晰,单从视觉上就会给人一种美感。相反,如果采用非结构化的设计,流程图往往结构如杂草般松散紊乱、脉络如迷宫般错综复杂、箭头如线头般剪不断理还乱,情节严重的会导致读者头晕目眩乃至抓狂吐血。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] 从代码角度去认识HttpClient 2 个条目
  2. [数据库技术] SQL基础语法 1 个条目
  3. [移动开发] Android开发基础知识 4 个条目
  4. [移动开发] 从代码角度去认识 Activity 4 个条目
  5. [Python程序设计] Python数据类型 11 个条目
  6. [Python程序设计] Django后台管理系统 2 个条目
  7. [软件工程与项目管理] 开始了解Git 5 个条目
  8. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  9. [移动开发] Layout_weight属性解析 5 个条目
  10. [移动开发] Android 开发调试工具 ADB 3 个条目
  11. [计算机算法] 两数交换的各种算法细节 2 个条目
  12. [软件工程与项目管理] 浏览器的HTML解析器 8 个条目
窗口 -- [协会]