一点纯哲学

本人在翻看帖子的时候,发现很多网友不太喜欢哲学部分。认为那是漫无边际、浪费时间。但是多了解一些还是有帮助的。
以下是我自己在编程时的一些感受。有点杂乱,将就着看看吧。
一、对象和事物
好像听过这么一句话:人类永远无法认识完整的事物。因为我们认识到的总是事物的某一方面。
我们所说的对象实际上是客观事物在人头脑里的反应,而事物则是不因人的认识发生改变的客观存在。
同样一根铁棒,在钢材生产厂家看来,它是成品;在机械加工厂家看来,它是原料;在废品站看来,他是商品。
成品、原料、商品,这三者拥有不同的属性,有本质的不同。为什么同一事物在不同人的眼里就截然不同了呢?这是因为我们总是取对我们有用的方面来认识事物。当这根铁棒作为商品时,它的原料属性依然存在,只是我们不关心了。
在同一个企业里,对同一事物的认识也是在变化的,如一根被加工的铁棒,会经历从原料到半成品,再到成品的认识过程。
因此,我认为:对象只是我们认识事物的某一方面,一个事物被我们抽象成了一个多面体,事物的不同方面总是同时存在。
对象的存在与否,并不依赖于事物形体的存在。事物可以消失、变化,但对实体的认识却相对稳定,不会消失。
有些并不存在的事物,我们也能认识到,比如鬼。实际上我们并不是真的认为他存在,而是他的一些属性符合对鬼的定义。比如装神弄鬼、鬼头鬼脑。
实际上,同一事物的不同方面是有关系的,比如原料与成品是同一事物众多方面中的两个方面,他们之间存在一种认识叠加效应。即随着我们与事物接触的增加,我们认识事物总是越来越丰富。而后面的认识总是建立在前面认识的基础上的。例如,在机械加工企业,铁棒一开始只有原料的这一方面的属性;被加工成型后,就具有了成品的这一方面的属性;如果加工失败,则具有废品的这一方面的属性。随着我们与铁棒的交互,我们对于铁棒的认识就逐渐增加了,表现在它的属性越来越多。
请注意,在同一个企业,不同的岗位对同一根铁棒的认识是不同的。原料库的人认为它是原料,成品库的人认为他是成品。
当一种认识(实体)存在后,就好像事物的一张照片,只反应了事物的一面,并且可以永久存在,不管事物是否消失。唯一的差别是,这种实体认识是否对当事者有用罢了。当某种认识对所有人都没有用时,比如错误的将废品认为成品,那么才有删除它的必要。

二、内部属性和外部属性、自然属性和社会属性
每个属性都属于某个实体(对象),直接隶属于本实体的为内部属性,通过其它实体间接属于本实体的为外部属性。内部属性大致相当于自然属性,外部属性相当于社会属性。
通常情况下,自然属性依附于自然存在的事物上,社会属性依附于人类创造的事物上。比如铁棒VS铁棒的入库单,就分属于自然物与社会物。而数量与价格则分属于自然属性和社会属性。
如对个人而言,自己的姓名、相貌、身高、体重,这些属性离开你之后就没有意义了。但是有些属性是间接的,比如你获得了某某荣誉称号、你的财产、你的英语等级。他们分别于某次评选、某些收益、某些考试相联系。这些信息分别存在于荣誉证书、银行存折、等级证书之中。这些外部属性不宜直接作为自己的属性,因为它们与你不是内聚关系,而是耦合关系。
又如,当一根铁棒入库,铁棒本身的自然属性没有任何变化,变化的只是其社会属性。而这种社会属性又有独立的属性,并依附于某种载体上。如果铁棒入库,则会产生入库单这种记录其社会属性变化的东西。这个东西以外部属性的形式连接到铁棒这个实体上。
简单来说,外部属性被称作“身外之物”,生不带来,死不带去。即实体创建时,外部属性(社会属性)不会当然存在,当实体消失时,外部属性(社会属性)依附于耦合实体(人类创造物)依然存在,不会消失。
当然,在描述不必准确的场合,可以忽略耦合实体,而把耦合实体的关键属性放到本实体内部。但必须明白,这样做会让本实体过于复杂。要解决复杂的问题,则需要创建耦合实体,把外部属性放到耦合实体中。


