文档章节

形而上学和面向对象

con
 con
发布于 2013/12/31 01:05
字数 3421
阅读 4248
收藏 144
点赞 21
评论 48

如果有人问我,哲学研究什么?我会告诉他三个问题:

1、世界是什么?

2、我如何认识世界?

3、我该如何生活?

这三个问题基本概括了哲学最主要的三个分支:本体论、认知论和伦理学。

 

如果有人问我,计算机科学研究什么?我也会告诉他三个问题:

1、计算机能解决哪些问题?

2、计算机如何描述问题?

3、计算机如何解决问题?

分别是计算机的数学模型、计算机对物理世界的模拟和计算机的架构及实现。

 

邱奇-图灵论题认为:任何在算法上可计算的问题同样可由图灵机计算。尽管尚未被公式证明,但它仍然已经被广泛接受。图灵机本身是人类逻辑的产物,我们有理由假定,任何人类逻辑产生的可计算的问题,均可用图灵机进行形式化描述。但是,由于图灵机本身被限定为具有开始和结束状态,“开始”、“结束”的概念本身,已经包含了比图灵机本身更高阶的条件。有开始,便意味着存在“开始之前”,有结束,便意味着有“结束之后”。当任何问题包含了图灵机的开始之前和结束之后的条件,其问题便无法靠图灵机本身解决了。停机问题判断任意一个程序是否会在有限的时间之内结束运行,问题本身包含结束条件,所以超出了图灵机解决问题的范围。这就好比坚持宇宙起源论的人,总要面对诸如“大爆炸之前是什么”这样的问题;认同创世说的人,也难回避“造物主由谁创造”的问题一样。

 

人类自称高等生物的一大原因是善用身体以外的工具。既然图灵机已经有如此明确的数学形式,如果使用机械装置实现它用以作为人脑的工具,那么许多只有算法而由于人脑的局限无法得到结果的问题便可以解决了。计算机使用自然能源作为驱动,比人脑更快速地重复图灵机所描述的逻辑过程,为人脑计算出问题的答案。

 

计算机并不能做比人类逻辑更多的事情,但在解决人类逻辑要找出最终结果的问题上,计算机以更快的速度和更高的可靠性弥补了人脑的生理缺陷。从这个意义上讲,计算机完美的诠释了“工具”的定义,可算是人脑最好用的工具。

 

当代计算机的计算能力以惊人的速度提升,但其工作方式从未改变。计算机从人类写好的程序中读取一条指令作为输入,按照内部约定的转移函数,从状态集合中的一个跳转到另一个。计算机不断重复这个过程,直到能够输出人类想要的结果。从这个意义上讲,今天超级计算机和1940年代读取打孔纸带的ENIAC没有区别。

 

但计算机能力的改变影响了人类使用计算机的方式。计算机的能力越强大,人类越要使用它解决更多的问题。随着计算能力的提升,计算机所要解决的问题的复杂度也越来越高。终于有一天,人们发现问题的复杂度已经高到使他们不得不研究关于计算机要解决的问题的方法论了。

面向对象思想便是这方法论的一种。面向对象的思想并非起源于计算机科学,但却在计算机科学中应用最广泛。面向对象的系统分析和程序设计,是在建立问题模型的时候,仿照了人类对物理世界本身的认知过程。

 

对象在哲学中被定义为“客体”,指任何可感知或可想象到的事物。以经验主义考察对象的认知:对于一个对象,人对其所能产生的任何认识,都可归结到某种“属性”。例如,我感知到一个对象A和另一个对象B,我的感官(例如眼睛)感知到它们有所不同,为了描述这种不同,我定义了一种叫做“颜色”的属性,定义对象A的“颜色”属性是“红色”,对象B的“颜色”属性是“绿色”;随着我发现更多的对象,我需要为“颜色”这个属性定义越来越多“值”来加以区分。但并不是所有对象都具有“颜色”这个属性,比如一段声音,为了描述它,我开始定义其他的属性(音量、时长等)。于是随着感官感知到越来越多的对象,我的意识中便定义了越来越多的属性和这些属性的“取值”。当意识中存在了各种不同的对象时,我会发现某些对象的属性具有共通之处,于是我抽象出了“类”的概念(其他观点并不认为类的概念由对象派生出来,而认为类是先于对象的,后面有提及)。

 

