Elementor Header #8

13. Классы

1. Введение

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

2. Определение класса

Класс в 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.

3. Создание объектов класса

После определения класса можно создавать объекты этого класса, используя метод 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."

				
			

4. Свойства и методы класса

4.1. Свойства

Свойства класса (или экземпляра) — это переменные, которые хранят состояние объекта. Они начинаются с символа @.

Пример использования свойств:

				
					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"

				
			

4.2. Методы

Методы определяют поведение объектов класса и могут использоваться для выполнения действий или возврата значений.

Пример методов:

				
					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

				
			

5. Модификаторы доступа

В 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     # => Ошибка: метод приватный

				
			

6. Наследование

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, но переопределяет его.

7. Распространённые ошибки

7.1. Ошибка: Неправильное использование initialize

Если не предоставить нужные параметры при создании объекта, метод initialize не будет выполнен правильно.

Пример ошибки:

				
					class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
end

person = Person.new("Alice")  # Ошибка: недостаточно параметров

				
			

7.2. Ошибка: Неправильное использование модификаторов доступа

Методы, объявленные как private, нельзя вызывать за пределами методов того же класса.

Пример ошибки:

				
					class Example
  private

  def private_method
    "Private"
  end
end

obj = Example.new
obj.private_method  # Ошибка: метод приватный

				
			

Заключение

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

8. Тестовое задание

  1. Напишите класс Book, который имеет свойства title, author и year_published. Реализуйте методы для отображения информации о книге и проверки, является ли книга старинной (опубликована более 50 лет назад).

  2. Напишите класс 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

				
			

Проверьте свою программу, чтобы убедиться, что она правильно выполняет все операции и обрабатывает возможные ошибки.

logo