写得很好,实际是如何定义一个对象,对象有属性和方法,楼主谈了哪些属性应该属于这个对象的内部,哪些不属于,这样我们就可以从现实世界中准确提炼一个对象。
那些觉得我们谈的很虚或不实用的人,可能是经验未到,或不爱思考,搞软件不爱思考真的很累。

搞技术的人必须要有一定的哲学素养。具体到面向对象和领域建模,个人推荐一本书--维特根斯坦的《逻辑哲学论》,很值得看,每次都有新的领悟。摘抄一段共享:
1* 世界是一切发生的事情。

1.1世界是事实的总体,而不是事物的总体。

1.11世界为诸事实所规定,为它们即是全部事实所规定。

1.12因为事实的总体规定那发生的事情,也规定那所有未发生的事情。

1.13在逻辑空间中的诸事实就是世界。

1.2世界分解为诸事实。

1.21每项事情可以发生或者不发生,其余的一切则仍保持原样。

2 发生的事情,即事实,就是诸事态的存在。

2.01事态是对象(事物)的结合。

2.011事物的本质在于能够成为事态的组成部分。

2.012逻辑中没有偶然的东西;如果一个事物能够出现在一个事态中,那么该事态的可能性必定已经预含于该事物之中。

2.0121如果一个事物本身能够独立存在,那么后来的适合于它的状况看来就是一种偶然的事情。

如果事物能够出现于事态之中,那么这一可能性必定一开始就已经存在于事物之中。

(在逻辑中没有纯粹是可能的事情。逻辑涉及每一种可能性,而一切可能性都是逻辑的事实。)

正如我们根本不能在空间之外思想空间对象,或者在时间之外思想时间对象一样,离开同其他对象结合的可能性,我们也不能思想一个对象。如果我能够思想在事态中结合的对象,我就不能离开这种结合的可能性来思想对象。

2.0122事物就其能够出现在一切可能的状况中而言是独立的,但是这种独立性的形式是一种与事态相联系的形式,即一种依赖的形式。(词以两种不同的方式——单独地和在命题中——出现是不可能的。)

2.0123假如我知道一个对象,我也就知道它出现于诸事态中的所有可能性。

(每一个这种可能性必定在该对象的本性中。)

之后不可能发现新的可能性。

2.01231如果我要知道一个对象,虽然我不一定要知道它的外在性质,但是我必须知道它的一切内在性质。

2.0124如果给出所有的对象,那么同时也就给出了所有可能的事态。

2.013每个事物都像是在一个可能事态的空间里。我可以设想这个空间是空的,但是我不能设想没有这空间的事物。

2.0131空间对象必须处在无限的空间之中。(一个空间点就是一个主目(argument, 自变量)位置。)

视域里的一个斑块,虽然不一定是红的,但它必须有某种颜色:所以说它被颜色空间[Farbenraum]所包围。音调必须具有某种高度,触觉对象必须具有某种硬度,等等。

2.014 对象包含着一切状况的可能性。

2.0141对象出现在诸事态中的可能性就是对象的形式。

2.02对象是简单的。

2.0201每一个关于复合物的陈述可以分解为关于其各组成部分的陈述,分解为完全地描述该复合物的一些命题。

2.021对象构成世界的实体。因此它们不能是复合的。

2.0211假如世界没有实体,那么一个命题是否有意义就依赖于另一个命题是否为真。

2.0212在这种情况下就不可能勾画出世界的任何图像(真的或假的)。

2.022显然,一个想像的世界,无论它怎样不同于实在的世界,必有某种东西——一种形式——为它与实在的世界所共有。

2.023正是诸对象构成这种不变的形式。

2.0231世界的实体只能规定一种形式,而不能规定任何物质的属性。因为物质的属性只有通过命题来表述——只有通过对象的配置来构成。

2.0232顺便说一下,对象是无色的。

2.0233如果两个对象具有相同的逻辑形式,除了它们外在性质的差异之外,它们之间唯一的区别就是:它们是不同的。

