2010-08-07 25 views
21

消息傳遞是Erlang的基礎部分。艾倫凱有argued消息傳遞是一個概念比他在面向對象編程(他「發明」這個術語!)中的對象更重要。Erlang是面向對象的嗎?

Erlang可以被認爲是一種面向對象的編程語言(àSmalltalk)嗎?

回答

6

我認爲在更高層次上Erlang是面向對象的,因爲您相信圍繞術語討論的原始概念。我的意思是隔離,消息傳遞,多態。

Erlang的進程可以保持狀態,在該狀態下執行操作,並且它們與其他進程隔離,因爲它們不能直接相互影響。由於任何進程都可以接收到任何消息(並且可以輕鬆地將消息委託給可以將回復發送給原始發件人的另一個進程),我相信它也可以實現多態。

當然Erlang在較低的層次上顯示了它的功能方面,但我認爲在更高層次上(在進程間傳遞和協調消息的地方),Erlang的行爲是面向對象的。你不可能陷入思維,面向對象就是關於類,繼承和方法調用(這與消息傳遞不同)。這只是大多數主流語言爲我們提供的範例。

17

維基百科從here行情報價:

本傑明Cuire皮爾斯和其他一些研究者認爲是徒勞的任何企圖提煉OOP一組功能微乎其微。

但是看着自己的徒勞:

  • 動態分配 - 如果你把一個Erlang進程作爲一個對象,那麼,它的支持。
  • 封裝 - 如果您將消息發送/響應視爲方法調用,則支持。
  • 亞型多態性 - 樣的 - 如果你伸展不夠行爲的定義,它支持
  • 繼承對象(或授權) - 沒有任何正確性檢查,可以將一個對象替換成另一個 - 讓我們說這是正常
  • 開放式遞歸 - 支持(發送到自己的進程)

所以是的 - 有些冒煙和閃爍,你可以嘗試聲稱Erlang是面向對象的。但是我可以使用相同的技巧將C作爲OO語言呈現,因爲您可以在其中使用OO風格並手動實現vtables。

看着Erlang的任何理智的人的回答可能是「否」Erlang是一種功能/消息傳遞導向語言。

另一個答案可能是「爲什麼麻煩分類」/「誰需要知道」?

+3

X先生沒有明確談OO方式阿蘭凱意味着術語,這是相當少蓬鬆什麼「OO」意味着今天。顯然,C在凱的意義上並不是OO,因爲語言沒有消息傳遞的概念。 (並且消息傳遞不是方法調用!) – 2010-08-08 15:04:22

28

喬·阿姆斯特朗有gone on record說,他認爲Erlang是「可能是唯一面向對象的語言」(上下文增加了「二OO字的阿蘭凱意義」)。Johnson在同一次採訪中指出了Sean Copenhaver在他的回答中所說的同樣的東西:在小的Erlang中,這是一種純粹的功能語言;在大的過程中,它看起來完全像凱風格的對象方向。

+1

阿當,我完全忘記了那次採訪。 +1放在那裏。 InfoQ與Joe Armstrong有一對夫婦,聽到他談論Erlanger如何看待事情是非常有趣的。 – 2010-08-11 14:07:57

+0

引用是:「我不太確定我是否相信這個,但是erlang可能是唯一的面向對象的語言。」 – 2015-11-17 03:49:24

6

Joe Armstrong在他的博客中發表了一篇關於面向對象的文章並回答了這個問題。

隨着二郎走紅我們往往被問「是二郎OO」 - 嗯, 當然真正的答案是「不,當然不是」 - 但我們沒有說這 大聲 - 因此我們發明了一種巧妙的巧妙方式 回答了這個問題,這個問題的目的是爲了給人一種印象,即Erlang是(有點)OO(如果你揮動雙手)但不是真的 (如果你聽了我們實際上說的話,仔細閱讀小字 )。

順便說,文章是一個非常有趣的評論家OO:http://harmful.cat-v.org/software/OO_programming/why_oo_sucks

相關問題