Menu
Coddy logo textTech

Rückblick – Zoowärter

Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 36 von 57.

challenge icon

Aufgabe

Mittel

Erstelle über fünf Dateien einen Zoo aus S4-Klassen.

  • Animal.R: die virtuelle Klasse Animal mit den Slots name und kg, den Generic food_kg(a) sowie eine show()-Methode für Animal, die Leo the lion eats 9.5 kg ausgibt (Klassenname in Kleinbuchstaben, Futter mit einer Dezimalstelle) und eine neue Zeile ausgibt.
  • Mammal.R: die virtuelle Klasse Mammal, die Animal enthält.
  • Lion.R und Elephant.R: Säugetiere, die 5 % beziehungsweise 4 % ihres Gewichts fressen.
  • Parrot.R: ein Tier (kein Säugetier) mit dem zusätzlichen Slot word, das 0.1 kg frisst; sein show() gibt die Tierzeile und anschließend Polly says hello mit callNextMethod() aus.

Der bereitgestellte Code liest Zeilen wie lion Leo 190, elephant Ella 4000 oder parrot Polly 1 hello, gibt jedes Tier, die Gesamtfuttermenge, die Anzahl der Säugetiere und aus, ob Animal virtuell ist.

Dein Code gehört in Animal.R, Mammal.R, Lion.R, Elephant.R und Parrot.R. main.R enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")

# Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
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 = "")

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-R-Compiler