Парковочный гараж
Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 55 из 57.
Задание
СложноСоздайте гараж для парковки. Vehicle хранит plate; его подклассы определяют size и hourly_rate: Motorbike имеет размер 1 (маленький) и стоимость 1 в час, Car — размер 2 (средний) и стоимость 3, а Van — размер 3 (большой) и стоимость 5. Константа гаража SIZES равна %w[small medium large]. Garage.new(small, medium, large) принимает количество мест каждого размера. park(vehicle) помещает транспортное средство на свободное место его размера или, если свободных мест нет, на место следующего большего размера и возвращает parked AB12 in medium или full for AB12. leave(plate, hours) освобождает место и возвращает AB12 paid 9 (стоимость за час, умноженная на количество часов, но минимум за 1 час) или no vehicle AB12. status возвращает free: small 1, medium 0, large 2.
Предоставленный код считывает места в формате small,medium,large, затем команды park car AB12, leave AB12 3 или status и выводит каждый ответ.
Ваш код должен находиться в файлах vehicle.rb, motorbike.rb, car.rb, van.rb и garage.rb. В main.rb находится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# Предоставленный код ввода/вывода: оставьте его как есть
input = []
while (line = gets)
input << line.chomp
end
small, medium, large = input[0].split(",").map(&:to_i)
garage = Garage.new(small, medium, large)
kinds = { "bike" => Motorbike, "car" => Car, "van" => Van }
input.drop(1).each do |cmd|
parts = cmd.split
case parts[0]
when "park" then puts garage.park(kinds[parts[1]].new(parts[2]))
when "leave" then puts garage.leave(parts[1], parts[2].to_i)
else puts garage.status
end
end
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПеременные экземпляраМетоды и selfto_s и inspectПовторение — читательский билет4Инкапсуляция
Приватные методыЗащищённые методыПриватные сеттерыЗащита состоянияПовторение — торговый автомат7Полиморфизм и утиная типизация
ПолиморфизмУтиная типизацияАбстрактные методыcase и классыПовторение — способы оплаты10Шаблоны проектирования, часть 2
Делегирование с помощью ForwardableШаблон декоратораШаблон строителяШаблон состояния2Аксессоры и self
Чтение и записьПользовательские сеттерыself в методахИдентичность и равенствоПовторение — список контактов5Наследование
ПодклассыПереопределение методовВызов superis_a? и предкиПовторение — расчёт зарплаты сотрудников8Специальные методы
Равенство и хешированиеМетоды операторовИндексация и добавлениеПользовательские коллекцииПовторение — дроби11Проект: Управление библиотекой
Книги и читателиВыдача книг3Методы и переменные классов
Методы классовПеременные экземпляра классаКонстантыФабричные методыПовторение — коды купонов6Модули и примеси
Модули и includeРасширение объектовМодуль ComparableМодуль EnumerableПовторение — спортивная лига9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор Ruby