📜  Ruby OOP(1)

📅  最后修改于: 2023-12-03 14:47:08.922000             🧑  作者: Mango

Ruby OOP

Ruby是最流行的动态语言之一,由于其优美的语法,易读性高和方便的编程体验,越来越多的人选择使用它来开发应用程序。Ruby的一个重要特点就是面向对象编程(OOP),下面就来介绍一下Ruby OOP。

类与对象

类是一个抽象的概念,是一组有着相同属性和行为的对象的模板。而对象则是真正的实体,是类的一个实例。在Ruby中,通过class关键字来定义一个类,例如:

class Person
   attr_accessor :name, :age
   
   def initialize(name, age)
      @name = name
      @age = age
   end
   
   def say_hello
      puts "Hello, my name is #{@name} and I am #{@age} years old."
   end
end

这段代码定义了一个名为Person的类,其中包含两个属性:nameage,以及一个构造方法initialize和一个方法say_hello。在Ruby中,属性可以通过attr_accessor来定义,这样会自动生成getter和setter方法。

我们可以使用new方法来创建一个Person对象:

person = Person.new("John", 25)
person.say_hello
# 输出:Hello, my name is John and I am 25 years old.
封装

封装是OOP中的一个重要概念,它意味着我们将类中的属性和方法对外隐藏起来,只开放一些公共的接口供外部使用。在Ruby中,可以通过publicprotectedprivate关键字来实现封装,例如:

class Person
   attr_accessor :name, :age
   
   def initialize(name, age)
      @name = name
      @age = age
   end
   
   def say_hello
      puts "Hello, my name is #{@name} and I am #{@age} years old."
      say_goodbye # 调用私有方法
   end
   
   def change_name(new_name)
      self.name = new_name
      self.say_name # 调用受保护方法
   end
   
   private
   
   def say_goodbye
      puts "Goodbye!"
   end
   
   protected
   
   def say_name
      puts "My name is #{@name}."
   end
end

在这个例子中,say_goodbye方法被声明为私有方法,只能在类内部调用。而say_name方法被声明为受保护方法,在类内部和子类中可以调用。其他所有的方法都是公共方法,可以在任何地方调用。

继承

继承是OOP中的另一个重要概念,它意味着我们可以通过一个已有的类来创建一个新类,并继承原来的属性和方法。在Ruby中,可以通过<来实现继承,例如:

class Student < Person
   def study
      puts "I'm studying."
   end
end

在这个例子中,Student类继承了Person类,因此它可以访问Person类中的所有属性和方法。此外,Student类还定义了自己的study方法。

student = Student.new("Alice", 18)
student.say_hello
# 输出:Hello, my name is Alice and I am 18 years old.
student.study
# 输出:I'm studying.
多态

多态是OOP中的又一个重要概念,意味着不同的对象可以对同一个方法做出不同的响应。在Ruby中,多态可以通过方法重写来实现,例如:

class Animal
   def say_hello
      puts "..."
   end
end

class Dog < Animal
   def say_hello
      puts "Woof!"
   end
end

class Cat < Animal
   def say_hello
      puts "Meow!"
   end
end

在这个例子中,Animal类定义了一个say_hello方法,但它只是一个空的方法。DogCat类都继承了Animal类,并重写了say_hello方法。

animals = [Animal.new, Dog.new, Cat.new]
animals.each do |animal|
   animal.say_hello
end
# 输出:... Woof! Meow!

在这个例子中,我们创建了一个包含多个不同类型对象的数组,并对其进行遍历。由于每个对象都有自己的say_hello方法,因此调用该方法时会有不同的输出。这就是多态的体现。

总结

Ruby OOP是一个非常好的编程范式,它允许我们创建灵活、可扩展的代码。在本文中,我们介绍了一些Ruby OOP的重要概念,包括类与对象、封装、继承和多态。希望这些知识可以帮助你更好地使用Ruby进行编程。