今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第6节的学习笔记,第6节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。

常见的编程范式

本节主要对比了面向对象与面向过程的优势,是偏理论性的一节。提到了大家比较熟知的三种编程范式: 过程式面向对象函数式。 因为函数式编程和GOF设计模式的套路关系不大,所以作者王争老师也说了在专栏中不会涉及函数式编程。 另外在编程语言中还有一种面向消息的编程方式,本节没有提及。

常见编程范式:

  • 过程式 - C
  • 面向对象 - Java、Python
  • 函数式 - Haskell
  • 面向消息 - Erlang

编程范式就像是编程语言的流派,其实很多语言并不局限于一个流派,就像许式伟大神在Go,基于连接与组合的语言中提到的,Go语言就算是多范式语言,并没有遵循特定的流派。

  • Go支持过程式,但只是语言基础特性。其实可以理解为几乎所有编程语言都把过程式作为语言的基础特性。
  • 面向对象,但将面向对象的特性最小化。Go不提倡继承,拒绝提供继承语法。
  • 面向消息(但不纯粹),Go提供了channel,但并没有禁止使用共享内存的方式
  • 函数式(但不纯粹),Go支持闭包,但并不是纯粹的函数式语言

因此个人理解:“存在即合理”,每种编程范式都有其优点。GOF设计模式充分利用了面向对象的四大特性。面向对象编程更适合大型复杂程序开发,使程序更易扩展、易复用、易维护。每种编程范式实际都有自己的"套路"(设计模式),就像如果用某种开发语言实现一个很直接简单的功能,如果使用GOF设计很了很多个类,这些类之间是复杂的交互,在这个场景下这种设计未必合适。

参考