类与对象

现在先跳过其余的 Ruby 语法,例如类型(type)、循环(loops)、模块(modules)等等(不要怕,我们会很快回过头来),让我们迅速去看看如何创建类(class)和对象(object)。

类、对象和方法
类是对象的大纲蓝图,它定义对象包含的数据以及行为方式。许多不同的对象可以从单一的类创建,所以你可能有一个 Cat 类(class),但是有三个 cat 对象(objects):tiddlescuddlesflossy。一个方法(method)就像一个定义在类中的函数或子例程。

Ruby 是面向对象(object oriented)的似乎没什么特别可说的,现代所有的语言不是如此吗?好吧,说一点。大多数现代的“面向对象”语言(Java、C++、C#、Object Pascal 等等)或多或少都具有面向对象编程(OOP)的特性。另一方面,Ruby 是纯粹面向对象的。事实上,除非你使用过 Smalltalk 或 Eiffel (比 Ruby 更纯粹的面向对象的语言),否则 Ruby 就是你曾经使用过的语言中最面向对象的语言。从简单的数字和字符串到复杂的文件和模块,每一块数据都被视为一个对象。并且你用对象做的每一件事都是通过方法来完成,甚至“运算符”(operators)也是一个方法,例如加 + 和减 - 。看下面这个程序:

  1. x = 1 + 2

这里的 + 是 Fixnum (Integer) 对象 1 的一个方法,值 2 被传入该方法;结果 3 被返回并赋值给 x 对象。顺便地说一下,运算符 = 是“使用对象做任何事情都是通过方法来完成”这条规则的罕见例外。赋值运算符是一个内置的东西(这不是一个术语,我没有添加)并且它不是用来完成任何事情的一个方法。

现在让我们来看看如何创建我们自己的对象。和大多数其它 OOP(面向对象编程)的语言一样,一个 Ruby 对象由类来定义,这个类就像一个从中构建多个单个对象的蓝图。例如,这个类定一只狗:

  1. class Dog
  2. def set_name( aName )
  3. @myname = aName
  4. end
  5. end

注意,类的定义以关键字 class(全部小写)和类名开始,并且类名必须以大写字母开头。这个类包含一个 set_name 方法,它需要传入一个参数 aName,方法体则是将 aName 赋值给一个 @myname 变量。