Наследование и полиморфизм в Ruby: расширяем функциональность классов | Урок 11

Наследование и полиморфизм в Ruby Ruby

Привет, друзья! Сегодня мы погрузимся в увлекательный мир объектно-ориентированного программирования на Ruby. Наш урок посвящен двум ключевым концепциям ООП: наследованию и полиморфизму. Эти мощные инструменты позволят вам создавать более гибкий и эффективный код. Поехали!

Предыдущий урок: Основы ООП в Ruby

Следующий урок: Модули и миксины в Ruby

Что такое наследование в Ruby?

Наследование — это механизм, который позволяет создавать новые классы на основе существующих. Класс, от которого происходит наследование, называется родительским или базовым, а новый класс — дочерним или производным.

Пример наследования:

class Animal
  def speak
    "Я говорю!"
  end
end

class Dog < Animal
  def bark
    "Гав-гав!"
  end
end

rex = Dog.new
puts rex.speak  # Выведет: "Я говорю!"
puts rex.bark   # Выведет: "Гав-гав!"

В этом примере класс Dog наследует от класса Animal. Это означает, что Dog получает все методы Animal, плюс может иметь свои собственные методы.

Переопределение методов

Одно из преимуществ наследования — возможность переопределять методы родительского класса:

class Cat < Animal
  def speak
    "Мяу!"
  end
end

whiskers = Cat.new
puts whiskers.speak  # Выведет: "Мяу!"

Здесь мы переопределили метод speak для класса Cat.

Использование super

Ключевое слово super позволяет вызвать метод родительского класса из переопределенного метода:

class Bird < Animal
  def speak
    super + " Чирик-чирик!"
  end
end

tweety = Bird.new
puts tweety.speak  # Выведет: "Я говорю! Чирик-чирик!"

Что такое полиморфизм?

Полиморфизм — это способность объектов с одинаковым интерфейсом иметь различную реализацию. В Ruby это часто достигается через наследование и переопределение методов.

Пример полиморфизма:

def make_sound(animal)
  puts animal.speak
end

make_sound(Animal.new)  # Выведет: "Я говорю!"
make_sound(Dog.new)     # Выведет: "Я говорю!"
make_sound(Cat.new)     # Выведет: "Мяу!"
make_sound(Bird.new)    # Выведет: "Я говорю! Чирик-чирик!"

Здесь метод make_sound работает с любым объектом, у которого есть метод speak, независимо от конкретного класса объекта.

Практическое задание

Давайте создадим иерархию классов для разных видов транспорта:

class Vehicle
  def initialize(name)
    @name = name
  end

  def start_engine
    "Двигатель #{@name} запущен."
  end
end

class Car < Vehicle
  def drive
    "#{@name} едет по дороге."
  end
end

class Plane < Vehicle
  def fly
    "#{@name} летит по небу."
  end
end

class Ship < Vehicle
  def sail
    "#{@name} плывет по воде."
  end
end

# Использование классов
tesla = Car.new("Tesla")
boeing = Plane.new("Boeing 747")
titanic = Ship.new("Титаник")

puts tesla.start_engine  # Выведет: "Двигатель Tesla запущен."
puts tesla.drive         # Выведет: "Tesla едет по дороге."

puts boeing.start_engine # Выведет: "Двигатель Boeing 747 запущен."
puts boeing.fly          # Выведет: "Boeing 747 летит по небу."

puts titanic.start_engine # Выведет: "Двигатель Титаник запущен."
puts titanic.sail         # Выведет: "Титаник плывет по воде."

Заключение

Наследование и полиморфизм — мощные инструменты в арсенале Ruby-разработчика. Они позволяют создавать гибкие и расширяемые программы, уменьшая дублирование кода и повышая его читаемость.

В следующем уроке мы рассмотрим модули и миксины — еще одни важные концепции Ruby, которые дополняют и расширяют возможности наследования.

Не забудьте попрактиковаться с примерами из урока и попробуйте создать свою собственную иерархию классов. Удачи в изучении Ruby!

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x