Méthodes show
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 25 sur 57.
Lorsqu’un objet S4 est affiché, R appelle la fonction show(). Sans méthode pour la classe, il répertorie chaque slot, ce qui est correct mais long :
setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
pSortie :
An object of class "Point"
Slot "x":
[1] 1
Slot "y":
[1] 2setMethod("show", "Point", function(object) ...) donne à la classe son propre affichage. La méthode affiche avec cat(), et elle est utilisée à la fois lorsqu’un objet est affiché au niveau supérieur et par print() :
setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) {
cat("Point(", object@x, ", ", object@y, ")\n", sep = "")
})
p <- new("Point", x = 1, y = 2)
p
print(p)Sortie :
Point(1, 2)
Point(1, 2)Un slot peut contenir un autre objet S4 : déclarez son type comme nom de classe. La méthode show() externe peut afficher l’objet interne en appelant show() sur celui-ci :
setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) cat("(", object@x, ", ", object@y, ")", sep = ""))
setClass("Line", slots = c(from = "Point", to = "Point"))
setMethod("show", "Line", function(object) {
cat("line ")
show(object@from)
cat(" -> ")
show(object@to)
cat("\n")
})
new("Line", from = new("Point", x = 0, y = 0), to = new("Point", x = 3, y = 4))Sortie :
line (0, 0) -> (3, 4)Une classe virtuelle, déclarée avec representation("VIRTUAL"), ne peut pas être créée avec new(). Elle sert de parent commun à d’autres classes, ce sur quoi s’appuie le chapitre sur l’héritage S4. isVirtualClass() permet de distinguer les deux types :
setClass("Shape", representation("VIRTUAL"))
setClass("Point", slots = c(x = "numeric"))
cat(isVirtualClass("Shape"), isVirtualClass("Point"), "\n")
msg <- tryCatch(new("Shape"), error = function(e) "cannot create a Shape")
cat(msg, "\n")Sortie :
TRUE FALSE
cannot create a Shape Défi
FacileLes points et les segments sont deux classes S4 réparties dans deux fichiers. Les classes sont déclarées. Ajoutez leurs méthodes show() :
- Dans
Point.R: un point s’affiche sous la formePoint(1, 2), suivi d’un saut de ligne. - Dans
Segment.R: un segment s’affiche sous la formeSegment Point(1, 2) to Point(4, 6), length 5, suivi d’un saut de ligne, avec la longueur arrondie à deux décimales. Construisez vous-même le texte du point ou utilisez un assistant ; la méthode du point affiche son propre saut de ligne, ne l’appelez donc pas au milieu de la ligne du segment.
Le code fourni lit les lignes 1,2 4,6, affiche le premier point, puis le segment, tous deux par l’intermédiaire de leurs méthodes show().
Votre code doit se trouver dans Point.R et Segment.R. main.R contient le code fourni pour les entrées et sorties et ne peut pas être modifié.
Essayez vous-même
source("Point.R")
source("Segment.R")
# Code d'entrée/sortie fourni : le garder tel quel
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
n <- as.numeric(strsplit(line, "[ ,]")[[1]])
a <- new("Point", x = n[1], y = n[2])
b <- new("Point", x = n[3], y = n[4])
print(a)
print(new("Segment", from = a, to = b))
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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