Récapitulatif - Aires des formes
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 11 sur 57.
Défi
MoyenConstruisez une petite bibliothèque de formes répartie sur quatre fichiers. Les constructeurs sont fournis.
Shape.R: les génériquesarea(shape, ...),perimeter(shape, ...)etdescribe(shape, ...). Les méthodes par défautarea()etperimeter()s'arrêtent avecunknown shape: hexagon(utilisezcall. = FALSE). La méthode par défautdescribe()renvoiecircle: area 3.14, perimeter 6.28, construit à partir de la première classe de la forme et des deux génériques, avec deux décimales.Circle.R,Rectangle.R,Triangle.R: les méthodesareaetperimeterde chaque forme. Un triangle possède les côtésa,b,c; son aire estsqrt(s * (s - a) * (s - b) * (s - c)), oùsest la moitié du périmètre.
Le code fourni lit les lignes circle 1, rectangle 2 3, triangle 3 4 5 ou tout autre nom, affiche describe() ou error: suivi du message, puis affiche finalement l'aire totale.
Votre code doit être placé dans Shape.R, Circle.R, Rectangle.R et Triangle.R. main.R contient le code fourni d'entrée/sortie et ne peut pas être modifié.
Essayez vous-même
source("Shape.R")
source("Circle.R")
source("Rectangle.R")
source("Triangle.R")
# Code d'entrée/sortie fourni : le laisser tel quel
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 = "")
Toutes les leçons de Programmation orientée objet
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnelEntraînez-vous par vous-même : Compilateur R en ligne