zl程序教程

您现在的位置是:首页 >  其他

当前栏目

关于静态与动态之辩的一点想法

2023-03-14 10:14:02 时间

    先让我们来了解下柏拉图对世界的理解,柏拉图认为,自然界中有形的东西是流动的,但是构成这些有形物质的“形式”或“理念”却是永恒不变的。柏拉图指出,当我们说到“马”时,我们没有指任何一 匹马,而是称任何一种马。而“马”的含义本身独立于各种马(“有形的”),它不存在于空间和时间中,因此是永恒的。但是某一匹特定的、有形的、存在于感官 世界的马,却是“流动”的,会死亡,会腐烂。柏拉图把这个永恒不变的“形式”称为“理型”,他认为这个世界分为两个部分,一部分是完美的由“理型”组成的世界,另一个就是我们现实的“粗糙”的世界,真实世界是按照理型世界的标准设计的,总是努力达致完美的理型世界,但总是存有偏差。 因此他相信人类的灵魂是不朽的,灵魂苏醒后会向往回到完美“理型”的世界,人生来就有“理型”的观念。总之,柏拉图深信“理性”远比“感官”可靠。而他的学生亚里士多德却反驳他的老师,在亚里士多德看来,他也赞成世界是有变化的“质料”与不变的“形式”组成,比如具体的某只马是有一些“质料”组成,它有马的“形式”在里头,因此它被称为马。而“形式”存在于具体的“物”之中,比如“马”的含义就存在具体的千千万万只马之中, “形式”的观念并不是人与生俱来的,而是借助于“感官”去感知外界事物而得来的。他把这种“形式”更多地称为“特征”,由此提出了他的自然界分类观点,对“物”分类依据的是它能做什么以及它有什么特征。可以说,亚里士多德比他的老师更相信“感官”,没有像他的老师那样陷入对完美“理型世界”的眷念而不可自拔。
    联想到我们在使用静态OO语言(比如java)试图去描述现实世界的场景,我们总是试图先设计出一些类(class),这些类秉承我们的意志,我们预期它们能完美地描述事物,并且试图去符合所有的现实的场景。可以注意到,这样的想法不正是柏拉图式的偏执?我们用头脑中出现的“理型”(具体到语言中的类)去描述现实世界,可现实世界往往是模糊的、粗糙的,两者的冲突不可避免,导致类不再按照我们的设想发展,它变的庞大,变的不是那么清晰,因此我们又造出“设计模式”“重构”的“诡辩之术”去弥补、去完整,可这并不是治本之道。首先我们必须承认世界是不完美的,完美的“理型”或者说完美的类是不存在的,类型的划分不能依赖于头脑中的完美“理型”(类型的划分不是取决于类),而应该根据事物的特征以及事物能做什么来划分。放弃对类描述世界的追求,转而构造模糊的类型,对象的类型不再预先构造,它的类型取决于它能干什么,它有什么特征,这正是动态语言中的“Duck-Typing”以及一些函数式语言中的模式匹配希望做到的,两者都是为了描述模糊的现实世界。再比如ruby中的mixin和open class特性又提供了方式让我们去慢慢完善“粗糙”的类,放弃一蹴而就,选择有机成长。
    不是很清晰的想法,只是看《苏菲的世界》里对希腊古典哲学的描述突然想到的,各位权当荒唐言。

文章转自庄周梦蝶  ,原文发布时间2007-07-17