Menu
CoddyTech

Ôn tập: người trông sở thú

Thuộc phần Lập trình hướng đối tượng trong hành trình R của Coddy. Bài học 36 trên 57.

challenge icon

Thử thách

Trung bình

Xây dựng một vườn thú gồm các lớp S4 trong năm tệp.

  • Animal.R: lớp ảo Animal với các thuộc tính name và kg, hàm generic food_kg(a) và phương thức show() cho Animal, in ra Leo the lion eats 9.5 kg (tên lớp viết thường, lượng thức ăn có một chữ số thập phân) rồi xuống dòng.
  • Mammal.R: lớp ảo Mammal, kế thừa Animal.
  • Lion.R và Elephant.R: các loài động vật có vú ăn lượng thức ăn bằng 5% và 4% trọng lượng của chúng.
  • Parrot.R: một loài động vật không phải động vật có vú, có thêm thuộc tính word, ăn 0.1 kg; phương thức show() in dòng thông tin về con vật rồi in Polly says hello bằng callNextMethod().

Code được cung cấp đọc các dòng lion Leo 190, elephant Ella 4000 hoặc parrot Polly 1 hello, in thông tin từng con vật, tổng lượng thức ăn, số lượng động vật có vú và việc Animal có phải là lớp ảo hay không.

Code của bạn nằm trong các tệp Animal.R, Mammal.R, Lion.R, Elephant.R và Parrot.R. main.R chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

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

# Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên
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 = "")

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch R online