怎樣從哲學的角度去理解「一切皆對象」?


有意思的問題。我大學二年級的時候終於開始迷惑這件事,所幸偶遇一篇奇文《OO,OO以後,及其極限》,撥雲見日般地看到語言哲學的有趣之處。摘抄其中兩段:

(……)

  

  上述這些變化,表面是不同的編程工具在城頭變幻大王旗,但其背後反映的卻是一種更為深刻的認識論的改變,即你是用何種觀點來認識這個世界的?

  在PO中,程序員們分析了問題域之後,得到一個PO的模型,其中常見的詞語是變數,函數,過程等;

  PO: 現實世界 → 流程圖(變數,函數) → PO語言 → 執行求解

  在OO中,程序員們先得到一個OO的模型,其中常見的詞語是類,對象,方法,消息等;

  OO: 現實世界 → 類圖(對象,方法) → OO語言 → 執行求解

  我們可以看到:

  PO更接近於計算機世界的物理實現;OO則更符合於人們的認識習慣;

  如果說,軟體危機的根源在於人們認識表達的過程(不斷反覆,逐步深化)和馮.諾依曼計算機的實現過程(順序執行)之間存在巨大鴻溝的話,那麼從PO到OO意味這這鴻溝在逐漸縮小;

  OO作為一種思想及編程語言,為軟體開發的整個過程——從分析設計到coding——提供了一個完整解決方案。 OO堪稱是軟體發展取得的里程碑式的偉大成就,人們無不為之喝彩!

  一提到OO,我們將會聯想到C++,smalltalk,simula,聯想到Use Case,ROSE,Mr Jacboson 以及Rational公司,但卻很少有人會提及維特跟斯坦(Wittgenstein)。 然而,正是這位充滿傳奇色彩的哲學家,不僅第一次清楚地表達了OO的思想,更進一步提及了OO以後的事情,及其最後的極限所在。

(……)

  維特跟斯坦是本世紀乃至人類哲學史上最偉大的哲學家之一。 他生前只於1922年出版了一本著作——《邏輯哲學論》(Tractatus Logico-Philosophicus)。 在該書中,他闡述了一種世界觀,或者說一種認識世界的觀點,這種觀點,在六七十年後的今天,終於由一種哲學思想沉澱到技術的層面上來,成為計算機業界的寵兒,這就是「OO」,Object-Oriented,面向對象,或物件導向(港台用語)。

  讓我們先扯得遠點兒,(可能扯得確實遠了點),先談談這個人,再談他 《邏輯哲學論》一書

中的 OO 思想。

  對西方哲學感興趣的朋友都知道,在西方哲學史上發生過兩次深刻的轉向。 一次是由「本體論」向「認識論」的轉向;另一次是由「認識論」到「方法論」的轉向。

  古希臘羅馬時代的西方哲學,被稱為「本體論」的時代(……)

  中世紀之後,(……),哲學開始了由「本體論」向「認識論」的轉變(……)

  科學其實就是融合了「唯理論」和「經驗論」的長處而發展壯大的。 既強調試驗和觀察,運用歸納法,也重視利用數學和邏輯從歸納的結果出發,構造理論框架,演繹出新的科學定理。

  到了康德以後,尤其是本世紀初,哲學的核心問題開始由「認識論」轉向「方法論」,哲學關心的核心問題是認識如何實現的問題。這一時期,哲學家們開始認識到語言對於人的認識的特殊地位,他們紛紛從研究語言出發來研究哲學。 其中甚至有些人極端的認為以前的所有哲學問題不過是語言的問題而

  哲學的這次轉向有時也被稱為是「語言的轉向」 ,新的哲學觀點被冠以「語言哲學」或「分析哲學」的名稱。

  「語言哲學」 的發展經歷了兩個階段,或者說可以被進一步分為兩個學派:「邏輯分析派」和「日常語言派」。維特跟斯坦的引人矚目之處在於:他在前期持邏輯分析的觀點,後期則持日常語言的觀點。

  總結一下上面論述的要點,現在我們知道:

  西方哲學的發展,經歷了兩次變革,一次是認識論轉向;一次是語言轉向;第一次轉向使哲學的基礎從本體論和形而上學變為認識論,從研究超驗的存在物轉到研究認識的主體和主客體關係;第二次轉向把對主客體的關係的研究變成了對主體間的交流和傳達問題的研究。把對主體的研究從觀念和思想的領域轉到了語言的領域(語句及其意義);

(……)

  以上我羅里羅唆,主要是介紹了維特跟斯坦在哲學史上的地位,及其頗具傳奇色彩的一生。興之所至,請大家見諒。

  下面我們進入主題,談一談《邏輯哲學論》 及其中表述的OO思想。

不知道這兩段有沒有引起你看原文的興趣呢?需要注意的是,這幾乎是十年前的文章,當時侃維特根斯坦和語言哲學的風氣還沒那麼流行,現在讀起來多少有點過時感。作者後面甚至不辭辛苦地翻譯了《邏輯哲學論》的大部分內容,並且和OO思想結合在一起。推薦一讀,也許也能對你有些助益。(搜索 "OO,OO以後,及其極限" 即可。可惜不知道作者是誰,也不知道他後來有沒有對於FP另有見地。)


在哲學中,主體是對客體有主觀經驗、意識的一種存在。主體通常被和自我聯繫起來,以觀察者的位置看待客體。可以粗暴的說,一切能被觀察的東西對自己來說都是客體(object)。

這麼說來,所有能被意識到的東西不可能不是客體(對象)。所以我們每一個想用代碼描述的事物,都是對象。

但遺憾的是編程很多時候在解決數學問題,而不不是哲學問題,在面對這些問題時,面向對象的幫助不大。


