Scopri la programmazione orientata agli oggetti (OOP) insieme agli oggetti di R e alle diverse classi come S3 e S4, come costruirle, creare funzioni generiche con esempi e molto altro.
La programmazione orientata agli oggetti (OOP) è un paradigma di programmazione in cui si progetta il software attorno a dati o oggetti piuttosto che alle funzioni. Un metodo non è altro che una funzione, vista nel contesto OOP. È orientata agli oggetti perché tutta l’elaborazione ruota attorno a oggetti e campi. Ogni oggetto ha attributi e comportamenti diversi.
Nella programmazione orientata agli oggetti, l’intero programma può essere suddiviso in diverse classi per capire più rapidamente come viene eseguito. R è un linguaggio di programmazione funzionale, e l’OOP aiuta a gestire problemi in sistemi di grandi dimensioni. L’OOP viene spesso usata per gestire applicazioni GUI, soprattutto web application. La programmazione orientata agli oggetti è utile per costruire strumenti per l’analisi dei dati, ma non è l’ideale per l’analisi dei dati in sé.
Sistemi di OOP
Esistono principalmente due grandi sistemi di OOP, descritti di seguito:
Classi S3: permettono di fare l’overload delle funzioni.
Classi S4: permettono di limitare i dati, dato che il debug del programma è piuttosto complesso
Nota: Queste classi verranno trattate in dettaglio nella sezione successiva.
Oggetti in R
Gli oggetti sono istanze della classe. Inoltre, in R tutto è un oggetto; per saperne di più consulta I tipi di dati in R. Possono anche avere attributi come class, attributes, dimnnames, names, ecc.
Per esempio, agli oggetti si assegna un valore usando <-, considera il seguente pezzo di codice in cui “a1” e “a2” sono variabili a cui è assegnato un valore numerico.
a1 <- 10
a2 <- 20
A un oggetto può essere assegnato un insieme di numeri: “a3” è l’oggetto che contiene un vettore di numeri diversi.
a3 <- c(10,20,30)
Qui c inserisce i numeri 10, 20, 30 in un vettore.
Prendiamo un esempio reale come uno studente, che ha attributi come nome, età, classe e genere; l’insegnante ha nome, età e genere.
Nel codice precedente puoi vedere un esempio in cui ci sono diversi tipi di oggetti. Gli oggetti “student” e “teacher”, detti anche variabili, contengono tipi “character” e “double”.
Classi in R
La classe è il progetto che aiuta a creare un oggetto e contiene le sue variabili membro insieme agli attributi.
Come discusso in precedenza, in R ci sono due classi: S3 e S4.
Classe S3
Queste classi aiutano a fare l’overload delle funzioni suddividendole in generiche e metodi.
funzioni = generiche + metodi
S3 è molto diversa da altri linguaggi di programmazione come C#, Java, ecc. Poiché è molto semplice da implementare, usa solo il primo argomento per il dispatch. Per questo motivo non richiede troppe conoscenze dal punto di vista di un programmatore.
S3 funziona definendo una rigorosa convenzione di denominazione del tipo generico.punto.classe.
generic.class
Gli argomenti dei metodi dovrebbero contenere gli argomenti della generica e il metodo dovrebbe includere un ...arg.
Costruzione ed esempio di classe S3
Nel seguente esempio vedrai come costruire una classe S3, che mostra la creazione della lista in cui i componenti vengono passati insieme al nome di classe appropriato, e infine viene stampato il risultato.
Nell’esempio seguente “studentBio” contiene una lista in cui i componenti sono passati come lista: “student_name”, “student_age” e “student_contact”. La classe si chiama “Student Info” e “studentBio” è la nuova classe creata, i cui valori sono mostrati sotto.
Qui sotto implementerai la tua funzione generica usando il seguente codice.
Il codice seguente mostra la funzione generica chiamata “contact”, a cui viene passato l’oggetto. Inoltre, “UseMethod” viene usato con la funzione generica “contact”, dove avviene il “dispatching” del metodo, cioè il processo in cui il risultato varia in base agli argomenti passati.
Creiamo un metodo per la classe specifica che hai creato prima, chiamata “StudentInfo”. Si usa il metodo “contact” seguito dalla notazione con il punto insieme alla classe “StudentInfo”, e il corpo della funzione accede all’attributo “studentContact” usando “$”.
Il codice sopra usa object$studentContact, dove l’oggetto passato come argomento alla funzione, insieme a “$”, permette di accedere all’attributo “studentContact”, producendo il seguente output.
Your contact is London
Classe S4
La classe S4 è più rigorosa, convenzionale e strettamente legata ai concetti orientati agli oggetti. Le classi sono rappresentate dalle definizioni formali delle classi S4. Più nello specifico, S4 ha funzioni setter e getter per metodi e generiche. Rispetto alla classe S3, S4 consente di gestire il multiple dispatch.
Vediamo le classi di R discusse sopra creandole e commentandole con un esempio.
Una classe S4 è definita usando la funzione setClass.
setClass()
Costruzione ed esempio di classe S4
Come accennato, la classe S4 è definita dal metodo setClass(). Userai il metodo setClass() per creare e definire la classe S4. Useremo una subroutine per verificare che i dati siano coerenti (validazione) e imposteremo anche i valori predefiniti (il paradigma).
Di seguito trovi il codice per definire la classe e i suoi slot:
Di seguito si definisce una classe, detta anche “prototype”, in cui gli slot sono definiti: il nome della classe è “employee”, name è un character, id è numeric e contact è un character.
Un oggetto di classe "employee"
Slot "name":
[1] "Steven"
Slot "id":
[1] 1002
Slot "contact":
[1] "West Avenue"
Un oggetto di classe "employee"
Slot "name":
"Steven"
Slot "id":
1002
Slot "contact":
"West Avenue"
L’output sopra mostra che l’oggetto creato è di classe “employee” e lo slot “name” vale “Steven”, lo slot “id” ha valore 1002 e lo slot “contact” ha valore “West Avenue”.
Funzioni e comandi
Per verificare se un oggetto è un oggetto S4 o meno si possono usare i due comandi seguenti:
Il comando “is.object(obj)” verifica se una variabile o istanza si riferisce o meno a un oggetto.
is.object(obj)
TRUE
Il codice sopra restituisce il seguente output:
TRUE
Il comando “is.S4(obj)” verifica se una variabile o istanza è un oggetto S4 oppure no.
isS4(obj)
TRUE
Il codice sopra restituisce il seguente output:
TRUE
Accesso e modifica del valore degli slot
Accedere agli slot
Gli slot possono essere accessi usando “@” invece di “$”.
Si usa “obj@name”, cioè il nome dell’oggetto insieme al nome dello slot, per accedere al nome “Steven”, e in modo analogo “obj@id”.
obj@name
obj@id
‘Steven’
1002
Il codice sopra dà il seguente output:
'Steven'
1002
Modificare gli slot
Modifichiamo il valore di uno slot usando semplicemente l’operatore di assegnazione (“<-”), assegnando a “obj@contact” un nuovo valore: “North Avenue”.
obj@contact <- "North Avenue"
obj
Un oggetto di classe "employee"
Slot "name":
[1] "Steven"
Slot "id":
[1] 1002
Slot "contact":
[1] "North Avenue"
Il codice sopra dà il seguente output:
Un oggetto di classe "employee"
Slot "name":
"Steven"
Slot "id":
1002
Slot "contact":
"North Avenue"
L’output mostra che lo slot “contact” ha cambiato valore, in precedenza “West Avenue”, ora “North Avenue”.
In alternativa, c’è l’opzione di usare “slot()” per cambiare il valore.
“slot(obj, "id")” indica che il valore dello slot “id” deve essere cambiato assegnando 1004, e il risultato viene stampato con “obj”.
slot(obj,"id") <- 1004
obj
Un oggetto di classe "employee"
Slot "name":
[1] "Steven"
Slot "id":
[1] 1004
Slot "contact":
[1] "North Avenue"
Un oggetto di classe "employee"
Slot "name":
"Steven"
Slot "id":
1004
Slot "contact":
"North Avenue"
L’output mostra che lo slot “id” ha cambiato valore, da 1002 a 1004.
Creare la tua funzione generica in S4
Creiamo una funzione che aiuti a stampare l’output secondo le nostre esigenze, usando “setMethod()” e la funzione generica “show()”. Inoltre, il valore di tutti gli slot viene accesso con “@” e i relativi nomi vengono stampati. Infine, l’output è ottenuto con “obj”.
L’output sopra mostra che i risultati sono stampati sotto forma di nomi degli slot insieme ai rispettivi valori.
Congratulazioni
Congratulazioni, sei arrivato alla fine di questo tutorial!
In questo tutorial hai imparato la programmazione orientata agli oggetti (OOP) insieme agli oggetti di R, le diverse classi come S3 e S4, come costruirle, come creare funzioni generiche con esempi e molto altro.
Se vuoi approfondire R, dai un’occhiata ai corsi di DataCamp:
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.