2.02331或者一个事物具有别的任何事物都没有的属性,这时我们可以直接用一个描述使它同别的事物区分开来并指谓它;或者另一种情形,有好几个事物,它们的全部属性都是共有的,这时就完全不可能从它们之中指出某一个来。

因为如果没有任何东西来区分一个事物,我就不能区分它,不然的话它总是会被区分开来的。

2.024实体是独立于发生的事情而存在的。

2.025它是形式和内容。

2.0251空间、时间和颜色(有色性)是对象的形式。

2.026如果世界要有一个不变的形式,就必须要有对象。

2.027不变者、实存者和对象是一个东西。

2.0271对象是不变的和实存的;它们的配置则是可变的和不定的。

2.0272对象的配置构成事态。

2.03在事态中对象就像链条的环节那样互相勾连。

2.031在事态中对象之间以一定的方式相互关联。

2.032对象在事态中发生联系的一定的方式,即是事态的结构。

2.033形式是结构的可能性。

2.034事实的结构由诸事态的结构组成。

2.04存在的事态的总体即是世界。

2.05存在的事态的总体也规定哪些事态不存在。

2.06事态的存在和不存在即是实在。(我们还把事态的存在称为肯定的事实,把事态的不存在称为否定的事实。)

2.061事态相互间是独立的。

2.062从一个事态的存在或不存在不能推出另一个事态的存在或不存在。

2.063全部实在即是世界。

没有什么内部属性。

抛开OO的世界观,看关系数据库是怎么表达现实的,就知道了。

可惜几乎所有人都以为关系数据库思想没有OO先进。

赞,其实我们为什么要谈哲学,因为软件要解决的根本问题就是适应业务的变化。其关键在于架构,注意首先是业务架构,然后才是技术架构。如果没有哲学思想,认识不清楚业务变化的本质,那做出的软件就根本没有生命力。
[该贴被flyzb于2011-07-09 08:16修改过]

商品有社会属性(使用价值)和自然属性(价值)。
对象有场景属性(角色)和领域属性(模型)。

一个商品或对象的使用价值,依赖用途或业务场景。

关系代数和OO在我眼里并没有那么矛盾,也没有谁比谁先进,只是丰富了表达方式罢了。

象,描述事物(数据结构): 表示为关系(SQL/NoSQL型的抽象)、表示为实体(Class/Object级的抽象)。
数, 描述活动(算法):表示为关系的查询(增删改查)、表示为消息的传递(同步/异步、命令/查询)。
理,描述规律(数据结构或/与算法的相互作用):表示为关系代数理论 => 表示为模式理论。