我看到你在標籤中標記了編程,以及 Java,所以看來這個問題是有關編程的。

如果你真的從哲學的角度理解了一切皆對象,那麼又會對 Java 本身的不美好性不藝術性感到難以接受。從語言本身的很多特性,我們可以看出 C++ 是在 C 的基礎上發展而來的另外一種語言,而 Java 則是在 C++ 的基礎上發展而來的另外一種語言,這種發展的過程中,考慮到了基準語言的目標程序員習慣,也考慮到了一些用法,而非全新的從面向對象哲學設計的新語言。

正因為它不是一門全新設計的語言而是基於現有語言的改造,所以它在設計中多少會有妥協。而妥協對追求外在完美的藝術家以及追求內在完美的哲學家來說都會非常難受。——例如,標榜一切皆對象的 Java 竟然有一個重要的元素不是對象:函數。對象內的成員函數(或者叫做方法)不可以被當作一個普通的對象去操作,這一點在現代的 FP 導向的編程中存在諸多不便。

FP 跟 OO 其實根本不是對立的,因為 FP 的思想正是將函數也當作一個對象,必須被存放進一個變數並且可進行任意的操作,因而 FP 是更進一步的 OO ,是目前 OO 的升華。——他們之所以對立,僅僅在於現有的主流 OO 語言中大多數並沒有能夠將 function 當作一個對象而已,這並不妨礙將來出現更進一步的語言,將 FP 以更優雅的形式納入到 OO 框架中。。。而我們看到,最樸素的 OO 哲學思想中,恰恰 FP 也應當是必須一種 OO ,一切皆是對象的世界裡,FP 自然也是對象。


客體是自我的對象(觀察與思考),自我也是自我的對象(反省與反思),於是一切皆對象唄。


正好寫了一篇文章:面向對象的哲學思考 - 哲學與計算 - 知乎專欄


從哲學觀點認為,絕對的東西不能是對象,相對的東西才可以是對象。譬如概念1,2,3,就是絕對值,不能修飾,恆久不變,就不是對象。但是「數字」可以是對象,可是說是大於0,小於4的數字。

因此在編程世界,區分值和對象,哪些是不變的,哪些是可變的,反而比把一切當成對象更能抽象化,也更有效率。


有兩個概念可以從側面幫你理解:

由薛定鍔的貓引出的概念:量子態的塌陷,是因為有觀察者出現。在量子力學的哥本哈根派哲學解釋中,認為我們的宇宙因為觀察而存在,有人認為這種說法是唯心論。

一般人理解的觀察者是指我們能思考的這個心,所以他們認為沒有觀察就沒有這個宇宙是唯心的,這裡的兩個「心」事指同一個心,所以站在這個角度認為唯心是正確的。

另外唯物論認為在我們的"心"外有個客觀存在的世界,這個認為對於這個心來說也是正確的。

那麼為什麼會出現唯物,唯心兩種都對的情況呢?

其實在我們能思考的這個「心」背後有個真正的觀察者,他就是絕對的覺性,是他在觀察也是他在顯現。

上面說的「心」只是從絕對的覺性那裡把觀察現象當作素材運用二元對立來建立「我」 及 「我的心」,並象笛卡爾所說「我思故我在」那樣思考,這裡的所謂「我」其實是因為現象和合而存在。

當弄清楚了這個「心」和真正的觀察著「絕對的覺性」,我們就明白唯物論和唯心論站在這個「我」及「我的心」的角度看世界都是成立的。

也就是經書里說的:若見所相非相,即見如來。


別扯了,我在使用鎚子或剪刀的時候人家從來沒有要求我先接受它的哲學

我覺得這個問題這樣問比較貼切

「怎樣從營銷的角度去理解 一切皆對象 」


程序是什麼?數據和對數據的操作。對象是什麼?數據和操作的集合。這樣看來一切程序都是對象了。但這遠遠不夠,如果一個對象僅僅只是包含一個函數,不需要有自己的狀態,為何要負責地看做一個對象呢?它本身就是一個函數嘛?

從機器碼到彙編、到C、再到C++,這些新語言的新特性都是在充分發揮編譯器的功能——讓編譯器去做重複性的勞動。比如對一個整數的賦值,C語言只是一條語句,彙編就要好幾條,機器碼就沒人看懂了。再比如C++構造函數,C++對象有一個虛指針,指向虛表,虛函數就相當於C裡面的結構內部的函數指針,要初始化這些指針才能用。C++就省去了初始化的過程(交給了編譯器,在執行構造函數體之前,編譯器產生代碼初始化了虛指針)。

以後還會有其他的面向XX,只要有共同的獨立於業務邏輯的可以抽出來,交給編譯器去做。


看了維特根斯坦《邏輯哲學論》前兩節,自知原回答格局不夠,特修改。

維特根斯坦簡潔描述了他對這個世界的認識。

對象這個詞是維氏書中構成世界的根本微粒。

無色且各具內在、外在性質的對象組成…

不由讓我聯想到《弦論》里按照不同規律震動的弦和《心經》里無色無相的舍利子。


柏拉圖的Form(不是表單=_=)理論和面向對象有很多相似之處


有點意思,照這個理念來理解的話,可以把class看成普遍性,property看成特殊性。

只學過馬哲的外行飄過…


對立統一法則:有自象,有對象,一定條件下二者可以互換,則自象也是對象,故一切皆對象


「一切都是對象」 是一切都可以用「對象模型」來模擬,與哲學沒關係。


推薦閱讀:

中二哲學導論
既然神無所不能,那為什麼還要人來幫他們傳教?
如果一個胖子的死能讓你多了解一點哲學
戰狼·哥斯拉

TAG:哲學 | 面向對象編程 |