📜  Ruby-面向对象(1)

📅  最后修改于: 2023-12-03 15:04:57.364000             🧑  作者: Mango

Ruby-面向对象

Ruby是一种面向对象的编程语言,它通过对象的概念实现了面向对象编程。Ruby是一种动态语言,它具有很大的灵活性和可读性,使开发者可以更快地开发复杂的应用程序。Ruby的面向对象特性包括:

类和对象

Ruby支持类的定义和对象的创建。类是一种数据类型,类描述了对象应该有的属性和行为。对象是类的实例,通过对象可以访问类的属性和方法。下面是一个简单的类的定义:

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方法。initialize方法用于初始化对象的属性,say_hello方法用于打印人物的信息。

接下来我们创建一个Person对象并调用say_hello方法:

person = Person.new("Jack", 30)
person.say_hello

输出:

Hello, my name is Jack and I am 30 years old.
封装

Ruby支持封装性,可以把属性和方法封装到类中,对外部世界隐藏复杂性,提供统一的接口。我们可以通过attr_accessor定义nameage的存取方法。

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 = Person.new("Jack", 30)
puts person.name
puts person.age

输出:

Jack
30
继承

Ruby支持继承,可以通过继承来扩展已有的类。我们可以定义一个Student类继承Person类,并添加一个新的属性和一个新的方法。

class Student < Person
  attr_accessor :major

  def initialize(name, age, major)
    super(name, age) # 调用父类的initialize方法
    @major = major
  end

  def say_hello
    puts "Hello, my name is #{@name}, I am #{@age} years old, and I am studying #{@major}."
  end
end

这里的Student类继承了Person类,并添加了一个major属性和一个say_hello方法。我们可以通过super调用父类的initialize方法来初始化nameage属性。

接下来我们创建一个Student对象并调用say_hello方法:

student = Student.new("Tom", 20, "Computer Science")
student.say_hello

输出:

Hello, my name is Tom, I am 20 years old, and I am studying Computer Science.
多态

Ruby支持多态,可以根据对象的类型和上下文环境执行不同的操作。我们可以定义一个Person类和一个Student类,并使用相同的方法名实现不同的行为。

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

class Student < Person
  attr_accessor :major

  def initialize(name, age, major)
    super(name, age)
    @major = major
  end

  def say_hello
    puts "Hello, my name is #{@name}, I am #{@age} years old, and I am studying #{@major}."
  end
end

我们创建一个Person对象和一个Student对象,并调用它们的say_hello方法:

person = Person.new("Jack", 30)
person.say_hello

student = Student.new("Tom", 20, "Computer Science")
student.say_hello

输出:

Hello, my name is Jack and I am 30 years old.
Hello, my name is Tom, I am 20 years old, and I am studying Computer Science.
总结

Ruby是一种面向对象的编程语言,它提供了丰富的面向对象特性,包括类和对象、封装、继承、多态等。这些特性使得Ruby可以更加灵活、可读性更高、开发速度更快。