Parking wielopoziomowy
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 55 z 57.
Wyzwanie
TrudnyZbuduj garaż. Vehicle.R deklaruje wirtualną klasę S4 Vehicle (slot plate), generyki size_rank(v) i rate(v) oraz nazwy SIZES: small, medium, large dla rang 1, 2 i 3.
- W plikach
Motorbike.R,Car.RiVan.Rdeklarowane są klasy; dodaj ich metody: motocykl ma rangę 1 i płaci 1 za godzinę, samochód ma rangę 2 i płaci 3 za godzinę, a van ma rangę 3 i płaci 5 za godzinę. - W pliku
Garage.Ruzupełnij klasę referencyjnąGarage. Jej polefreeprzechowuje liczbę wolnych miejsc dla każdej rangi, aparkedjest listą uporządkowaną według tablic rejestracyjnych.park(v)zajmuje wolne miejsce o randze pojazdu lub, jeśli nie ma wolnego miejsca, miejsce o kolejnej wyższej randze, i zwracaparked AB12 in medium,full for AB12lubAB12 is already parked.leave(plate, hours)zwalnia miejsce i zwracaAB12 paid 9(stawka pomnożona przez liczbę godzin, co najmniej za 1 godzinę) lubno vehicle AB12.status()zwracafree: small 1, medium 0, large 2; parked: 1.
Dostarczony kod odczytuje wolne miejsca w postaci small,medium,large, a następnie polecenia park car AB12 (bike, car lub van), leave AB12 3 lub status i wypisuje każdą odpowiedź.
Twój kod umieść w plikach Vehicle.R, Motorbike.R, Car.R, Van.R i Garage.R. main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
reply <- switch(p[1],
park = garage$park(switch(p[2],
bike = new("Motorbike", plate = p[3]),
car = new("Car", plate = p[3]),
van = new("Van", plate = p[3]))),
leave = garage$leave(p[2], as.numeric(p[3])),
status = garage$status())
cat(reply, "\n", sep = "")
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy S3
Praca z plikamiListy z klasąFunkcje konstruktoraMetody print i formatWalidatory i funkcje pomocniczePowtórzenie — temperatury4Enkapsulacja w R
Domknięcia jako obiektyŚrodowiska jako obiektyFunkcje dostępoweOchrona stanuPodsumowanie – parkometr2Generics i metody S3
Generics i UseMethodMetody domyślneMetody dla podstawowych genericsPodstawy NextMethodPowtórzenie — pola figur5Klasy S4
Definiowanie klas S4Sloty i dostępSprawdzanie poprawnościMetody wyświetlaniaPodsumowanie – katalog produktów8Klasy referencyjne
Definiowanie klas referencyjnychMetody i aktualizacja pólSemantyka kopiowaniaDziedziczenie i callSuperPodsumowanie – kolejka zadań11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Dziedziczenie S3
Wektory klasKolejność wyszukiwania metodRozszerzanie za pomocą NextMethodSprawdzanie za pomocą inherits()Powtórzenie — lista płac pracownikówPoćwicz samodzielnie: Kompilator R online