Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - حارس حديقة الحيوانات

جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 36 من 57.

challenge icon

التحدي

متوسط

أنشئ حديقة حيوانات من فئات 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 = "")

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم R عبر الإنترنت