Podsumowanie — opiekun zoo
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 36 z 57.
Wyzwanie
ŚredniZbuduj zoo z klas S4 w pięciu plikach.
Animal.R: wirtualna klasaAnimalz polaminameikg, funkcja generycznafood_kg(a)oraz metodashow()dlaAnimal, która wypisujeLeo the lion eats 9.5 kg(nazwę klasy małymi literami, ilość jedzenia z jednym miejscem po przecinku) i nową linię.Mammal.R: wirtualna klasaMammal, która zawieraAnimal.Lion.RiElephant.R: ssaki, które zjadają odpowiednio 5% i 4% swojej masy ciała.Parrot.R: zwierzę (nie ssak) z dodatkowym polemword, zjadające 0.1 kg; jego metodashow()wypisuje wiersz zwierzęcia, a następniePolly says helloza pomocącallNextMethod().
Dostarczony kod odczytuje wiersze lion Leo 190, elephant Ella 4000 lub parrot Polly 1 hello, wypisuje każde zwierzę, łączną ilość jedzenia, liczbę ssaków oraz informację, czy Animal jest klasą wirtualną.
Twój kod umieść w plikach Animal.R, Mammal.R, Lion.R, Elephant.R i Parrot.R. Plik main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
zoo <- list()
for (line in input) {
p <- strsplit(line, " ")[[1]]
kg <- as.numeric(p[3])
a <- switch(p[1],
lion = new("Lion", name = p[2], kg = kg),
elephant = new("Elephant", name = p[2], kg = kg),
parrot = new("Parrot", name = p[2], kg = kg, word = p[4]))
zoo[[length(zoo) + 1]] <- a
print(a)
}
cat(sprintf("food per day: %.1f kg", sum(vapply(zoo, food_kg, numeric(1)))), "\n", sep = "")
cat("mammals: ", sum(vapply(zoo, is, logical(1), "Mammal")), "\n", sep = "")
cat("Animal is virtual: ", isVirtualClass("Animal"), "\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 – parkometr7S4 Dziedziczenie
Rozszerzanie za pomocą containscallNextMethodKlasy wirtualneSprawdzanie typów za pomocą is()Podsumowanie — opiekun zoo2Generics 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