Metodi show
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 25 di 57.
Quando viene stampato un oggetto S4, R chiama la funzione show(). Senza un metodo per la classe, elenca ogni slot: è corretto, ma prolisso:
setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
pOutput:
An object of class "Point"
Slot "x":
[1] 1
Slot "y":
[1] 2setMethod("show", "Point", function(object) ...) assegna alla classe un proprio metodo di stampa. Il metodo stampa con cat() e viene usato sia quando un oggetto viene stampato al livello superiore, sia da 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)Output:
Point(1, 2)
Point(1, 2)Uno slot può contenere un altro oggetto S4: dichiara il suo tipo usando il nome della classe. Il metodo show() esterno può stampare l'oggetto interno chiamando show() su di esso:
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))Output:
line (0, 0) -> (3, 4)Una classe virtuale, dichiarata con representation("VIRTUAL"), non può essere creata con new(). Esiste per fungere da genitore comune per altre classi, su cui si basa il capitolo sull'ereditarietà S4. isVirtualClass() distingue i due tipi:
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")Output:
TRUE FALSE
cannot create a Shape Sfida
FacilePunti e segmenti sono due classi S4 in due file. Le classi sono dichiarate. Aggiungi i loro metodi show():
- In
Point.R: un punto viene stampato comePoint(1, 2)seguito da una nuova riga. - In
Segment.R: un segmento viene stampato comeSegment Point(1, 2) to Point(4, 6), length 5seguito da una nuova riga, con la lunghezza arrotondata a due decimali. Crea tu il testo del punto oppure usa una funzione di supporto; il metodo del punto stampa una propria nuova riga, quindi non chiamarlo nel mezzo della riga del segmento.
Il codice fornito legge le righe 1,2 4,6, stampa il primo punto e poi il segmento, entrambi tramite i rispettivi metodi show().
Il tuo codice va in Point.R e Segment.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Point.R")
source("Segment.R")
# Código de entrada/salida proporcionado: déjalo tal como está
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))
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Nozioni di base su S3
Lavorare con i fileListe con una classeFunzioni costruttriciMetodi di stampa e formattazioneValidatori e funzioni di supportoRipasso - Temperature4Incapsulamento in R
Chiusure come oggettiAmbienti come oggettiFunzioni di accessoProteggere lo statoRiepilogo - Parcometro2Generics e metodi S3
Generics e UseMethodMetodi predefinitiMetodi per i generics di baseNozioni di base su NextMethodRiepilogo - Aree delle forme5Classi S4
Definire le classi S4Slot e accessoControlli di validitàMetodi showRiepilogo - Catalogo prodotti8Classi di riferimento
Definizione delle classi di riferimentoMetodi e aggiornamenti dei campiSemantica della copiaEreditarietà e callSuperRiepilogo - coda di attività11Progetto: Gestione della biblioteca
Libri e iscrittiPrestito dei libriEsercitati da solo: Compilatore R online