Revisão - Áreas de formas
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 11 de 57.
Desafio
MédioConstrua uma pequena biblioteca de formas em quatro arquivos. Os construtores são fornecidos.
Shape.R: os genéricosarea(shape, ...),perimeter(shape, ...)edescribe(shape, ...). Os métodos padrãoarea()eperimeter()interrompem a execução comunknown shape: hexagon(usecall. = FALSE). Odescribe()padrão retornacircle: area 3.14, perimeter 6.28, construído a partir da primeira classe da forma e dos dois genéricos, com duas casas decimais.Circle.R,Rectangle.R,Triangle.R: os métodosareaeperimeterde cada forma. Um triângulo tem os ladosa,b,c; sua área ésqrt(s * (s - a) * (s - b) * (s - c)), comsigual à metade do perímetro.
O código fornecido lê linhas como circle 1, rectangle 2 3, triangle 3 4 5 ou qualquer outro nome, imprime describe() ou error: e a mensagem e, por fim, a área total.
Seu código deve ficar em Shape.R, Circle.R, Rectangle.R e Triangle.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Shape.R")
source("Circle.R")
source("Rectangle.R")
source("Triangle.R")
# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de R online