Создание собственных классов
Целью данной практики является закрепление знаний об описании классов и их атрибутов.
Задача №1
Постановка задачи: создайте класс, который может описывать точку в комплексном пространстве, который позволяет:
- описывать точку двумя вещественными числами;
- позволять получать значения реальной и мнимой частей;
- позволять складывать два объекта комплексных числа, в результате чего появляется третий объект, содержащий в себе сумму двух предыдущих;
- дополнительно позволять выполнять другие математические операции: умножение, вычитание, деление.
Предлагаемый способ решения:
- Создайте каталог
practice-oneи перейдите в него. - Создайте пустой файл
my_complex.rb. - В файле
my_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, что данный метод функционирует корректно. Для этих целей выполните сложение двух созданных ранее объектов, результат сложения выведите на стандартную консоль. - Если у вас есть время, то решите задачу целиком: добавьте методы
multiply,sub,divide.
Задача №2
Постановка задачи: создайте классы для описания автомобильного парка прокатной компании. Необходимо создать класс, который описывает один автомобиль:
- Марка автомобиля. Строка, например Honda.
- Модель автомобиля. Строка, например Civic.
- Год выпуска. Целое число, например 1998
- Средний расход бензина на 100 километров. Вещественное число, например 12,5.
Также необходимо создать класс парк, который позволяет описывать группу автомобилей. Данный класс должен иметь следующие методы:
- Добавить автомобиль в список автомобилей.
- Считать список автомобилей из JSON-документа.
- Подсчитать средний расход бензина для всего автомобильного парка.
- Найти количество автомобилей определённой марки.
- Найти количество автомобилей определённой модели.
- Найти средний расход бензина для каждой марки автомобильного парка.
Для наполнения данными рекомендуется использовать JSON-документ cars-list.json.
Предлагаемый способ решения:
- Создайте каталог
practice-twoи перейдите в него. - Создайте пустые файлы
main.rb,auto.rb,fleet.rb. - В файле
auto.rbсоздайте классAuto, у которого:- Опишите метод-инициализации, который принимает марку, модель, год выпуска и средний расход автомобиля и сохраняет их в переменных экземпляра.
- Опишите атрибуты для получения значений переменных экземпляра. Например
brand,model,manifacture_yearиgasoline_consumption. - Реализуйте метод
to_s, который будет преобразовывать данные в формат, понятный для человека.
- Подключите файл
autoк файлуmainс помощью методаrequire_relative. Создайте несколько объектов классаAuto, которые описывают различные автомобили. Проверьте, что инициализатор и методto_sработают корректно. - В файле
fleet.rbсоздайте классFleet, у которого:- Инициализатор не принимает никаких аргументов, но инициализирует переменную экземпляра
@carsс пустым массивом. - Метод
addпринимает объекты типаCar, которые добавляются в конец массива. -
Метод
load_from_fileпринимает в качестве аргумента путь к JSON-документу. Данный метод должен добавлять в массив автомобилей все автомобили, описанные в JSON-документе.Для считывания JSON-документа вам потребуется сначала считать содержимое файла с помощью метода
File::read, а затем преобразовать считанную строку в объекты на языке Ruby с помощью библиотекиjsonи методаJSON::parseв частности.Простейший пример преобразования:
require 'json' json_data = File.read(file_name) ruby_objects = JSON.parse(json_data) - Метод
average_consumptionподсчитывает средний расход бензина у всех известных автомобилей и возвращает полученное число. Нельзя печатать данные на стандартный поток вывода! - Метод
number_by_brandпринимает в качестве аргумента бренд автомобиля по которому происходит поиск подходящих объектов. Метод возвращает количество найденных автомобилей. Нельзя печатать данные на стандартный поток вывода! - Метод
number_by_modelпринимает в качестве аргумента модель автомобиля по которому происходит поиск подходящих объектов. Метод возвращает количество найденных автомобилей. Нельзя печатать данные на стандартный поток вывода! - Метод
consumption_by_brandпринимает в качестве аргумента бренд автомобиля по которому происходит поиск подходящих объектов. Метод возвращает среднее потребление бензина для найденных объектов. Нельзя печатать данные на стандартный поток вывода!
- Инициализатор не принимает никаких аргументов, но инициализирует переменную экземпляра
- Подключите файл
fleetк файлуmainс помощью методаrequire_relative.- Создайте объект класса
Fleetи добавьте к нему ссылки на ранее созданные объекты-автомобили с помощью методаadd. - Также добавьте все автомобили, описанные в файле с данными
cars-list.json. - Удостоверьтесь, что все реализованные методы работают корректно. Вызовите данный метод, результат вызова выводите с комментариями на стандартный поток вывода.
- Создайте объект класса