2011年07月09日 16:29 "@jdon007"的内容
象,描述事物(数据结构): 表示为关系(SQL/NoSQL型的抽象)、表示为实体(Class/Object级的抽象)。
数, 描述活动(算法):表示为关系的查询(增删改查)、表示为消息的传递(同步/异步、命令/查询)。
理,描述规律(数据结 ...

这让我想起更多的OO表现形式,将OO字符化或图形化的,很神奇:
1、XML:这是我认为最值得研究的OO表达方式。
<tagName>是对象的名称,里面的参数就是属性。而且xml还表达出了对象的边界以及部分整体的关系。
HTML就是XML的一种具体化。他们之间是继承的关系。
2、JSON:Javascript对象的一种字符化,不仅能表现对象,还能表现JavaScript数组这种特殊的对象。
3、UML(统一建模语言):将对象图形化,并能描述对象之间的关系。
4、关系数据库:将对象表格化,并通过SQL语言描述对象之间的关系。
5、面向对象的编程语言:不仅可以描述对象,还能动态修改对象的属性,调整对象之间的关系。

当然,还有很多其他的OO表现形式,望各位补充。
以上五种表现方式,可以相互转化。而XML是最为抽象的,能描述任何形式的OO。比如:HTML是网页,SVG是二维矢量图,VRML是三维图。

2011年07月09日 08:15 "@flyzb"的内容
可惜几乎所有人都以为关系数据库思想没有OO先进。 ...

不是说谁先进不先进,关键看什么场合适合用什么技术。
客观事物通过OO抽象出的结果,人们还是很有可能交流的。而抽象成关系数据库表达式,除了程序员,其他人很难交流。所以,你的项目的设计、制作、实施需要和很多不同类型、角色的人交流,那么OO方法似乎比较合适;反之则可以用关系数据库。

2011年07月10日 11:03 "@showerxp"的内容
而抽象成关系数据库表达式,除了程序员,其他人很难交流。 ...

是啊,今天到图书馆,看到一堆“管理信息系统”书籍,翻看书籍目录,总是有讲“关系数据库”,我真搞不懂,管理信息和关系数据库有什么关系,怎么不讲操作系统呢?“管理信息”本身是一种抽象层次,否则就叫“管理数据”了,既然是一种抽象层次,那么为什么不用同样抽象的方法OO来分析“管理信息”呢?

中国成语“物以类聚”完全体现OO精华,体现DDD实体聚合建模原则,我们用“类代表“物”,这些“物”是以聚合这样关系组合在一起的。而关系数据库包括ER模型则显得离我们日常概念遥远些,当然也不否定它们是“物以类聚”的表达方式,数据的关系表达“聚合”,但是事物之间的关系通常不是1或0那么简单,有的关系更加紧密,比如夫妻 父子,有的关系淡如水如朋友,有的关系比较地下,比如情人关系,很显然生活中如此丰富的关系就使用关系数据库的外键的1或0这样两种关系表达很不够的。



[该贴被banq于2011-07-10 18:41修改过]

不论XML还是OO,都没有关系数据库更贴近现实世界,XML和OO显然是一种理论上的退化,完全失去了理论根基。

要了解关系数据库的精髓,别看SQL语言,这里有一本大师之作,《深度探索关系数据库》,它的作者是关系数据库之父E.F. Codd的好友/伙伴。

摘抄:

事实上,连同那些运算数据库中的命题(或命题集)的运算符一起,是一个‘逻辑系统’,……这归功于Codd非常棒的洞察力……他1969的见解……,数据库并不真的只是一个数据集合(虽然名字上听起来是数据);更恰当地说,它是‘事实’的集合,或者换句话说,是真命题的集合。……整个形式逻辑可以被用来解决“数据库问题”。

里面随处可见对业界流行的SQL的尖锐批评:

一个不幸的事实是:SQL在很多方面对关系模型的支持完全令人失望,它存在着大量不合情理的错漏和偏离... ...因为SQL对模型的支持是如此有限,它给了你一条绳索让你吊死自己,因此你需要知道关系理论以免陷入圈套。

关系数据库有构造类似类型系统和对象的方法,比流行的OO思想要先进得多,在我说的那本书里就有。

可惜业界在这一点上根本没有注意到,也没有投入精力去进行开发和应用,固然有实践上的限制,但这条路是对的,而流行OO的路子是走不通的,是一条死胡同。

2011年07月10日 18:38 "@uda1341"的内容
更恰当地说,它是‘事实’的集合,或者换句话说,是真命题的集合 ...

问题是现实中“真命题”真的很少,只有划一个圈子,这个圈子里大部分是真命题。等人类都变成机器人了(目前中国的教育正在向这个方向努力,所以相信到处是真命题的人越来越多),离这个理想就不远了。

BTW:科学试图把一切都变成真命题,这样就能把一切纳入其边界,西方人明白这种危险,但有宗教在那里抗衡;中国人因为无神论无法抗拒科学的过度侵入,所以相信“到处是真命题的人”越来越多。


[该贴被banq于2011-07-10 19:14修改过]

从uda1341这里,第一次听到:世界是事实的总合,而不是事物的总合。确切说,不是第一次,只是以前看到这句话并没有引发我的思考而已。曾与uda1341讨论过,如何将看似差异极大的世界观或方法论,以更高的视角进行一统。我尝试的方法,是将任何理论分解为以下三部分。

1)概念细胞 。
2)描述概念的联系与变化。
3)描述联系与变化的规律。

例如,在不同人的眼中:
1)OO是对象,关系数据库是关系。
2)OO中描述消息的传递,关系数据库是关系的增删改查。
3)OO是模式,关系数据库是集合与映射。

数据没有行为?计算机中代码即数据,数据即代码,这是冯诺依曼机最重要的思想。常见的例子,如权限控制的表设计里每一条记录都可以包含或对应一种行为。OO比关系理论丰富?人是一个对象,也是一切社会关系的总和(马克思语)。

