Rückblick – Zoowärter
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 36 von 57.
Aufgabe
MittelErstelle über fünf Dateien einen Zoo aus S4-Klassen.
Animal.R: die virtuelle KlasseAnimalmit den Slotsnameundkg, den Genericfood_kg(a)sowie eineshow()-Methode fürAnimal, dieLeo the lion eats 9.5 kgausgibt (Klassenname in Kleinbuchstaben, Futter mit einer Dezimalstelle) und eine neue Zeile ausgibt.Mammal.R: die virtuelle KlasseMammal, dieAnimalenthält.Lion.RundElephant.R: Säugetiere, die 5 % beziehungsweise 4 % ihres Gewichts fressen.Parrot.R: ein Tier (kein Säugetier) mit dem zusätzlichen Slotword, das 0.1 kg frisst; seinshow()gibt die Tierzeile und anschließendPolly says hellomitcallNextMethod()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
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr7S4-Vererbung
Erweitern mit containscallNextMethodVirtuelle KlassenTypen mit is() prüfenRückblick – Zoowärter2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler