Repaso: áreas de figuras
Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 11 de 57.
Desafío
IntermedioConstruye una pequeña biblioteca de formas en cuatro archivos. Los constructores ya están proporcionados.
Shape.R: los genéricosarea(shape, ...),perimeter(shape, ...)ydescribe(shape, ...). Los métodos predeterminadosarea()yperimeter()se detienen conunknown shape: hexagon(usacall. = FALSE). Eldescribe()predeterminado devuelvecircle: area 3.14, perimeter 6.28, construido a partir de la primera clase de la forma y de los dos genéricos, con dos decimales.Circle.R,Rectangle.R,Triangle.R: los métodosareayperimeterde cada forma. Un triángulo tiene los ladosa,b,c; su área essqrt(s * (s - a) * (s - b) * (s - c)), dondeses la mitad del perímetro.
El código proporcionado lee líneas circle 1, rectangle 2 3, triangle 3 4 5 o cualquier otro nombre, imprime describe() o error: y el mensaje, y finalmente el área total.
Tu código va en Shape.R, Circle.R, Rectangle.R y Triangle.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
source("Shape.R")
source("Circle.R")
source("Rectangle.R")
source("Triangle.R")
# Código de entrada/salida suministrado: déjalo tal como está
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 = "")
Todas las lecciones de Programación orientada a objetos
1Fundamentos de S3
Trabajar con archivosListas con una claseFunciones constructorasMétodos de impresión y formatoValidadores y auxiliaresRepaso: temperaturas4Encapsulación en R
Cierres como objetosEntornos como objetosFunciones de accesoProtección del estadoRepaso: parquímetro2S3 Genéricos y métodos
Genéricos y UseMethodMétodos predeterminadosMétodos para genéricos baseFundamentos de NextMethodRepaso: áreas de figuras5Clases S4
Definición de clases S4Slots y accesoComprobaciones de validezMétodos showRepaso - Catálogo de productos8Clases de referencia
Definición de clases de referenciaMétodos y actualizaciones de camposSemántica de copiaHerencia y callSuperRepaso: cola de tareas11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de R online