Ruby 简明教程

Ruby - Classes and Objects

Ruby 是一个完美的面向对象编程语言。面向对象编程语言具有以下特点 −

  1. Data Encapsulation

  2. Data Abstraction

  3. Polymorphism

  4. Inheritance

这些特点已在章节 Object Oriented Ruby 中进行讨论。

面向对象程序涉及类和对象。类是单个对象根据其创建的蓝图。在面向对象术语中,我们说你的自行车是自行车类对象的一个实例。

以任何车辆为例。它包含轮子、马力和燃油或油箱容量。这些特性形成了类 Vehicle 的数据成员。你可以借助这些特性来区分一辆车与另一辆车。

车辆还具有一些功能,例如停车、行驶和加速。即使这些功能也形成了类 Vehicle 的数据成员。因此,你可以将类定义为特性和功能的组合。

类 Vehicle 可以定义为 −

Class Vehicle {

   Number no_of_wheels
   Number horsepower
   Characters type_of_tank
   Number Capacity
   Function speeding {
   }

   Function driving {
   }

   Function halting {
   }
}

通过为这些数据成员指定不同的值,可以形成车辆类的多个实例。例如,飞机有三个轮子、1000 马力、燃油箱类型和 100 升容积。同样的,汽车有四个轮子、200 马力、汽油箱类型和 25 升容积。

Defining a Class in Ruby

要使用 Ruby 实现面向对象编程,首先需要学习如何在 Ruby 中创建对象和类。

Ruby 中的类总是以关键字 class 开始,后跟类的名称。名称始终应以大写字母开头。Customer 类可以显示为 −

class Customer
end

使用关键字 end 终止一个类。类中的所有数据成员都位于类定义和 end 关键字之间。

Variables in a Ruby Class

Ruby 提供四种类型的变量 −

  1. Local Variables − 局部变量是在方法中定义的变量。局部变量在方法外部不可用。你将在后面的章节中看到有关方法的更多详细信息。局部变量以小写字母或 _ 开头。

  2. Instance Variables − 实例变量可用于任何特定实例或对象的各种方法。这意味着实例变量因对象而异。实例变量之前加上 @ 符号,后跟变量名称。

  3. Class Variables − 类变量可用于不同的对象。类变量属于类,是类的特征。它们之前加上 @@ 符号,后跟变量名称。

  4. Global Variables − 类变量不能跨类使用。如果你想有一个单一变量,它可以跨类使用,你需要定义一个全局变量。全局变量始终以美元符号 ($) 开头。

Example

使用类变量 @@no_of_customers,可以确定正在创建的对象数量。这能够计算客户数量。

class Customer
   @@no_of_customers = 0
end

Creating Objects in Ruby using new Method

对象是类的实例。你现在将学习如何在 Ruby 中创建类的对象。可以使用类的 new 方法在 Ruby 中创建对象。

new 方法是一种独特的类型方法,它在 Ruby 库中预定义。new 方法属于类方法。

以下是创建 Customer 类对象的两个对象 cust1 和 cust2 的示例 −

cust1 = Customer. new
cust2 = Customer. new

此处,cust1 和 cust2 是两个对象的名字。在等于号 (=) 之后编写对象名称,然后是类名称。然后,跟随点运算符和 new 关键字。

Custom Method to Create Ruby Objects

可以将参数传递给 new 方法,这些参数可用于初始化类变量。

当计划用参数声明 new 方法时,需要在创建类时声明 initialize 方法。

initialize 方法是一种特殊类型的方法,当使用参数调用类的 new 方法时会执行该方法。

以下是创建初始化方法的示例 −

class Customer
   @@no_of_customers = 0
   def initialize(id, name, addr)
      @cust_id = id
      @cust_name = name
      @cust_addr = addr
   end
end

在此示例中,使用 id, nameaddr 作为局部变量声明 initialize 方法。此处,def 和 end 用于定义 Ruby 方法 initialize。你将在后面的章节中了解有关方法的更多信息。

在 initialize 方法中,您将这些局部变量传递到实例变量 @cust_id、@cust_name、@cust_addr 中。在此,局部变量包含传递到 new 方法的值。

现在,您可以按照如下方式来创建对象。

cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

Member Functions in Ruby Class

在 Ruby 中,函数称为方法。类中的每个方法以关键字 def 开始,后跟方法名称。

方法名称始终首选 lowercase letters 。您使用关键字 end 在 Ruby 中结束一个方法。

这里是一个定义 Ruby 方法的示例:

class Sample
   def function
      statement 1
      statement 2
   end
end

在此,语句 1 和语句 2 是类 Sample 中方法函数主体的一部分。这些语句可以是任何有效的 Ruby 语句。例如,我们可以使用 puts 方法像下面这样打印 Hello Ruby:

class Sample
   def hello
      puts "Hello Ruby!"
   end
end

现在,在以下示例中,创建一个 Sample 类的对象,并调用 hello 方法,然后查看结果:

#!/usr/bin/ruby

class Sample
   def hello
      puts "Hello Ruby!"
   end
end

# Now using above class to create objects
object = Sample. new
object.hello

这会产生以下结果 −

Hello Ruby!

Simple Case Study

如果您想对类和对象做更多的练习,这里是一个案例研究。