關於靜態與動態之辯的一點想法
先讓我們來了解下柏拉圖對世界的理解,柏拉圖認為,自然界中有形的東西是流動的,但是構成這些有形物質的“形式”或“理念”卻是永恒不變的。柏拉圖指出,當我們說到“馬”時,我們沒有指任何一 匹馬,而是稱任何一種馬。而“馬”的含義本身獨立於各種馬(“有形的”),它不存在於空間和時間中,因此是永恒的。但是某一匹特定的、有形的、存在於感官 世界的馬,卻是“流動”的,會死亡,會腐爛。柏拉圖把這個永恒不變的“形式”稱為“理型”,他認為這個世界分為兩個部分,一部分是完美的由“理型”組成的世界,另一個就是我們現實的“粗糙”的世界,真實世界是按照的標準設計的,總是努力達致完美的,但總是存有偏差。 因此他相信人類的靈魂是不朽的,靈魂蘇醒後會向往回到完美“理型”的世界,人生來就有“理型”的觀念。總之,柏拉圖深信“理性”遠比“感官”可靠。而他的學生亞裏士多德卻反駁他的老師,在亞裏士多德看來,他也讚成世界是有變化的“質料”與不變的“形式”組成,比如具體的某隻馬是有一些“質料”組成,它有馬的“形式”在裏頭,因此它被稱為馬。而“形式”存在於具體的“物”之中,比如“馬”的含義就存在具體的千千萬萬隻馬之中, “形式”的觀念並不是人與生俱來的,而是借助於“感官”去感知外界事物而得來的。他把這種“形式”更多地稱為“特征”,由此提出了他的自然界分類觀點,對“物”分類依據的是它能做什麼以及它有什麼特征。可以說,亞裏士多德比他的老師更相信“感官”,沒有像他的老師那樣陷入對完美“理型世界”的眷念而不可自拔。
聯想到我們在使用靜態OO語言(比如java)試圖去描述現實世界的場景,我們總是試圖先設計出一些類(class),這些類秉承我們的意誌,我們預期它們能完美地描述事物,並且試圖去符合所有的現實的場景。可以注意到,這樣的想法不正是柏拉圖式的偏執?我們用頭腦中出現的“理型”(具體到語言中的類)去描述現實世界,可現實世界往往是模煳的、粗糙的,兩者的衝突不可避免,導致類不再按照我們的設想發展,它變的龐大,變的不是那麼清晰,因此我們又造出“設計模式”“重構”的“詭辯之術”去彌補、去完整,可這並不是治本之道。首先我們必須承認世界是不完美的,完美的“理型”或者說完美的類是不存在的,類型的劃分不能依賴於頭腦中的完美“理型”(類型的劃分不是取決於類),而應該根據事物的特征以及事物能做什麼來劃分。放棄對類描述世界的追求,轉而構造模煳的類型,對象的類型不再預先構造,它的類型取決於它能幹什麼,它有什麼特征,這正是動態語言中的“Duck-Typing”以及一些函數式語言中的模式匹配希望做到的,兩者都是為了描述模煳的現實世界。再比如ruby中的mixin和open class特性又提供了方式讓我們去慢慢完善“粗糙”的類,放棄一蹴而就,選擇有機成長。
不是很清晰的想法,隻是看《蘇菲的世界》裏對希臘古典哲學的描述突然想到的,各位權當荒唐言。
文章轉自莊周夢蝶 ,原文發布時間2007-07-17
最後更新:2017-05-17 16:01:29