面向对象的哲学思考

作者:51CTO讲师张汉东 **
文章源自:
https://zhuanlan.zhihu.com/p/21333688**

面向对象的哲学思考_第1张图片

题记:实际上在我想写这篇文章之前,特意搜索了一下“面向对象 哲学”这俩关键词,竟然发现有几百篇论文、十数篇博文都在探讨这个问题。好吧,我是在读冯友兰的《中国哲学简史》一书中关于“名家”的章节时,大脑中浮现出了面向对象思想,于是就有了这篇文章。

“名家”,以辩论“名”和“实”的问题为中心,而形成学说,代表人物公孙龙的《白马论》就是一个著名的哲学命题。

“白马非马”,这个命题很有意思:

问:可以说白马与马不同吗?
答:可以。
问:为什么?
答:“马”是对物“形”方面的规定,“白马”则是对马“色”方面的 规定,对“色”方面的规定与对“形”方面的规定性,自然是不同的。「所以说,对不同的概念加以不同规定的结果」白马与马也是不同的。
此处省略几百字,感兴趣的朋友自行搜索「白马非马」

《白马论》反映的不仅仅是逻辑思辨,更是「名」与「实」的哲学思考,这和柏拉图的唯实论(Realism)有共同的地方,柏拉图认为,这个世界是两部分存在的,一种是完美概念世界;一种是现实世界,其中万事万物都是对完美事物的不完美再现。所以他说,世界上无法找出两片相同的叶子。

而公孙龙认为:

  1. 马,是一种共相,它是独立存在的,因为它和白马进行比较。
  1. 白马,是一种殊相,虽然也是独立存在,但除了白马,还有黑马、黄马等其他殊相存在。

当然,公孙龙生活的先秦时代比柏拉图早几百年,但是我们如果按唯实论的观点来看的话,「马」就是「共相」,是综合了所有马的相似之处,不管是白马还是黄马还是黑马,它是存在于柏拉图完美世界中的那个完美概念,也就是「名」。「白马」,就是「殊相」,就是「马」这个完美概念在现实世界的不完美再现。

而柏拉图的学生亚里士多德认为,并不存在完美和不完美这两个世界,我们之所以能区分不同的事物而且分类,是因为事物之间存在的共性,所谓的「共相」并不能独立存在于「实体」之外,「共相」只是存在于我们头脑中的概念而已,真正存在的只是实体。亚里士多德的这种学说,叫做「唯名论」。

当然,除了柏拉图的唯实论,后续还有其他唯实论学说,比如极端唯实论:断言共相具有客观实在性,共相是独立于个别事物的第一实体,共相是个别事物的本质或原始形式。

唯名论和唯实论之争在欧洲中世纪持续了几百年,但是我们这篇文章,并非要深入的探讨这个,感兴趣的同学,可以进一步了解相关的哲学内容。这些哲学思考,是哲学家们对我们生活世界的伟大思考,他们作为人类本身,在无知(人类并不认识这个世界的本源)的情况下,对这个真实世界(我也不知道是否真实,谁知道人类是不是也活在矩阵中,连马斯克都这么想)做出这样的思辨,但是世界还是照常运转,不会受这些哲学家的影响。而我们程序员就不同了,程序员面对的是虚拟世界,我们可以根据我们的思想来对这个世界的运转方式做出影响。那么我们来看看,唯名论和唯实论对应到虚拟世界是怎么样的。

我们知道,编程语言有很多范式:面向过程、面向对象和函数式。面向过程看待世界的方式,是这个世界只存在数据和逻辑,数据只需要根据逻辑进行修改就可以了。而面向对象,则是对现实世界的一种映射。函数式,基本是以数学方式来看待这个世界。

开篇已经说过,在看「名家」相关哲学命题的时候,我自然的就联想到了「面向对象」。什么是面向对象呢?面向对象包含两个重要的概念:

  1. 类:具有相同或相似性质的对象的抽象就是类。
  1. 对象:对象是人们要进行研究的任何事物。对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。

类,其实就是上面哲学论题中所说的「共相」。而对象,就是上面所说的「殊相」。类和对象的关系,实际上就是「名」和「实」的关系。我并非要强行的把面向对象和上面的哲学思想进行融合,我只是在思考过程中感觉到奇妙,更奇妙的一点是,如果把面向对象中「名」和「实」的关系,按「唯名论」和「唯实论」来区分的话,我们能看到就是两种不同的面向对象实现:Java/Ruby 和 Javascript。

Java中,你可以直接创建类,也可以创建抽象类。但是Java里类不是对象,类只是一种概念,是一种类型。按柏拉图的唯实论来看,类和对象,是分别处于两个世界中的存在。类作为那个完美的概念存在,而对象则是由这个完美概念对应的不完美实现。

对于Ruby,你也能创建类,但是不可以创建抽象类,没有这种东西的存在。Ruby中,一切皆对象,当然,类也是对象。按「极端唯实论」来看,类本身是第一个存在的共相实体,先有这个「共相」才有实体对象的存在。

其实再看看Javascript实现的基于原型的面向对象,按唯名论来看,没有类,只有对象实体,类只是作为一种「概念」,并不真实存在,实际上你创建对象都是从原型对象拷贝的「殊相」。

这样来看面向对象,还是挺有意思的。


觉得文章不错的朋友,欢迎点赞、分享哦。

你可能感兴趣的:(面向对象的哲学思考)