目录

面向对象理解

范式

“程序设计有一个范式(paradigm)问题。所谓范式,就是组织程序的基本思想,而这个基本思想,反映了程序设计者对程序的一个基本的哲学观,也就是说,他认为程序的本质是什么,他认为一个大的程序是由什么组成的。而这,又跟他对于现实世界的看法有关。”――孟岩

编程是为了解决问题,而解决问题可以有多种视角和思路,其中普适且行之有效的模式被归结为范式。

现在的范式一般只有三种,过程范式、函数范式、对象范式。

函数范式与现实世界差距较大,纯函数式范式较少,绝大多数语言只取了函数范式的一个子集,将函数作为参数传递,即函数是一等公民。

过程范式认为,程序是由一个又一个过程经过顺序、选择和循环的结构组合而成。反映在现实世界,过程范式体现了劳动分工之前“全能人”的工作特点——所有的事情都能干,所有的资源都是我的,只不过得具体的事情得一步步地来做。

对象范式则反映了劳动分工之后的团队协作的工作特点——每个人各有所长,各司其职,有各自的私有资源,工件和信息在人们之间彼此传递,最后完成工作。因此,对象范式也就形成了自己对程序的看法——程序是由一组对象组成,这些对象各有所能,通过消息传递实现协作。

对象范式

对象范式的两个基本观念:

  • 程序是由对象组成的
  • 对象之间互相发送消息,协作完成任务

我们熟悉的面向对象,一般是指封装、继承和多态,要构建一个对象,就先要有一个类的概念,想要向一个对象发送消息,必须先知道这个对象的类型,如此一来,的概念就特别重要,而对象只是类的一个实例化,面向对象编程,更像是面向类编程

“组合比继承重要,而且更灵活”,OOP 本质是为了职责分离设计的范式,核心是对象,不一定需要类,OOP 更像是组合、接口

对象才是第一要素,对象不依赖与类,对象的组合方式是发送消息,发送消息通过接口而不依赖与类。

Go 语言明确了对象范式是“组合+接口”。