Главная страница » Ruby » 13. Классы
Классы в Ruby представляют собой основу объектно-ориентированного программирования. Они позволяют создавать собственные объекты, определять их свойства и методы, а также управлять поведением этих объектов. Классы являются основой для моделирования данных и создания программного обеспечения в Ruby.
Класс в Ruby создается с помощью ключевого слова class
. Внутри класса можно определять свойства и методы, которые будут доступны для объектов этого класса.
Пример определения класса:
class Person
# Конструктор класса
def initialize(name, age)
@name = name
@age = age
end
# Метод для представления объекта
def introduce
"Hi, I'm #{@name} and I'm #{@age} years old."
end
end
В этом примере мы создаем класс Person
с двумя свойствами (@name
и @age
) и методом introduce
.
После определения класса можно создавать объекты этого класса, используя метод new
. При создании объекта вызывается конструктор класса, метод initialize
.
Пример создания объектов:
person1 = Person.new("Alice", 30)
person2 = Person.new("Bob", 25)
puts person1.introduce # => "Hi, I'm Alice and I'm 30 years old."
puts person2.introduce # => "Hi, I'm Bob and I'm 25 years old."
Свойства класса (или экземпляра) — это переменные, которые хранят состояние объекта. Они начинаются с символа @
.
Пример использования свойств:
class Car
def initialize(make, model)
@make = make
@model = model
end
def display_info
"#{@make} #{@model}"
end
end
car = Car.new("Toyota", "Corolla")
puts car.display_info # => "Toyota Corolla"
Методы определяют поведение объектов класса и могут использоваться для выполнения действий или возврата значений.
Пример методов:
class Calculator
def add(a, b)
a + b
end
def subtract(a, b)
a - b
end
end
calc = Calculator.new
puts calc.add(5, 3) # => 8
puts calc.subtract(10, 4) # => 6
В Ruby можно задавать уровни доступа к методам и свойствам класса:
public
— доступен для всех.protected
— доступен только для методов того же класса и его подклассов.private
— доступен только внутри методов того же класса.Пример использования модификаторов доступа:
class Example
def public_method
"I am public"
end
protected
def protected_method
"I am protected"
end
private
def private_method
"I am private"
end
end
obj = Example.new
puts obj.public_method # => "I am public"
puts obj.protected_method # => Ошибка: метод защищён
puts obj.private_method # => Ошибка: метод приватный
Ruby поддерживает наследование, позволяя одному классу наследовать свойства и методы другого класса. Это позволяет создавать более специализированные классы на основе общих.
Пример наследования:
class Animal
def speak
"I make a sound"
end
end
class Dog < Animal
def speak
"Woof!"
end
end
dog = Dog.new
puts dog.speak # => "Woof!"
В этом примере класс Dog
наследует метод speak
от класса Animal
, но переопределяет его.
initialize
Если не предоставить нужные параметры при создании объекта, метод initialize
не будет выполнен правильно.
Пример ошибки:
class Person
def initialize(name, age)
@name = name
@age = age
end
end
person = Person.new("Alice") # Ошибка: недостаточно параметров
Методы, объявленные как private
, нельзя вызывать за пределами методов того же класса.
Пример ошибки:
class Example
private
def private_method
"Private"
end
end
obj = Example.new
obj.private_method # Ошибка: метод приватный
Классы в Ruby являются мощным инструментом для организации кода и создания объектов с определёнными свойствами и методами. Понимание концепций, таких как свойства, методы, модификаторы доступа и наследование, поможет вам писать более структурированный и эффективный код.
Напишите класс Book
, который имеет свойства title
, author
и year_published
. Реализуйте методы для отображения информации о книге и проверки, является ли книга старинной (опубликована более 50 лет назад).
Напишите класс Rectangle
, который имеет свойства width
и height
. Реализуйте методы для вычисления площади и периметра прямоугольника.
Пример решения:
class Book
def initialize(title, author, year_published)
@title = title
@author = author
@year_published = year_published
end
def display_info
"Title: #{@title}, Author: #{@author}, Year: #{@year_published}"
end
def antique?
current_year = Time.now.year
current_year - @year_published > 50
end
end
class Rectangle
def initialize(width, height)
@width = width
@height = height
end
def area
@width * @height
end
def perimeter
2 * (@width + @height)
end
end
# Примеры вызова методов
book = Book.new("The Great Gatsby", "F. Scott Fitzgerald", 1925)
puts book.display_info # => "Title: The Great Gatsby, Author: F. Scott Fitzgerald, Year: 1925"
puts book.antique? # => true
rectangle = Rectangle.new(10, 5)
puts rectangle.area # => 50
puts rectangle.perimeter # => 30
Проверьте свою программу, чтобы убедиться, что она правильно выполняет все операции и обрабатывает возможные ошибки.
Наша цель и главная задача сделать качественное образование в вашем браузере
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024 Все права защищены. CodeFor.