Parkhaus
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 55 von 57.
Aufgabe
SchwerBaue ein Parkhaus. Vehicle speichert ein plate; seine Unterklassen definieren size und hourly_rate: Motorbike hat die Größe 1 (klein) zu 1 pro Stunde, Car die Größe 2 (mittel) zu 3 und Van die Größe 3 (groß) zu 5. Die Konstante SIZES des Parkhauses ist %w[small medium large]. Garage.new(small, medium, large) nimmt die Anzahl der Stellplätze pro Größe entgegen. park(vehicle) stellt ein Fahrzeug auf einen freien Stellplatz seiner eigenen Größe oder, falls keiner frei ist, auf einen der nächstgrößeren Größe und gibt parked AB12 in medium oder full for AB12 zurück. leave(plate, hours) gibt den Stellplatz frei und gibt AB12 paid 9 zurück (der Tarif multipliziert mit der Anzahl der Stunden, mindestens 1 Stunde) oder no vehicle AB12. status gibt free: small 1, medium 0, large 2 zurück.
Der bereitgestellte Code liest die Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12, leave AB12 3 oder status, und gibt jede Antwort aus.
Dein Code gehört in vehicle.rb, motorbike.rb, car.rb, van.rb und garage.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
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
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler