Posted on 2007-07-17 09:20
dennis 阅读(1522)
评论(8) 编辑 收藏 所属分类:
涂鸦 、
my open-source
先让我们来了解下柏拉图对世界的理解,柏拉图认为,自然界中有形的东西是流动的,但是构成这些有形物质的“形式”或“理念”却是永恒不变的。柏拉图指出,当我们说到“马”时,我们没有指任何一
匹马,而是称任何一种马。而“马”的含义本身独立于各种马(“有形的”),它不存在于空间和时间中,因此是永恒的。但是某一匹特定的、有形的、存在于感官
世界的马,却是“流动”的,会死亡,会腐烂。柏拉图把这个永恒不变的“形式”称为“理型”,他认为这个世界分为两个部分,一部分是完美的由“理型”组成的世界,另一个就是我们现实的“粗糙”的世界,真实世界是按照理型世界的标准设计的,总是努力达致完美的理型世界,但总是存有偏差。
因此他相信人类的灵魂是不朽的,灵魂苏醒后会向往回到完美“理型”的世界,人生来就有“理型”的观念。总之,柏拉图深信“理性”远比“感官”可靠。而他的学生亚里士多德却反驳他的老师,在亚里士多德看来,他也赞成世界是有变化的“质料”与不变的“形式”组成,比如具体的某只马是有一些“质料”组成,它有马的“形式”在里头,因此它被称为马。而“形式”存在于具体的“物”之中,比如“马”的含义就存在具体的千千万万只马之中,
“形式”的观念并不是人与生俱来的,而是借助于“感官”去感知外界事物而得来的。他把这种“形式”更多地称为“特征”,由此提出了他的自然界分类观点,对“物”分类依据的是它能做什么以及它有什么特征。可以说,亚里士多德比他的老师更相信“感官”,没有像他的老师那样陷入对完美“理型世界”的眷念而不可自拔。
联想到我们在使用静态OO语言(比如java)试图去描述现实世界的场景,我们总是试图先设计出一些类(class),这些类秉承我们的意志,我们预期它们能完美地描述事物,并且试图去符合所有的现实的场景。可以注意到,这样的想法不正是柏拉图式的偏执?我们用头脑中出现的“理型”(具体到语言中的类)去描述现实世界,可现实世界往往是模糊的、粗糙的,两者的冲突不可避免,导致类不再按照我们的设想发展,它变的庞大,变的不是那么清晰,因此我们又造出“设计模式”“重构”的“诡辩之术”去弥补、去完整,可这并不是治本之道。首先我们必须承认世界是不完美的,完美的“理型”或者说完美的类是不存在的,类型的划分不能依赖于头脑中的完美“理型”(类型的划分不是取决于类),而应该根据事物的特征以及事物能做什么来划分。放弃对类描述世界的追求,转而构造模糊的类型,对象的类型不再预先构造,它的类型取决于它能干什么,它有什么特征,这正是动态语言中的“Duck-Typing”以及一些函数式语言中的模式匹配希望做到的,两者都是为了描述模糊的现实世界。再比如ruby中的mixin和open class特性又提供了方式让我们去慢慢完善“粗糙”的类,放弃一蹴而就,选择有机成长。
不是很清晰的想法,只是看《苏菲的世界》里对希腊古典哲学的描述突然想到的,各位权当荒唐言。
评论
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-17 09:45 by
惊为天人。。。以为走错了地儿。。
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-17 10:06 by
不过还好程序语言不是用来描述世界
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-17 11:08 by
写的很好,学哲学的?
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-17 11:44 by
@itkui
学哲学?您也太看得起我了,是看《苏菲的世界》,一本用侦探小说形式讨论哲学的入门读物
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-17 16:55 by
@dennis
你好有想法呀~
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-18 13:16 by
写的很好。
OO的问题不仅仅是用“理型”有意地忽略了“个性”,而且由于Class=attributes+methods的简单,很难表达真实世界中事物的复杂性。
程序语言不是用来描述世界的,但是却是用来映射世界的。
至少,现在的程序语言所能映射的是一种机械的、不完备的世界。
人对世界的理解之所以能超越计算机,是因为人的思维可以“模糊”、可以“抽象”,可以具有不确定性。顺便说一下,最新的物理研究认为宇宙中充满着不确定性,牛顿定律只是概率最大的一种情况而已。
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-18 23:32 by
@心内求法
有道理,感觉程序设计本身就是一个哲学问题
# re: 关于静态与动态之辩的一点想法 回复 更多评论
2007-07-19 12:48 by
楼主说的及至,相信有过静态语言面向对象设计经验的人都会有此同感。
让我没想到的是,竟然几千年前的古人就曾讨论过此问题!