Класс описывает поведение экземпляров и обычно используется для создания объектов через new. Состояние экземпляра хранится в переменных с @, а методы предоставляют операции над ним. Сам класс тоже является объектом класса Class. Ruby поддерживает одиночное наследование классов и подключение поведения модулей.
Что такое класс в Ruby?
Класс как объект и описание поведения экземпляров: initialize, состояние, методы и наследование.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Класс объединяет поведение объектов некоторого типа. Его удобно представить как описание того, какие операции доступны экземплярам и как они инициализируются. При этом Ruby не требует заранее объявлять все переменные экземпляра как фиксированные поля структуры.
class Dog
attr_reader :name
def initialize(name)
@name = name
end
def bark
"#{@name} says Woof!"
end
end
first = Dog.new("Rex")
second = Dog.new("Luna")
puts first.bark # Rex says Woof!
puts second.name # Luna
@name принадлежит конкретному экземпляру. initialize задаёт начальное состояние, а attr_reader создаёт метод чтения. Извне вызывают dog.name, а не получают прямой доступ к @name как к публичному полю.
Сам Dog — объект: Dog.class возвращает Class. У него также могут быть собственные методы, например def self.description; их вызывают на классе, а не на экземпляре.
Наследование записывается как class ServiceDog < Dog. У класса один непосредственный суперкласс; общую функциональность несвязанных классов можно подключать модулями. Класс, объект класса и экземпляр этого класса — разные уровни, которые полезно различать на собеседовании. Документация Class.