引言
1938年,图灵打下了计算机编程的地基。到如今,编程语言层出不穷。在另一方面,编程范式也从中孕育而出。
今天,我们只有三种编程范式,未来也几乎不可能出现新的。
正文
第三章
编程范式总览
- 结构化编程
- 面向对象编程
- 函数式编程
结构化编程起源于goto的滥用,无限制的goto会损害程序的结构。
且所有的goto均被证明可用if else do while等关键字替代,因而废除goto,诞生了结构化编程
面向对象,函数在类内运行,可以保证函数return后的值继续保存在类中,诞生了面向对象。
函数式编程来源于数学的函数,是λ(lambda)演算的衍生物,其中最重要的思想是数据的不可变性
结构化编程对程序控制权的直接转移进行了限制和规范
面向对象编程对程序控制权的间接转移进行了限制和规范
函数式编程对程序的赋值进行了限制和规范
这三种范式恰好对应了软件架构的三个重点
- 功能性--结构化
- 组件独立性--面向对象
- 数据管理--函数式
第四章
结构化编程被发现的历史(略)
大量的goto不易被拆分为独立,方便测试的模块,因而被废除。
第五章
面向对象编程
几种对于面向对象的解释
-
数据与函数的组合
-
对真实世界的建模方式
-
一些神秘的词语,封装,继承,多态
面向对象的特性有他们三个,但他们并不是面向对象的真正含义 -
封装
-
继承
-
多态
封装
我们将一组关联的数据和函数,画一个圈,圈起来。
让圈外面的代码只能看到,想让他看到的部分
一个实例,不面向对象的C 可以完美的做出封装。面向对象的C++,因为头文件声明的原因,反而封装的不彻底。
继承
继承在面向对象编程之前早已存在,但是面向对象编程更加便利
多态
面向对象封装了使用函数指针的危险性。
从此可以方便的面向接口,一个抽象的概念体展开编程。
控制反转
不面向接口编程,是A调取B,则A依赖于B。
面向接口编程,
A调取B的抽象接口C,A依赖于C,
B实现C,B也依赖于C,
但是从此,D、E、F等都可以实现C,只要实现C,即可被A调用。
那么将A、C封装在一起看作一体的新A,即可达成了(依赖倒置)控制反转,B依赖于新A。
面向对象就是以多态为手段,对源代码中的依赖关系进行控制的能力
因为此,面向对象规避了互相依赖的复杂关系,使得各个模块真正做到独立部署,也产生了不同的组件,更在此基础上产生了软件的分层。
网友评论