Estacionamiento
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 55 de 57.
Desafío
DifícilConstruye un garaje. Vehicle almacena una plate; sus subclases definen size y hourly_rate: Motorbike tiene tamaño 1 (pequeño) a 1 por hora, Car tiene tamaño 2 (mediano) a 3, y Van tiene tamaño 3 (grande) a 5. La constante SIZES del garaje es %w[small medium large]. Garage.new(small, medium, large) recibe el número de plazas de cada tamaño. park(vehicle) coloca un vehículo en una plaza libre de su propio tamaño o, si no hay ninguna libre, de la siguiente categoría de mayor tamaño, y devuelve parked AB12 in medium o full for AB12. leave(plate, hours) libera la plaza y devuelve AB12 paid 9 (la tarifa multiplicada por las horas, con un mínimo de 1 hora), o no vehicle AB12. status devuelve free: small 1, medium 0, large 2.
El código proporcionado lee las plazas como small,medium,large, después los comandos park car AB12, leave AB12 3 o status, e imprime cada respuesta.
Tu código debe estar en vehicle.rb, motorbike.rb, car.rb, van.rb y garage.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# Código de entrada/salida suministrado: déjalo tal como está
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
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de Ruby online