Ô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.
Thử thách
Trung bìnhXây dựng một vườn thú gồm các lớp S4 trong năm tệp.
Animal.R: lớp ảoAnimalvới các thuộc tínhnamevàkg, hàm genericfood_kg(a)và phương thứcshow()choAnimal, in raLeo 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 ảoMammal, kế thừaAnimal.Lion.Rvà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ínhword, ăn 0.1 kg; phương thứcshow()in dòng thông tin về con vật rồi inPolly says hellobằngcallNextMethod().
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
1Kiến thức cơ bản về S3
Làm việc với tệpDanh sách với một lớpHàm khởi tạoPhương thức in ra và định dạngTrình xác thực và hàm hỗ trợÔn tập: nhiệt độ4Tính đóng gói trong R
Closure dưới dạng đối tượngMôi trường dưới dạng đối tượngHàm truy cậpBảo vệ trạng tháiÔn tập: đồng hồ tính phí đỗ xe7S4 kế thừa
Mở rộng bằng containscallNextMethodLớp ảoKiểm tra kiểu bằng is()Ôn tập: người trông sở thú2S3, hàm generic và phương thức
Hàm generic và UseMethodPhương thức mặc địnhPhương thức cho hàm generic cơ sởCơ bản về NextMethodÔn tập: diện tích hình5Các lớp S4
Định nghĩa lớp S4Slot và quyền truy cậpKiểm tra tính hợp lệPhương thức showÔn tập: Danh mục sản phẩmTự luyện tập: Trình biên dịch R online