Parking
Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 55 z 57.
Wyzwanie
TrudnyZbuduj parking. Vehicle przechowuje plate; jego podklasy definiują size i hourly_rate: Motorbike ma rozmiar 1 (mały) i kosztuje 1 za godzinę, Car ma rozmiar 2 (średni) i kosztuje 3, a Van ma rozmiar 3 (duży) i kosztuje 5. Stała parkingu SIZES to %w[small medium large]. Garage.new(small, medium, large) przyjmuje liczbę miejsc parkingowych każdego rozmiaru. park(vehicle) umieszcza pojazd na wolnym miejscu o jego rozmiarze lub, jeśli takiego nie ma, na miejscu o następnym większym rozmiarze, i zwraca parked AB12 in medium albo full for AB12. leave(plate, hours) zwalnia miejsce i zwraca AB12 paid 9 (stawkę pomnożoną przez liczbę godzin, co najmniej 1 godzinę) albo no vehicle AB12. status zwraca free: small 1, medium 0, large 2.
Dostarczony kod odczytuje liczbę miejsc jako small,medium,large, a następnie polecenia park car AB12, leave AB12 3 lub status, i wyświetla odpowiedź na każde z nich.
Twój kod umieść w plikach vehicle.rb, motorbike.rb, car.rb, van.rb i garage.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasZmienne instancjiMetody i selfto_s i inspectPowtórzenie – karta biblioteczna4Hermetyzacja
Metody prywatneMetody chronionePrywatne setteryOchrona stanuPowtórzenie – automat vendingowy7Polimorfizm i typowanie kacze
PolimorfizmTypowanie kaczeMetody abstrakcyjnecase i klasyPowtórzenie – metody płatności10Wzorce projektowe, część 2
Delegowanie z ForwardableWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Metody dostępowe i self
Gettery i setteryWłasne setteryself w metodachTożsamość i równośćPowtórzenie – lista kontaktów5Dziedziczenie
PodklasyNadpisywanie metodWywoływanie superis_a? i przodkowiePowtórka – lista płac pracowników8Metody specjalne
Równość i hashMetody operatorówIndeksowanie i dodawanieWłasne kolekcjePowtórka – ułamki11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Kompilator Ruby online