Ruby面向对象

Ruby是一种真正面向对象的语言,可以嵌入超文本标记语言。 Ruby中的一切都是一个对象。 所有的数字,字符串甚至类都是一个对象。 整个Ruby语言基本上建立在对象和数据的概念上。

OOP是一种使用对象及其交互来设计应用程序和计算机程序的编程概念。

以下是OOP中的一些基本概念:

  • 封装
  • 多态性
  • 继承
  • 抽象化

封装:它隐藏来自其他对象的类的实现细节,这由于该类对其余的代码不可用。 其主要目的是保护数据免受数据非法操纵。

多态: 以不同的方式为不同的数据输入表示一个运算符或者函数。

继承: 它从预定义类创建新类。 新类继承其父类的行为,父类也称为超类。 以这种方式,可以使预定义的类更可重用和有用。

抽象: 它通过针对问题的建模分类来隐藏类的复杂性。

Ruby类

Ruby类定义数据类型的蓝图(或模板)。 它定义了该类名称是什么意思。

一个类定义是使用class关键字,后跟类名称,并以end关键字结束。

通常,类的名称必须以大写字母开头。 具有多个单词的类名称时,在每个单词首字母大写并且不用分隔字符在一起组成。

创建类

使用以下命令创建一个名称为:Dog 的类,

#!/usr/bin/ruby   
# file : dog.rb

class Dog

  def initialize(name="Wong")
    @name = name
  end

  def say_welcome
    puts "Welcome  #{@name}!"
  end

  def say_bye
    puts "Bye  #{@name}, See you soon."
  end
 end

创建一个新类: Dog@name是可用于Dog类的所有方法的实例变量。它在say_welcomesay_bye方法中使用。

Ruby对象

在Ruby中,一切东西都是一个对象。 当创建对象时,它们通过方法进行来执行具体的操作。 因此,一个对象是数据和方法的组合。

要创建一个对象,首先要定义一个类。定义一个类可用于创建多个对象。 使用new关键字声明对象。

创建对象

示例:

在上一步中,已经创建了一个名为Dog的类。 现在来创建Dog类的一个对象: aDog,并使用以下命令,

aDog = Dog.new('旺财')

完整示例代码 -

#!/usr/bin/ruby   
# file : dog.rb

class Dog

  def initialize(name="Wong")
    @name = name
  end

  def say_welcome
    puts "Welcome  #{@name}!"
  end

  def say_bye
    puts "Bye  #{@name}, See you soon."
  end
 end


# 创建对象

aDog = Dog.new('旺财')

aDog.say_welcome

aDog.say_bye

执行上面示例代码,得到结果如下 -

F:\worksp\ruby>ruby dog.rb
Welcome  旺财!
Bye  旺财, See you soon.

F:\worksp\ruby>

Ruby方法

方法是在类的主体内定义的函数。 Ruby中的数据只能通过方法访问。 当调用方法时,Ruby会根据一个跟踪路径来查找。可以使用ancestors方法找出方法名称。

定义方法

方法用def关键字定义,并以end关键字结尾。

定义一个方法:get_name,所下示例显示。

F:\worksp\ruby>irb
irb(main):006:0> def get_name
irb(main):007:1>   puts "My name is Maxsu"
irb(main):008:1> end
=> :get_name
irb(main):009:0> get_name
My name is Maxsu
=> nil
irb(main):010:0>

def关键字开始方法名称的定义。 然后编写方法的具体实现。 最后一行 end 表示该方法定义完成。

实例方法

实例方法也使用def关键字定义,只能在类实例中使用。

示例:

#!/usr/bin/ruby -w   
# file : instance-methods.rb

# define a class   
class Circle   
   # constructor method   
   def initialize(r)   
      @radius = r   
   end   
   # instance method   
   def getArea   
      3.14 * @radius * @radius   
   end   
end   

# create an object   
circle = Circle.new(200)   

# call instance methods   
a = circle.getArea()   
puts "Area of the box is : #{a}"

执行上面代码,得到以下结果 -

F:\worksp\ruby>ruby instance-methods.rb
Area of the box is : 125600.0

F:\worksp\ruby>

Ruby继承

在继承中,使用预定义的类创建新类。新创建的类称为派生类,派生类的类称为基类。 通过继承可以重新使用代码,从而降低程序的复杂性。

Ruby不支持多级继承。而是支持混合型(mixins)。

在Ruby中,<字符用于创建一个子类。 语法如下所示:

parentClass < subClass

示例

#!/usr/bin/ruby   
# file : inheritance.rb
class Parent   

    def initialize   
        puts "Parent class created"   
    end   
end   

class Child < Parent   

   def initialize   
       super   
       puts "Child class created"   
   end   
end   

Parent.new   
Child.new

在上面的例子中,创建了两个类:一个是Base类,另一个是派生的Child类。super方法调用Parent类的构造函数。

最后的两行实例化了这两个类。

执行上面示例代码,得到以下结果 -

F:\worksp\ruby>ruby inheritance.rb
Parent class created
Parent class created
Child class created

F:\worksp\ruby>

在输出中,首先创建Parent类的对象,派生的Child类也调用其父类的构造函数,然后创建Child类。

Ruby构造函数

创建对象时自动调用构造函数,并且不返回任何值。 在Ruby中,构造函数叫作:initialize

构造函数的主要目的是启动对象的状态,它们不能被继承。使用super方法调用父对象构造函数。

示例:

#!/usr/bin/ruby   
# file: class-initialize.rb
class Parent   

    def initialize   
        puts "Parent is created"   
    end   

end   

Parent.new

执行上面代码,得到以下结果 -

F:\worksp\ruby>ruby class-initialize.rb
Parent is created

F:\worksp\ruby>

上一篇: Ruby异常 下一篇: Ruby正则表达式