vir*_*tor 17
引自维基百科的引用来自这里:
Benjamin Cuire Pierce和其他一些研究人员认为任何将OOP提炼到最小特征的尝试都是徒劳的.
但看着他们自己的徒劳尝试:
所以是的 - 有了一些烟雾和闪光,你可以尝试声称Erlang是面向对象的.但我可以使用相同的技巧将C表示为OO语言,因为您可以在其中使用OO样式并手动实现vtables.
任何看待Erlang的理智人的答案都可能是"不"Erlang是一种功能/消息传递导向的语言.
另一个答案可能是"为什么要分类"/"谁需要知道"?
我认为在更高层次上,Erlang是面向对象的,因为你相信这个术语中讨论的原始概念.我的意思是隔离,消息传递,多态.
Erlang的进程可以保持状态,对该状态执行操作,并且它们与其他进程隔离,因为它们不能直接相互影响.由于任何进程都可以接收任何消息(并且消息可以很容易地委托给可以向原始发送者发送回复的另一个进程),我相信它也可以实现多态性.
当然,较低级别的Erlang会显示其功能方面,但我认为在更高级别(您在进程之间传递和协调消息的位置),Erlang会以面向对象的方式运行.你不能陷入困境,认为面向对象是关于类,继承和方法调用(与消息传递不同).这只是我们在大多数主流语言中为我们提供范式的方式.
Joe Armstrong在他的博客中发表了关于OO的帖子并回答了这个问题.
随着Erlang的流行,我们经常被问到"Is Erlang OO" - 当然,真正的答案是"当然不是" - 但我们并没有大声说出来 - 所以我们发明了一种巧妙的回答方式这个问题旨在给人留下Erlang(有点)OO的印象(如果你挥手很多)但不是真的(如果你听了我们实际说过的话,并仔细阅读小字).
顺便说一下,这篇文章对OO来说是一个非常有趣的批评:http://harmful.cat-v.org/software/OO_programming/why_oo_sucks