Ôn tập: diện tích hình
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 11 trên 57.
Thử thách
Trung bìnhXây dựng một thư viện hình dạng nhỏ gồm bốn tệp. Các hàm khởi tạo (constructor) đã được cung cấp.
Shape.R: các hàm genericarea(shape, ...),perimeter(shape, ...)vàdescribe(shape, ...). Các phương thức mặc địnharea()vàperimeter()dừng lại vớiunknown shape: hexagon(dùngcall. = FALSE).describe()mặc định trả vềcircle: area 3.14, perimeter 6.28, được tạo từ lớp đầu tiên của hình dạng và hai hàm generic, với hai chữ số thập phân.Circle.R,Rectangle.R,Triangle.R: các phương thứcareavàperimetercủa từng hình dạng. Hình tam giác có các cạnha,b,c; diện tích của nó làsqrt(s * (s - a) * (s - b) * (s - c)), trong đósbằng một nửa chu vi.
Code được cung cấp đọc các dòng circle 1, rectangle 2 3, triangle 3 4 5 hoặc bất kỳ tên nào khác, in ra describe() hoặc error: cùng với thông báo lỗi, rồi in ra tổng diện tích.
Code của bạn nằm trong các tệp Shape.R, Circle.R, Rectangle.R và Triangle.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("Shape.R")
source("Circle.R")
source("Rectangle.R")
source("Triangle.R")
# Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
total <- 0
for (line in input) {
p <- strsplit(line, " ")[[1]]
n <- as.numeric(p[-1])
s <- switch(p[1],
circle = new_circle(n[1]),
rectangle = new_rectangle(n[1], n[2]),
triangle = new_triangle(n[1], n[2], n[3]),
structure(list(), class = p[1]))
out <- tryCatch({
total <- total + area(s)
describe(s)
}, error = function(e) paste("error:", conditionMessage(e)))
cat(out, "\n", sep = "")
}
cat(sprintf("total area: %.2f", total), "\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í đỗ xe2S3, 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