架构简洁之道-3.编程范式总览

        三个编程范式,它们分别是结构化编程(structuredprogramming)、 面向对象编程(object”oriented programming)以及函数式编程(functional programming)。

1.结构化编程

        结构化编程是第一个普遍被采用的编程范式(但是却不是第一个被提出的〉, 由 Edsger Wybe Dijkstra 于 1968 年最先提出。 与此同时, Dijkstra 还论证了使用 got。 这样的无限制跳转语句将会损害程序的整体结构。 接下来的章节我们还会说到,也 是这位 Dijkstra 最先主张用我们现在熟知的 if/then/else 语句和 do/while/until 语句来代替跳转语句的。

        我们可以将结构化编程范式归结为一句话: 结构化编程对程序控制权的直接转移进行了限制和规范。

2.面向对象编程

        说到编程领域中第二个被广泛采用的编程范式,当然就是面向对象编程了。事 实上,这个编程范式的提出比结构化编程还早了两年,是在 1966年由 OleJohan Dahl 和Kriste Nygaard在论文中总结归纳出来的。这两个程序员注意到在ALGOL语言中, 函数调用堆找(call stack frame)可以被挪到堆内存区域里,这样函数定义的本地变 量就可以在函数返回之后继续存在。 这个函数就成为了一个类(class)的构造函数, 而它所定义的本地变量就是类的成员变量,构造函数定义的嵌套函数就成为了成员 方法 (method)。 这样一来,我们就可以利用多态(polymorphism)来限制用户对 函数指针的使用。 在这里,

        我们也可以用一句话来总结面向对象编程: 面向对象编程对程序控制权的间接转移进行了限制和规范

3.函数式编程

        尽管第三个编程范式是近些年才刚刚开始被采用的,但它其实是三个范式中最 先被发明的。事实上,函数式编程概念是基于与阿兰·图灵同时代的数学家Alonzo Church 在 1936 年发明的 λ演算的直接衍生物。 1958 年 JohnMccarthy利用其作为基 础发明了 LISP 语言。 众所周知, λ演算法的一个核心思想是不可变性 某个符号 所对应的值是永远不变的,所以从理论上来说,函数式编程语言中应该是没有赋值 语句的。 大部分函数式编程语言只允许在非常严格的限制条件下,才可以更改某个 变量的值。 因此,

        我们在这里可以将函数式编程范式总结为下面这句话: 函数式编程对程序中的赋值进行了限制和规范。

4.思考

        在介绍三个编程范式的时候,有意采用了上面这种格式,目的是 凸显每个编程范式的实际含义一-一它们都从某一方面限制和规范了程序员的能力。 没有一个范式是增加新能力的。也就是说,每个编程范式的目的都是设置限制。 这 些范式主要是为了告诉我们不能做什么,而不是可以做什么。 另外,我们应该认识到,这三个编程范式分别限制了 goto i吾句、函数指针和 赋值语句的使用。 那么除此之外,还有什么可以去除的吗? 没有了。因此这三个编程范式可能是仅有的三个了一一如果单论去除能力的编 程范式的话。支撑这一结论的另外一个证据是, 三个编程范式都是在 1958年到 1968 年这 10 年间被提出来的,后续再也没有新的编程范式出现过

5.小结

        大家可能会问,这些编程范式的历史知识与软件架构有关系吗?当然有,而且 关系相当密切。譬如说,多态是我们跨越架构边界的手段,函数式编程是我们规范 和限制数据存放位置与访问权限的手段,结构化编程则是各模块的算法实现基础。 这和软件架构的三大关注重点不谋而合: 功能性、组件独立性以及数据管理。

你可能感兴趣的:(架构)