这就是人类对物理世界中对象的认知过程。如何把一个对象同另一对象区别开来呢?我们的意识所使用的,是而且仅仅是,在上述认知过程中所定义的属性。一个对象即使在某个属性上与其他一些对象相同(如都是红色),但是把这个对象所有的属性在放一起考虑,那么它总是独一无二的。一个对象与其他对象要么颜色不同,要么重量不同,要么空间位置不同……或者,所具备的属性不同。人类把一个对象同其他对象区别开来的方式,便是这些属性的集合。没有属性的定义,便无法描述对象。

 

面向对象编程里的对象概念,跟人类对物理世界对象的所产生的观念是一致的。要描述一个对象,其实便是描述对象的属性集合。对象的一切都是属性。我们平时在对象中称其为“属性”的变量自不必说,对象的“方法”是对象的一个“可以做某个动作”的属性,类方法是某些对象共同拥有的“方法”属性。“类”可以当作对象的一个叫做“类型”的属性(想想各种面向对象语言中类似“.class”的方法)。

 

不管在形而上学还是面向对象编程里,在关于对象的概念中,都出现了“类”这个概念。类是对拥有某些共性的对象集合的抽象。关于类的地位和类与对象的关系,形而上学和面向对象编程理论都出现了分歧,两个知识体系之中关于类的分歧极其相似,非常有趣。

 

罗素在描述柏拉图的理念论的时候,使用“猫”做例子:“有许多个体的动物,我们对它们都能够真确地说‘这是一只猫’。我们所说的‘猫’这个字是什么意义呢?显然那是与每一个个体的猫不同的东西。一个动物是一只猫,看来是因为它分享了一切的猫所共有的一般性质……如果‘猫’这个字有任何意义的话,那末它的意义就不是这只猫或那只猫,而是某种普遍的猫性。这种猫性既不随个体的猫出生而出生,而当个体的猫死去的时候,它也并不随之而死去……‘猫’这个字就意味着某个理想的猫,即被神所创造出来的唯一的‘猫’……”柏拉图认为,这个由神创造出的唯一的理想的猫,才是真实的猫,而其他的猫只不过是现象而已。

 

对上面这段描述,我相信每个有面向对象编程经验的人都会有些似曾相识。因为几乎每本面向对象编程的入门书上所举的例子,跟上面的猫的例子都十分相像。即使对柏拉图没有任何了解,我们也会自然而然地把“现象的猫”和“对象”对应起来,把“理想的猫”和“类”对应起来。

 

柏拉图认为共相的猫(即理想的猫),是完美且先于任何一只现象的猫存在的,因为现象的猫都只不过是共相的猫的一个不完美的副本。这和正统的基于类的面向对象语言(如Java)对类的定义是类似的:类是先于对象存在的,先有类的定义,然后从类定义中派生出对象实例。

 

柏拉图的理念论又称为唯实论,与之相对的理论叫做唯名论,唯名论认为共相并不存在,即只有个别的猫而没有共相的猫。唯名论和唯实论的争论是形而上学中长久以来探讨的主题。唯名论的一个偏向折衷的观点是:共相由实际存在的一个个 个体推导而来,但共相一旦建立便是存在的。

 

唯名论的观点把类置于对象之后,让人联想起著名的“鸭子类型”:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”一些基于对象的编程语言(如Javascript),更强调对象的功能而非类型。在Javascript中实现面向对象的特性时,类的概念并不是必需的,而可以完全基于对象间的关系来实现特性。因为把对象和类放置的地位有所不同,基于类的面向对象语言和基于对象的编程语言,在对物理世界建立模型时便需要使用不同的方式。

 

在对世界本质的认识上,历来有两种截然不同的观点。一种是:存在一个客观世界,人类对世界所形成的观念,是由于客观世界通过感官作用于人的意识,从而产生各种关于世界的知识;另一种截然相反:认为不存在客观的世界,因为就人意识中形成的观念而论,人的意识通过感官形成了对世界的知识,但是仅凭这些知识,是无法确定客观世界的存在的,因为能够确定的只有意识本身,没有任何其他证据,使意识确信“有一个客观世界,使感官产生了作用”。两种观点可以简单的说成唯物论和唯心论。


