关于如何处理面向对象、函数式、命令式、声明式编程

面向对象风靡编程界多年,函数式编程时不时的掀起一些浪花,命令式和声明式编程几乎一直只在教科书和 Wiki里面出现。这些都是编程界的瑰宝,如何将其融为一炉为我所用?

面向对象的本质

面向对象这个定义很是模糊,自从 Java 横行,似乎 Java 和面向对象画上了等号,一提到面向对象,就是 Java 编程,就是 N 种设计模式。但实际上面向对象从来就和语言无关。

面向对象更应该成为面向抽象编程,这种抽象思维是人类大脑思考外界的一种最重要的思考方式,有点像一棵树,不断的主干到分支再到枝叶,经过这种思考方式的处理,人类可以通过有限的思考能力思考无限复杂的问题,无论外界环境有多么复杂,经过有效的整理,人脑也能处理过来。这正是编程所需要的。

编程的过程是单个人创造一个属于自己世界的过程,需要为创立的世界订立规则,而当所创立的世界足够复杂时,需要人脑对复杂的规则进行抽象,以便能够以较小的成本维护自己创建的规则。

从这个角度来说,面向对象几乎是人类和程序员无时无刻都要用到的编程思维。

函数式编程

我们创立的世界规则里有一系列井然有序的定义,做出这些定义的原因是要将这些定义合理的组合在一起,进行数据的处理。可以说99%的系统开发的目的都是处理数据,将数据从一种形态转换成另一种形态,将多个数据源的数据整合在一起,从单一数据源根据特定规则生成多种形态的数据。

可以说,系统就像一个管道,数据流入然后流出。这对人类处理问题有重大意义,你可以生产一个管道,放在油田里进行石油的输送,放到路下面作为下水的管道,只要是流质的液体都可以使用,这种拿来就用的工具让人类处理问题变得简单了很多。

放在编程界,如果有一个函数,输入对应着自己想要的输出,那该省掉多少头发啊!所以,按照面向对象思考,但代码写成函数式,这是程序员必需的功课。

命令式编程

这种编程方式必不可少,但一般用于算法的实现,比如内存的管理。使用过 C 语言的同学肯定都试过,通过将硬件资源抽象成一系列的指针,通过指针向硬件中填充数据,这是硬件和软件的桥梁。

但是,也只在这种情况下,才适合采用命令式编程。

声明式编程

使用过 SQL 的同学都了解这是一种典型的声明式编程语言。

声明式编程产生的最根本的原因在于模块化,或者说逻辑隔离,即如果能够让一个人即使不需要了解某些逻辑也能达到目的,那就将这部分逻辑隔离。对于 SQL,使用的人只需要知道怎样可以取到数据即可,而不需要关心取到数据的逻辑,即使需要性能优化,也可以通过底层对 SQL 的转化来实现。

声明式编程是很重要的一种编程思维,尤其当系统逻辑较复杂时,通过这种思维进行必要的逻辑隔离就非常有必要了

总结

编程是一个不断提高的过程,提高最快的方法就是对同一个系统用不同的思路重写几遍,每一遍都有收获,每一遍都有提高。

事非经过不知难,但是难过之后才会有一览众山小。如果有时间,试着将经典的那几套系统在了解其核心概念的基础自己写一下,很快境界和眼光就上去了。例如 Redis,例如 K8S,例如 ES。

猜你喜欢

转载自juejin.im/post/5b5d29d05188251b1a7b4881