Ruby для новичков: Объекты и классы (ООП)

Что такое классы и объекты?

Классы — это типы данных. Ранее мы создавали переменные, например, x = 4, где x имела тип данных Integer (целое число). Классы позволяют создавать собственные типы данных. Например, для описания человека, книги, дома или машины нужно создать класс.

Зачем это нужно? Представим описание машины. Машина имеет колеса, цвет, марку, скорость и может ехать или останавливаться. Всё это описывается переменными и методами внутри класса. На основе класса можно создавать различные объекты — конкретные машины, например, BMW, Audi, Chevrolet. Каждый объект будет иметь характеристики, описанные в классе.

Если в классе «Машина» указано, что каждая машина имеет цвет, скорость и возможность ехать, то каждый объект (BMW, Audi и т.д.) будет обладать переменными speed и color, а также методом, отвечающим за движение. Таким образом, создаётся собственный тип данных. Если нужно добавить возможность остановки, достаточно изменить класс, добавив соответствующий метод — и все объекты (BMW, Audi и другие) автоматически получат эту возможность. Это значительно удобнее, чем дублировать код для каждой машины.

Создание класса в Ruby

Чтобы создать класс, пишем class, затем имя класса (первая буква заглавная, остальные строчные), а в конце — end. Например:

class Машина
end

Внутри класса объявляются переменные и методы. Для объявления переменных используется специальный синтаксис:

class Машина
  attr_accessor :speed, :model, :color
end

attr_accessor создаёт три переменные: speed, model и color, обеспечивая доступ к ним для чтения и записи.

Создание объектов

Для создания объекта класса Машина пишем имя класса, new, и передаем значения для переменных:

bmw = Машина.new
bmw.speed = 230
bmw.model = "BMW"
bmw.color = "black"

puts bmw.speed # Выведет 230

Можно создавать множество объектов, каждый со своими значениями. Изменение значений одного объекта не влияет на другие. Если добавить новое свойство (например, wheels — количество колес) в класс, оно автоматически появится у всех объектов.

Конструкторы и методы

Конструктор — метод, выполняющийся при создании объекта. Он имеет имя initialize:

class Машина
  attr_accessor :speed, :model, :color

  def initialize(speed, model, color)
    puts "Hello!"
    @speed = speed
    @model = model
    @color = color
  end

  def is_speed_car?
    return true if @speed > 200
    false
  end
end

bmw = Машина.new(230, "BMW", "black") # Выведет "Hello!"
puts bmw.is_speed_car? # Выведет true или false

Конструктор позволяет передавать данные при создании объекта и сразу устанавливать значения переменных. Методы — это функции, определенные внутри класса. Они вызываются вручную. Пример метода, проверяющего скорость машины, показан выше. Методы могут принимать параметры и возвращать значения. Можно создавать неограниченное количество методов, которые будут доступны каждому объекту.

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

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