一切皆对象

「一切皆对象」,其他面向对象语言也是这么说的。但是,Ruby对面向对象的实现才是更纯粹的。

1968年,面向对象之父Alan Kay,带着他的单独个体(即“细胞”)生物学模型来设计出第一个面向对象语言SmallTalk,而这些个体之间可通过“信息”相互交流。 而Ruby也是借鉴了SmallTalk的设计思想。

Ruby中一切皆对象,是实现了真正的面向对象的语言。

面向对象理论,尝试建立一种对象模型,它能够反映应用领域里各种实体之间的关系,其本质更接近于人类认知事物所采用的哲学观的计算模型。它的优点是让编程与现实世界更加接近,让编程更人性化。

在这样的对象模型中,对象作为计算的主体,对象之间是通过消息来通信的。

str = "hello world!"
str.upcase #=> "HELLO WORLD!"

上面示例中, str是一个字符串字面量,同时也是一个String的实例对象。第二行代码中,str对象接收到一个消息 “upcase”, 然后str对象响应了这个消息并返回“HELLO WORLD!”。

那么上面的str对象,就叫做「消息接收者(message reciver)」。

而在Ruby中,这样的消息,我们称其为「方法」。当然也可其他语言中的方法是类似的。在其他语言中,你可能是这样被告知的:「str调用了upcase方法」。但这个实际上是一种过程式思维,我们需要在面向对象思想层面去看这个问题:「str作为一个消息接收者去响应一个消息,并返回它该返回的结果」。

这个概念是很重要的,对于你理解Ruby的对象模型很有帮助。

总结

Ruby中一切皆对象,而对象间的通信完全靠消息,在Ruby中消息即为方法,那么,我们可以这么理解:Ruby中的通信一切皆方法(除了关键字)。

对象,就好比我们身体中的细胞一样,通过电信号传递着消息,构造着生命。