סיכום – שומר גן החיות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 36 מתוך 57.
אתגר
בינוניבנה גן חיות של מחלקות S4 בחמישה קבצים.
Animal.R: המחלקה הווירטואליתAnimalעם המשבצותnameו-kg, הגנריתfood_kg(a), ומתודתshow()עבורAnimalשמדפיסהLeo the lion eats 9.5 kg(שם המחלקה באותיות קטנות, וכמות המזון עם ספרה אחת אחרי הנקודה) ושורה חדשה.Mammal.R: המחלקה הווירטואליתMammal, שמכילה אתAnimal.Lion.Rו-Elephant.R: יונקים שאוכלים 5% ו-4% ממשקלם.Parrot.R: בעל חיים (לא יונק) עם המשבצת הנוספתword, שאוכל 0.1 ק״ג; מתודתshow()שלו מדפיסה את שורת בעל החיים ואז אתPolly says helloבאמצעותcallNextMethod().
הקוד שסופק קורא שורות lion Leo 190, elephant Ella 4000 או parrot Polly 1 hello, מדפיס כל בעל חיים, את כמות המזון הכוללת, את מספר היונקים והאם Animal היא וירטואלית.
הקוד שלך צריך להיכתב בקבצים Animal.R, Mammal.R, Lion.R, Elephant.R ו-Parrot.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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 = "")
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות S3
עבודה עם קבציםרשימות עם מחלקהפונקציות בנאימתודות print ו-formatמאמתים ופונקציות עזרחזרה – טמפרטורות7ירושה ב-S4
הרחבה באמצעות containscallNextMethodמחלקות וירטואליותבדיקת טיפוסים באמצעות is()סיכום – שומר גן החיותתרגלו בעצמכם: קומפיילר R אונליין