编程范式就像法律。每个法律条文,都从你手中征收了部分权利,但同时赋予你更好的社会(理论上)。比如法律禁止你杀人,那么也同时保证了你不会被随意谋杀。从计算机软件开始之初,一共诞生了3种重要的编程范式。

  一是结构化编程。结构化编程范式把我们直接控制语句的权利给没收了。我们从此不再用Goto直接在语句中跳来跳去,而是采用将大的方法拆分成N多个小方法(单一职责原则)来分解问题。这样带来的好处是代码更容易读,也更容易测试。

  二是面向对象编程。面向对象的最大价值是面向抽象。在面向对象出现前,我们要调用其他模块的功能,就必须引用其他模块,比如C里面的Include,这样就带来了耦合。比如我们业务模块需要调用数据库来存储,那么业务模块中就必须引用数据库模块,而业务是高层,他不应该依赖细节。这么做的缺点就是当你想换个数据库实现(这种情况可能并不多)的时候,就要修改很多东西,包括业务。而面向对象出来后,我们可以在业务模块声明一个数据库接口并使用接口实现存取,然后用依赖倒转原则注入实现。因此,面向对象是没收了我们直接控制模块的权利,从而给你提供了更好的解耦。

  三是函数式编程。在命令式编程中,状态和控制是一起的,比如一个用户账户余额。余额是一个状态,当余额发生变化,就要不断修改余额。这样就带来的并发冲突问题,因此就需要用诸如同步锁的方式来保证访问的安全性。而在函数式编程中,变量一旦声明赋值,就不再发生变化,因此也就没有访问冲突。函数式编程没收了我们直接修改变量的权力,从而给我们提供了更好的并发特性,函数因为没有副作用,也更容易测试,问题也更容易定位。

posted on 2018-04-24 11:24  邓志国  阅读(116)  评论(0编辑  收藏  举报