关系即事实,事实即关系,对象即数据,数据即对象,对象即关系。他们在更高的一个视角上是一致的。

最近为状态的管理搞得焦头烂额,我发现在别人的代码扩展举步维艰。经过数夜的冥思苦想,终于知道了为什么会这样?因为我描述状态的角度与他完全不一样,我是从事情本身的角度(力图最简洁描述所有的状态,而后将业务规则描述为状态的转移),原有的代码是从人的角度进行描述,其设计有很多冗余的状态值,致使我刚开始无法理解。

改变思维的死角非常困难,后来我沿用从人的角度去描述状态,但想方设法去掉诸多冗余的状态值,居然与我从一开从事情本身的角度描述达成一致。一下子,觉得问题变得明朗起来,修改和扩展原来的代码也变得轻松起来,而且发现了自己看事不看人的思维死角,丰富了我的思考方式,懂得何谓殊途同归。

我说了这么多,基本上都是老调重弹,把古人的智慧用现代的语言重复一遍而已,没有一丁点新东西。我们的知识与日俱增,我们的智慧却未必超越古人。看看数千年前之间,我们的先人如何思考,如《易经》的象、数、理。

“象”可以是静态之象(“事物”),可以是动态之象(“活动”),可以动静交融之“象”(事实)。
“数”可以是描述事物之变化(例,OO: 消息传递),可以描述活动之进行(例,FP: 数据驱动),可以描述事实之发展(例,维氏理论或者uda1341的“事实的查询”)。
“理”是描述事物及活动之规律(例,OO: 对象的结构、行为和创建模式,例,关系代数:集合与映射之理论)。

要说哲学,计算机的起源跟分析哲学是同源的,谈别的哲学都是瞎扯,如果它们还算得上哲学的话。

要我怎样强调你们才肯相信,当今哲学的主流是分析哲学,渊源自亚里士多德的经典逻辑,经过布尔,弗雷格在逻辑学上的创造,然后被一大群德国,英国等国的天才哲学家们所发展,产生了丰富的成果而不是一堆胡言乱语,后来又引入模态逻辑,获得了新的生命力,当今的大牛,分析哲学家克里普克(Saul Kripke),除了发展了模态语义学,在哲学上提出了新的指称理论,其成果Kripke Structure,是计算机科学中模型验证的重要工具,用于分析并行程序,还包括K Logic等,这个人还在世。

图灵是维特根斯坦的学生,有图灵的课,维特根斯坦基本上是和图灵对话,别的学生都是打酱油的,甚至图灵迟到了,维老师就等着。

维特根斯坦的《逻辑哲学论》第一句:世界是事实的总和,而非事物的总和。

这个原则,逻辑编程不违背,lambda演算也不违背,做为谓词逻辑的子集,关系代数也不违背,想想关系数据库的插入都是以整条记录为最小单元,而OO完全是背道而驰,把人的粗浅常识又搬出来当做OO的哲学基础。你追踪下去会发现OO完全基于非常粗浅的哲学认识,根本没有理论渊源和根基,连2000多年前的古希腊哲人都不满足于此。

2011年07月10日 20:29 "@uda1341"的内容
uda1341这里,第一次听到:世界是事实的总合,而不是事物的总合。 ...

我在网络上搜索了一下,“世界是事实的总合,而不是事物的总合”这句话的解释是:
事实指的是某物具有某种性质或某些事物具有某种关系。事物的简单相加反映不出世界的本来面貌,我们不仅要知道世界上有哪些东西,而且要知道其所处的状态,它们之间的相互关系。
无限个事物的变化构成一个事实,因为事物仅仅指事与物,事和物都是静止的,比如你听到一件事,看到一件物品,你看到或听到的并比是它的现在,而是它的过去。无限个事实能构成一个世界,因为事实是动的,世界也是动的。事实只能通过事物而存在,世界上存在的事物,实际都是由无数事态复合而成的事实。

实际上,感觉大家都说的差不多,并不矛盾。但是请大家不要大段的摘抄书本,希望说出自己的感受,并举出生活中的例子。