敲響OO時代的喪鐘! 物件導向的哲學破綻 2

2021-08-29 03:44:32 字數 1548 閱讀 6208

2、形上學

當我寫下這個標題的時候,內心無比惶恐。

當初,維根斯坦去找羅素,問到:「你看我是不是乙個十足的白痴?」羅素不知他為什麼這樣問,維根斯坦說:「如果我是,我就去當乙個飛艇駕駛員,但如果我不是,我將成為乙個哲學家」。可見哲學這東西,只有真正的天才才有能力去研究它。

還好,我並不是要研究形上學,我只是要研究物件導向背後的形上學哲學基礎。

我也不是要證實這個哲學基礎的正確性與適用性。我只需要證明「物件導向背後的那個形上學基礎是不正確的、是不適用於軟體開發的。」

物件導向的兩大核心概念是:「物件」與「類」。「一切皆是物件」是由樸素原子論而來的。「萬物皆有類屬」就是由亞里斯多德的形上學來的。

對於亞里斯多德的形上學理論不熟悉的朋友,可以即時補課,中國人民大學哲學系的《西方哲學史》有好幾節專門講這個方面:《亞里斯多德的實體論i》、《亞里斯多德的實體論iii》。還有就是到google上去專門搜一下亞里斯多德的邏輯學說,看完以後,咱們回來接著說。

咱們用自己的話說一下:「種」、「屬」、「屬差」以及「定義」這幾個概念。

種:是乙個大的概念,假設已經預先定義好了的。

屬:所有屬於某一種的概念,都是那一種下面的屬。

屬差:同屬一種的、同一級別的屬之間的差別,或者說個性。

定義:通過種加屬差,可以定義乙個屬的概念。

舉例說明:人是二足直立動物。人是乙個需要被定義的屬,動物是人之所屬的種,二足直立是人作為動物的共性之外,擁有的個性,也就是屬差。

懂得初步的物件導向程式設計的同志們,你們都看出來了吧,大多數oo語言也是這麼定義類的。你定義乙個animal,再用person去繼承animal。在animal裡有一些屬性與方法,在person裡再加一些人所特有的。很多很多的物件導向的教科書裡,甚至就是直接用這個定義來舉的例子。

問題出在**?或者有人會問:「這樣有什麼不對嗎?」

我們可以通過「種+屬差」來定義乙個新的屬嗎?定義成立的前提是什麼?先要有種的定義。然後才可能有屬的定義。種的定義又是**來的呢?在乙個種的概念之上,必然存在乙個更普遍的種,乙個更大的範疇。在亞里斯多德來說,在所有的種之上的種是「存在」,而存在是無法被定義的。而在物件導向的哲學裡,即使是這乙個最基本的哲學困境也被忽略了,無法被定義的概念,被代換為無需由程式設計師定義的概念(object)。屬差的區別在哲學家看來,是本質的,是基於深刻認識才能提出的。而在物件導向的哲學裡,種的共性就是基類所定義的「屬性與方法」,而屬的個性,就是對於基類的擴充套件。「種+屬差」變成了「公用**+擴充套件**」。

當概念定義這樣乙個「問題域的描述手段」,演變成「減少重複**原則」之後。class繼承的概念就越發的模糊不清了。我們來總結一下:

1、物件導向原本聲稱的描述真實世界的目標,採用的工具卻是樸素的「種加屬差」的方式。

2、物件導向分析中,發現具體的物件還算是容易的,發現「種」的概念卻是困難的。

3、在實際應用中,種概念的發現與定義,被偷換為公共**的抽取。

4、由於基類的定義的隨意性,導致子類不但可以擴充套件基類的行為與特性,還可以覆蓋(改變)基類的行為與特性。

5、由於哲學概念的與開發概念的混淆,使得在oo領域is-a、has-a、like-a成為最為繞人的概念。

(哲學討論到此結束,未完待續)

敲響OO時代的喪鐘! 物件導向的發展歷程

在寫完了哲學分析部分之後,我總算是喘了一口氣,彷彿穿越了最幽暗的深谷,終於走出了自己最不擅長的領域了。後來在 上和曹曉鋼聊了挺長時間,對於oo的批判,他認為有點過頭了。經過我的解釋,他提出了乙個更好的建議,清楚的說明自己批判的oo,究竟是哪乙個階段的oo,然後才不至於誤傷到已經改善過後的oo。所以我...

敲響OO時代的喪鐘 一種新的語言 2

讓我們接著昨天的資料型別來討論。datatype as polygon 這樣的判斷,其實是有漏洞的。假設多邊形中,有一條以上的直線,長度為0,那麼這個多邊形,就不是乙個三角形了。因此,我們需要修改line的型別定義 datatypeline ok,有了這樣的line以後,我們得到的三角形 四邊形就是...

物件導向 OO 的程式設計 建立物件

為了避免大量重複 產生,可採用以下方法建立物件 1 function createperson name,age,job 89 var person1 createperson bob 23,doctor 10var person2 createperson lily 21,student 其實就是...