论证这两种观点孰对孰错,是形而上学的哲学家们的事情。对于大多数对哲学问题并不热心的人来说,采取上面两种观点的哪一种,并不对生活产生任何影响。当甲对乙说:“我想吃那个苹果”时,不管在甲的心目中“那个苹果”是个真正存在的“对象”,还是他脑中形成的一个包含“颜色、重量、口味等”这些属性的意识,他都明确表达了自己的感情;同样的,听到甲说这话的乙,不管认为“那个苹果”是真实的客体还是脑中的观念,都不妨碍他理解甲的态度。

同样在面向对象编程里,类和对象哪个是更基础的概念,以及应该把对象当作类的实例还是单纯的属性集合,这些问题不能简单回答。对于类和对象,重要的不是它们“是什么”,而是它们“如何被使用”。

 

最后,文章开始对计算机的描述,我想说,虽然计算机的能力被限定人类逻辑之内,但是由于计算能力的提升,越来越多原来只在“算法上”可解,但是受限于人类能达到的计算能力而无法求解的问题开始慢慢得到解决。探求其他形式的图灵机实现的成果,特别是对量子计算机研究可能产生的成果,人类所能拥有的计算能力可能会发生更加急速的跳跃。这种计算能力的爆炸式增长,即便在过去的几十年里,也已经证明了,它不仅影响着人类的生活方式,也在影响着人类对所处世界的认知。

 

这篇文章本来写于半年前发表在博客上,今天想拿出来增色一下,但是能力所限,始终感觉很多地方词不达意,一不小心大半夜了。大概就像那句关于debug的话说的一样:代码纠错要比新编写代码困难一倍。因为,如果你写出了最聪明的代码,按此推算,你将没有更大的智慧来debug它。


© 著作权归作者所有

共有 人打赏支持
con

con

粉丝 21
博文 11
码字总数 34718
作品 0
朝阳
程序员
加载中

评论(48)

LastRitter
LastRitter

引用来自“con”的评论

引用来自“LastRitter”的评论

很佩服你的见解,你的头像是龙珠Z里的瘦布欧吧?他和比克都是善恶一体的!莫非你也喜欢辩证法?

眼神儿真好,是布欧,对辩证法谈不上喜欢和不喜欢,但是我真的很喜欢这个黑色背景的正方形头像13

期待你继续写下去!!!
yymxddy
yymxddy
不明觉厉
小包子
小包子
感觉很厉害的样子,但是真的没看懂!
srwth
srwth
值得一读,
con
con

引用来自“LastRitter”的评论

很佩服你的见解,你的头像是龙珠Z里的瘦布欧吧?他和比克都是善恶一体的!莫非你也喜欢辩证法?

眼神儿真好,是布欧,对辩证法谈不上喜欢和不喜欢,但是我真的很喜欢这个黑色背景的正方形头像13
LastRitter
LastRitter
很佩服你的见解,你的头像是龙珠Z里的瘦布欧吧?他和比克都是善恶一体的!莫非你也喜欢辩证法?
哆啦比猫
哆啦比猫

引用来自“Keluzi”的评论

形儿上学?
形儿是谁?

学是谁?
种瓜
种瓜
nice~
刘军兴
刘军兴
写得不错, 学习.
chape
chape
居然看完了,哲学
面向对象编程 (封装,继承,多态or组件,接口)

