Ruby для новичков: Наследование и модули

Этот урок посвящен наследованию классов и использованию модулей в Ruby. Также мы подведём итоги курса.

Наследование классов

Наследование — механизм, позволяющий новому классу (классу-наследнику) получать свойства и методы родительского класса. Рассмотрим класс Транспорт с общими характеристиками: скорость, цвет и метод сигналить. Классы-наследники, например, Мотоцикл или Автомобиль, наследуют эти свойства, добавляя собственные. Например, Мотоцикл может иметь свойство «количество колес = 2» и метод «ехать на заднем колесе».

class Transport
  attr_accessor :color, :speed, :wheels

  def signal
    puts "Бип-бип"
  end
end

bmw = Transport.new
bmw.color = "белый"
bmw.signal

audi = Transport.new
audi.color = "черный"
audi.signal

Создадим класс Car, наследующий от класса Transport:

class Car < Transport
  attr_accessor :accessories, :transmission_type
end

bmw = Car.new
bmw.color = "белый"
bmw.signal # Метод наследуется от класса Transport

audi = Car.new
audi.color = "черный"
bmw.signal # Метод наследуется от класса Transport

Метод signal работает корректно, несмотря на определение в родительском классе. Методы можно переопределять в классе-наследнике:

class Car < Transport
  def signal
    puts "Бип-бип 2"
  end
end

Теперь bmw.signal выведет «Бип-бип 2». Наследование позволяет создавать базовый класс с общими характеристиками и расширять его для различных типов объектов, упрощая код и повышая читаемость. Можно обращаться к переменным и методам родительского класса из класса-наследника.

bmw = Car.new
bmw.speed = 230
puts bmw.speed # Обращение к переменной родительского класса
puts bmw.color = "белый" # Обращение к переменной родительского класса

В классах-наследниках можно создавать новые методы:

class Car < Transport
  def say_sam
    puts "Укола"
  end
end

bmw.say_sam

Модули

Для больших приложений с множеством методов удобно использовать модули. Модуль — отдельный файл с набором методов. Это позволяет разбить код на логические блоки и упростить организацию проекта. В разных модулях могут быть методы с одинаковыми именами без конфликтов.

Создадим файл tut.rb:

module Tut
  def hello(name)
    puts "Привет, #{name}!"
  end

  def say_bye(name)
    puts "Пока, #{name}!"
  end
end

В файле example.rb подключим и используем модуль:

require_relative 'tut'
include Tut

hello("Джордж")
say_bye("Джордж")

В этом курсе мы изучили основы программирования на Ruby. Рекомендуется изучить Ruby on Rails — фреймворк для создания динамических веб-сайтов.

Что будем искать? Например,программа