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

Целью данной практики является закрепление знаний об описании классов и их атрибутов.

Задача №1

Постановка задачи: создайте класс, который может описывать точку в комплексном пространстве, который позволяет:

  • описывать точку двумя вещественными числами;
  • позволять получать значения реальной и мнимой частей;
  • позволять складывать два объекта комплексных числа, в результате чего появляется третий объект, содержащий в себе сумму двух предыдущих;
  • дополнительно позволять выполнять другие математические операции: умножение, вычитание, деление.

Предлагаемый способ решения:

  • Создайте каталог practice-one и перейдите в него.
  • Создайте пустой файл my_complex.rb.
  • В файле compex.rb опишите пустой класс MyComplex.
  • Создайте пустой файл main.rb и подключите в нём файл my_complex.rb с помощью require_relative.
  • Создайте два объекта класса MyComplex и убедитесь, что ваш код работает.
  • Создайте метод initialize в классе MyComplex, который принимает 2 аргумента: коэффициенты комплексного числа (real, imaginary). Данный метод должен записывать их в переменные экземпляра.
  • Измените код по созданию объектов в файле main.rb, чтобы объектам передавались необходимые данные. Проверьте состояние созданных объектов с помощью методов p и pp.
  • Создайте метод to_s в классе MyComplex, который будет преобразовывать число в строку в формате real + i * imaginary.
  • Проверьте, что при выводе информации об объектах класса MyComplex с помощью метода puts, используется корректное преобразование.
  • Добавьте описание атрибутов real и imaginary в классе MyComplex. Проверьте, что данные атрибуты доступны на объектах, создаваемых в файле main.
  • Создайте метод add, который принимает ссылку на другой объект класса MyComplex. Ссылку можно назвать other. Данный метод должен производить сложение двух комплексных чисел, в качестве результата должен создавать новый объект класса MyComplex, содержащий сумму двух чисел.
  • Проверьте в файле main.rb, что данный метод функционирует корректно.
  • Если у вас есть время, то решите задачу целиком: добавьте методы sub, multiply, divide.

Задача №2

Постановка задачи: создайте классы для описания автомобильного парка прокатной компании. Необходимо создать класс, который описывает один автомобиль:

  • Марка автомобиля. Строка, например Honda.
  • Модель автомобиля. Строка, например Civic.
  • Год выпуска. Целое число, например 1998
  • Средний расход бензина на 100 километров. Вещественное число, например 12,5.

Также необходимо создать класс парк, который позволяет описывать группу автомобилей. Данный класс должен иметь следующие методы:

  • Добавить автомобиль в список автомобилей.
  • Подсчитать средний расход бензина для всего автомобильного парка.
  • Найти количество автомобилей определённой марки.
  • Найти количество автомобилей определённой модели.
  • Найти средний расход бензина для каждой марки автомобильного парка.

Предлагаемый способ решения:

  • Создайте каталог practice-two и перейдите в него.
  • Создайте пустые файлы main.rb, auto.rb, fleet.rb.
  • В файле auto.rb создайте класс Auto, у которого:
    • Опишите метод-инициализации, который принимает марку, модель, год выпуска и средний расход автомобиля и сохраняет их в переменных экземпляра.
    • Опишите атрибуты для получения значений переменных экземпляра. Например brand, model, manifacture_year и gasoline_consumption.
    • Реализуйте метод to_s, который будет преобразовывать данные в формат, понятный для человека.
  • Подключите файл auto к файлу main с помощью метода require_relative. Создайте несколько объектов класса Auto, желательно порядка 10 штук, которые бы описывали различные автомобили. Проверьте, что инициализатор и метод to_s работают корректно.
  • В файле fleet.rb создайте класс Fleet, у которого:
    • Инициализатор не принимает никаких аргументов, но инициализирует переменную экземпляра @cars с пустым массивом.
    • Метод add принимает объекты типа Car, которые добавляются в конец массива.
    • Метод average_consumption подсчитывает средний расход бензина у всех известных автомобилей и возвращает полученное число.
    • Метод number_by_brand принимает в качестве аргумента бренд автомобиля по которому происходит поиск подходящих объектов. Метод возвращает количество найденных автомобилей.
    • Метод number_by_model принимает в качестве аргумента модель автомобиля по которому происходит поиск подходящих объектов. Метод возвращает количество найденных автомобилей.
    • Метод consumption_by_brand принимает в качестве аргумента бренд автомобиля по которому происходит поиск подходящих объектов. Метод возвращает среднее потребление бензина для найденных объектов.
  • Подключите файл fleet к файлу main с помощью метода require_relative. Создайте объект класса Fleet и добавьте к нему ссылки на ранее созданные объекты-автомобили с помощью метода add. Проверьте, что созданные методы корректно работают.