Function/bind可以是一个很简单的话题,因为它其实不过就是一个泛型的函数指针。但是如果那么来谈,就没意思了,也犯不上写这篇东西。在我看来,这个事情要讲的话,就应该讲透,讲到回调(c...

_夏天的风_
2015/05/18
0
1
编程语言遇上超级英雄,谁才是真的本命?

  【IT168 评论】每一种编程语言都有自己的独特风格和个性,这种个性的张扬往往会吸引一群人,变成一个社区的狂欢。如果把编程语言比作超级英雄,你觉得哪些英雄是你心中的本命呢?笔者根据...

it168网站
2017/11/29
0
0
林轩田第一课

基石包括哲学的形而上学和数学。以后可能会用到这些东西。 什么时候有用? 为什么会有用? 如何使用机器学习? 如何更好的让机器学习? 学习: 基于观察,包括触觉听觉嗅觉视觉,人类学习是通...

大胡子_biu
01/02
0
0
Ontology被扭曲成对象系统

最初的Ontology强调的是概念模型。 对这个“模型”的理解以可借助柏拉图的“在的世界”来达到。虽然我并不意味着这个模型就等于柏拉图的在的世界或位于他的“在的世界”中。 柏拉图的‘在的世...

刘小兵2014
2011/11/08
0
0
量子力学多世界解释:这个世界的你是穷光蛋 另一个世界是亿万富翁(文中有赠书活动)

具体赠书事宜请联系北京联合出版社客服,以下是出版社客服微信。 摘 要 本文追溯了量子力学多世界解释产生的理论渊源,指出多世界解释在进一步解释相对态解释时误解了其最初的含义,并对相对...

雪花又一年
05/03
0
0
2017.5.31

今日所学 微积分 三角级数的正交性页面1.png 三角级数的正交性页面2.png 展开为傅里叶级数.jpg crash course: philosophy 哲学:philosophy:对智慧的爱 example questions if my decisions ...

idealclover
2017/06/01
0
0
知识本体与大数据处理续

作者:赵丹 链接:https://zhuanlan.zhihu.com/p/21496568 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 前一篇谈到了知识本体的哲学起源,以及 Pala...

Airship
2016/12/05
41
0
有哪些细微的职场礼仪能够为职业形象加分?

其实礼仪只有三个方面:仪容、仪表、仪态。 仪容,就是容貌,四个字就可以了:干净整洁。 仪表,就是服饰,也四个字就可以了:大方得体。 个人粗糙的见解,相比容貌和服饰,更重要的是仪态,...

明哥聊求职
05/13
0
0
书评:测试驱动开发的艺术

读罢《测试驱动开发的艺术》,忽然想起中国传统文化中的“道器之辩”。《易经》曰:形而上者谓之道,形而下者谓之器。中国的传统文化常常是重道轻器,认为道本器末,即道是根本,其他一切是道...

wayfarer
2011/02/11
0
0
Winform开发框架之终极应用

在前面两篇随笔,都围绕着我的Winform开发框架介绍一些重要的组件,如字典模块封装《Winform开发框架之字典数据管理》和权限管理系统模块封装《Winform开发框架之权限管理系统》。本框架主要...

长平狐
2012/08/22
177
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring-@RequestBody

@RequestMapping("/login")    public void login(@RequestBody String userName,@RequestBody String pwd){      System.out.println(userName+" :"+pwd);    }    ......

说回答
5分钟前
0
0
Redis安装

大家可以通过该链接获取安装详情(这是一个Word文档,支持下载): http://note.youdao.com/noteshare?id=7a327ed6c58fb2037ba537e58ecf7510&sub=480DB8EF349747C3983B73AE94D45BB1 其他参考...

一梦心草
5分钟前
0
0
MySQL按天,按周,按月,按时间段统计【转载】

https://blog.csdn.net/qq_28056641/article/details/78306870 select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days; select DATE_FORMAT(creat......

李道福
7分钟前
0
0
浅谈parallelStream

parallelStream是什么,它是一个集合的并发处理流.其作用是把一个集合中的数据分片,进行一个多线程的处理,增快运行速度. 比如说这样一段代码 private Set<SysRole> sysRoles;private Set<St...

算法之名
9分钟前
2
0
器者,道之所载

形而上者谓之道,形而下者谓之器,化而裁之谓之变;推而行之谓之通,举而措之天下之民,谓之事业。—— 《道德经》

了凡川
10分钟前
0
0
C#命名规范中文版/C#编码规范中文版

最新文档地址https://github.com/hiramtan/CSharpNamingGuidelines_Chinese C#命名规范中文版/C#编码规范中文版 示例 /*****************************************************************......

海贝Hibey
11分钟前
0
0
刚从eclipse转到Intellij IDEA,分享一些配置经验

刚从eclipse转到Intellij IDEA,分享一些配置经验,IntelliJ IDEA作为最好的Java开发工具,在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等...

舒文joven
13分钟前
1
0
lombok 引入后,测试类始终找不到get,set方法。

开发环境为idea,jdk1.7,maven3.5. 网上直接搜出来的方法有: 1、在setting里安装lombok的plugins; 2、如下图,勾选enable annocation processing选项 3、升级maven plugins插件 我尝试了以...

Kidult
19分钟前
0
0
Duang,HUAWEI DevEco IDE全面升级啦

想感受全新UI带来的视觉及交互体验、 HiKey970开发板调测、 HiAI API推荐和收藏、 深度AI模型分析等新功能, 体验高清晰度和流畅度的远程AI真机调测吗? 全新的UI设计 采用最优秀的视觉及交互...

华为终端开放实验室
27分钟前
1
0
阻止事件冒泡,阻止默认事件

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event....

闫亚亚
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部