Ruby - 类和对象
Ruby 是一种完美的面向对象编程语言。 面向对象编程语言的特点包括 −
- 数据封装
- 数据抽象
- 多态性
- 继承
这些特性已经在Object Oriented Ruby一章中讨论过了。
面向对象的程序涉及类和对象。 类是创建单个对象的蓝图。 在面向对象的术语中,我们说您的 bicycle 是称为自行车的 对象类 的一个实例。
以任何车辆为例。 它包括车轮、马力和燃料或油箱容量。 这些特征构成了 Vehicle 类的数据成员。 您可以借助这些特征将一辆车与另一辆车区分开来。
车辆还可以具有某些功能,例如停止、行驶和超速。 甚至这些函数也构成了 Vehicle 类的数据成员。 因此,您可以将类定义为特征和功能的组合。
Vehicle 类可以定义为 −
Class Vehicle { Number no_of_wheels Number horsepower Characters type_of_tank Number Capacity Function speeding { } Function driving { } Function halting { } }
通过为这些数据成员分配不同的值,您可以形成 Vehicle 类的多个实例。 例如,一架飞机有三个轮子,马力为1000马力,燃料为油箱类型,容量为100升。 同理,汽车有四个轮子,马力为200马力,油箱类型为汽油,容量为25升。
在 Ruby 中定义一个类
要使用 Ruby 实现面向对象的编程,首先需要学习如何在 Ruby 中创建对象和类。
Ruby 中的类总是以关键字class 开头,后跟类名。 名称应始终以首字母大写。 Customer 类可以显示为 −
class Customer end
您可以使用关键字end 来终止一个类。 class 中的所有数据成员都在类定义和 end 关键字之间。
Ruby 类中的变量
Ruby 提供了四种类型的变量 −
局部变量 − 局部变量是在方法中定义的变量。 局部变量在方法之外不可用。 您将在后续章节中看到有关方法的更多详细信息。 局部变量以小写字母或 _ 开头。
实例变量 − 实例变量可跨任何特定实例或对象的方法使用。 这意味着实例变量会随着对象的变化而变化。 实例变量前面是 at 符号 (@),后面是变量名。
类变量 − 类变量可用于不同的对象。 类变量属于类,是类的特征。 它们前面有符号 @@ 然后是变量名。
全局变量 − 类变量不能跨类使用。 如果你想拥有一个跨类可用的变量,你需要定义一个全局变量。 全局变量总是以美元符号 ($) 开头。
示例
使用类变量 @@no_of_customers,您可以确定正在创建的对象的数量。 这使得能够推导客户数量。
class Customer @@no_of_customers = 0 end
使用新方法在 Ruby 中创建对象
对象是类的实例。 您现在将学习如何在 Ruby 中创建类的对象。 您可以使用类的方法 new 在 Ruby 中创建对象。
new 方法是一种独特的方法类型,它是在 Ruby 库中预定义的。 新方法属于 class 方法。
这里是创建类 Customer 的两个对象 cust1 和 cust2 的示例 −
cust1 = Customer. new cust2 = Customer. new
这里,cust1 和 cust2 是两个对象的名称。 您写下对象名称后跟等号(=),然后是类名称。 然后,点运算符和关键字 new 将紧随其后。
创建 Ruby 对象的自定义方法
您可以将参数传递给方法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、name 和 addr 作为局部变量来声明 initialize 方法。 这里,def 和 end 用于定义 Ruby 方法 initialize。 您将在后续章节中了解有关方法的更多信息。
在 initialize 方法中,您将这些局部变量的值传递给实例变量 @cust_id、@cust_name 和 @cust_addr。 这里局部变量保存与新方法一起传递的值。
现在,您可以按如下方式创建对象 −
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
Ruby 类中的成员函数
在 Ruby 中,函数称为方法。 class 中的每个方法都以关键字def 开头,后跟方法名称。
方法名称总是首选小写字母。 使用关键字 end 结束 Ruby 中的方法。
这是定义 Ruby 方法的示例 −
class Sample def function statement 1 statement 2 end end
这里,statement 1 和 statement 2 是类 Sample 内的方法 function 主体的一部分。 这些语句可以是任何有效的 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!
简单案例研究
如果您想对类和对象进行更多练习,这里有一个案例研究。