Parcheggio
Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 55 di 57.
Sfida
DifficileCostruisci un garage. Vehicle memorizza una plate; le sue sottoclassi definiscono size e hourly_rate: Motorbike ha dimensione 1 (piccola) al costo di 1 all’ora, Car dimensione 2 (media) al costo di 3 e Van dimensione 3 (grande) al costo di 5. La costante del garage SIZES è %w[small medium large]. Garage.new(small, medium, large) accetta il numero di posti per ogni dimensione. park(vehicle) parcheggia un veicolo in un posto libero della sua dimensione oppure, se non ce ne sono, in uno della dimensione immediatamente superiore, e restituisce parked AB12 in medium oppure full for AB12. leave(plate, hours) libera il posto e restituisce AB12 paid 9 (la tariffa moltiplicata per il numero di ore, almeno 1 ora) oppure no vehicle AB12. status restituisce free: small 1, medium 0, large 2.
Il codice fornito legge i posti nel formato small,medium,large, poi i comandi park car AB12, leave AB12 3 oppure status, e stampa ogni risposta.
Il tuo codice va inserito in vehicle.rb, motorbike.rb, car.rb, van.rb e garage.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# Codice di input/output fornito: lascialo così com'è
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
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiVariabili d'istanzaMetodi e selfto_s e inspectRipasso - Tessera della biblioteca4Incapsulamento
Metodi privatiMetodi protettiSetter privatiProteggere lo statoRiepilogo - Distributore automatico7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMetodi astratticase e classiRiepilogo - Metodi di pagamento10Pattern di progettazione Parte 2
Delegazione con ForwardablePattern DecoratorPattern BuilderPattern State2Metodi di accesso e self
Metodi di lettura e scritturaSetter personalizzatiself nei metodiIdentità e uguaglianzaRiepilogo - Elenco contatti5Ereditarietà
SottoclassiRidefinizione dei metodiChiamare superis_a? e antenatiRiepilogo - Paghe del personale8Metodi speciali
Uguaglianza e hashMetodi degli operatoriIndicizzazione e appendCollezioni personalizzateRiepilogo - Frazioni11Progetto: Gestione della biblioteca
Libri e iscrittiPrendere in prestito i libriEsercitati da solo: Compilatore Ruby online