Pular para o conteúdo principal

Objetos e classes em R

Aprenda programação orientada a objetos (POO) no R, conheça objetos, classes como S3 e S4, como construí-las, criar funções genéricas com exemplos e muito mais.
Atualizado 17 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

Programação orientada a objetos (POO) é um paradigma de programação em que diferentes métodos são usados para projetar software em torno de dados ou objetos, em vez de apenas funções. Um método nada mais é do que uma função, falada no contexto de POO. Ela é orientada a objetos porque todo o processamento gira em torno dos objetos e de seus campos. Cada objeto tem atributos e comportamentos próprios.

Na programação orientada a objetos, todo o programa pode ser dividido em diferentes classes para facilitar o entendimento da execução. R é uma linguagem funcional, e a POO ajuda a gerenciar problemas de sistemas grandes. POO costuma ser usada para gerenciar aplicações com GUI, principalmente aplicações web. Programação orientada a objetos é ótima para construir ferramentas para análise de dados, mas não tão boa para a análise em si.

Sistemas de POO

Existem dois sistemas principais de POO no R, descritos abaixo:

  • Classes S3: permitem sobrecarregar funções.
  • Classes S4: permitem restringir os dados, sendo úteis quando é mais difícil depurar o programa.

Observação: essas classes serão detalhadas na próxima seção.

Objetos no R

Objetos são instâncias de classes. Aliás, tudo em R é um objeto; para saber mais, veja tipos de dados em R. Eles também podem ter atributos, como class, attributes, dimnames, names etc.

Por exemplo, objetos recebem um valor usando <-, considere o trecho a seguir, em que 'a1' e 'a2' são variáveis que recebem valores numéricos.

a1 <- 10
a2 <- 20

Um objeto pode receber um conjunto de números, como em 'a3', que contém um vetor com diferentes números.

a3 <- c(10,20,30)

Aqui, c reúne os números 10, 20 e 30 em um vetor.

Vamos a um exemplo do dia a dia: um aluno, com atributos nome, idade, série e gênero; e um professor, com nome, idade e gênero.

st_name <- "andrew"
st_age <- 16
st_class <- 10
st_gender <- "male"

t_name <- "angelina"
t_age <- 26
t_gender <- "female"

student <- c(st_name, st_age, st_class, st_gender)
teacher <- c(t_name, t_age, t_gender)


print(student)
print(teacher)
[1] "andrew" "16"     "10"     "male"  
[1] "angelina" "26"       "female"   

O código acima gera a seguinte saída:

"andrew" "16" "10" "male"  
"angelina" "26"  "female"

No exemplo, você vê diferentes tipos de objetos. Os objetos 'student' e 'teacher', também chamados de variáveis, contêm valores dos tipos 'character' e 'double'.

Domine suas habilidades em dados com o DataCamp

Mais de 10 milhões de pessoas aprendem Python, R, SQL e outras habilidades tecnológicas usando nossos cursos práticos elaborados por especialistas do setor.

Comece a Aprender
learner-on-couch@2x.jpg

Classe em R

Classe é o blueprint que ajuda a criar um objeto e define suas variáveis-membro e atributos.

Como vimos antes, há duas classes de POO em R: S3 e S4.

Classe S3

Essas classes permitem sobrecarregar funções dividindo-as em genéricas e métodos.

funções = genéricas + métodos

S3 é bem diferente de linguagens como C#, Java etc. Por ser muito simples de implementar, usa apenas o primeiro argumento para o despacho. Por isso, não exige tanto conhecimento do ponto de vista do programador.

S3 funciona definindo uma convenção rígida de nomes no formato generico.ponto.classe.

                             generic.class

Os argumentos dos métodos devem incluir os argumentos da genérica, e o método deve incluir ...arg.

Construindo uma classe S3 (com exemplo)

No exemplo a seguir, vamos construir uma classe S3 criando uma lista cujos componentes são passados com um nome de classe apropriado e, em seguida, imprimindo o resultado.

No exemplo, 'studentBio' é uma lista com os componentes 'student_name', 'student_age' e 'student_contact'. A classe recebe o nome 'Student Info', e 'studentBio' é a nova classe criada, cujos valores são exibidos abaixo.

studentBio <- list(studentName = "Harry Potter", studentAge = 19, studentContact="London")
class(studentBio) <- "StudentInfo"
studentBio
$studentName
[1] "Harry Potter"

$studentAge
[1] 19

$studentContact
[1] "London"

attr(,"class")
[1] "StudentInfo"

O código acima gera a saída a seguir:

$studentName
 "Harry Potter"

$studentAge
19

$studentContact
"London"

attr(,"class")
"StudentInfo"

Se você não está tão à vontade escrevendo funções em R, confira um tutorial sobre como usar funções em R.

Criando sua própria função genérica em S3

Vamos implementar abaixo uma função genérica usando o código a seguir.

O código abaixo define a função genérica 'contact', que recebe um objeto. 'UseMethod' é usado com a genérica 'contact' para fazer o "despacho" do método, ou seja, escolher o resultado com base nos argumentos passados.

contact <- function(object) {
UseMethod("contact")
}

Vamos criar um método para a classe que você criou, chamada 'StudentInfo'. O método 'contact' seguido de ponto mais o nome da classe 'StudentInfo' é usado; no corpo da função, o atributo 'studentContact' é acessado com '$'.

contact.StudentInfo <- function(object) {
cat("Your contact is", object$studentContact, "\n")
}
contact(studentBio)
Your contact is London

No código acima, usamos object$studentContact, onde o objeto é passado como argumento para a função e '$' acessa o atributo 'studentContact', resultando na saída abaixo.

Your contact is London

Classe S4

A classe S4 é mais rígida, convencional e próxima dos conceitos de POO. As classes são representadas por definições formais em S4. Mais especificamente, S4 possui funções setter e getter para métodos e genéricas. Em comparação com S3, S4 permite múltiplos despachos.

Vamos ver na prática as classes discutidas, criando-as e explorando um exemplo.

Uma classe S4 é definida usando a função setClass.

 setClass()

Construindo uma classe S4 (com exemplo)

Como mencionado, a classe S4 é definida com setClass(). Vamos usar setClass() para criar e definir a classe S4. Também usaremos uma sub-rotina para verificar a consistência dos dados (validação) e definir valores padrão (o paradigma).

Veja o código para definir a classe e seus slots:

No exemplo a seguir, definimos uma classe (também chamada de 'prototype'), na qual os slots são definidos: o nome da classe é 'employee', name é character, id é numeric e contact é character.

setClass("employee", slots=list(name="character", id="numeric", contact="character"))

O código abaixo cria instâncias específicas (objetos) de S4.

Vamos criar um objeto usando 'new' com o nome da classe 'employee' e preencher os slots name, id e contact com valores.

obj <- new("employee",name="Steven", id=1002, contact="West Avenue")
obj
An object of class "employee"
Slot "name":
[1] "Steven"

Slot "id":
[1] 1002

Slot "contact":
[1] "West Avenue"
An object of class "employee"
Slot "name":
"Steven"

Slot "id":
1002

Slot "contact":
"West Avenue"

A saída mostra que o objeto criado é da classe "employee" e que o Slot "name" tem "Steven", o Slot "id" tem valor 1002 e o Slot "contact" tem o valor "West Avenue".

Funções e comandos

Para verificar se um objeto é S4 ou não, você pode usar dois comandos:

O comando 'is.object(obj)' verifica se uma variável ou instância se refere a um objeto.

is.object(obj)

TRUE

O código acima gera a seguinte saída:

TRUE

O comando 'is.S4(obj)' verifica se uma variável ou instância é um objeto S4.

isS4(obj)

TRUE

O código acima gera a seguinte saída:

TRUE

Acessando e modificando o valor de um slot

Acessando o slot

O slot pode ser acessado usando "@" em vez de "$".

Use 'obj@name' para acessar o nome 'Steven' e, de forma semelhante, 'obj@id'.

obj@name
obj@id

'Steven'

1002

O código acima retorna:

'Steven'
1002

Modificando o slot

Vamos modificar o valor do slot usando o operador de atribuição ("<-") para definir 'obj@contact' com um novo valor: "North Avenue".

obj@contact <- "North Avenue"
obj
An object of class "employee"
Slot "name":
[1] "Steven"

Slot "id":
[1] 1002

Slot "contact":
[1] "North Avenue"

O código acima retorna:

An object of class "employee"
Slot "name":
"Steven"

Slot "id":
1002

Slot "contact":
"North Avenue"

A saída mostra que o Slot "contact" mudou seu valor de "West Avenue" para "North Avenue".

Como alternativa, você pode usar 'slot()' para alterar o valor.

'slot(obj, "id")' indica o slot "id", que será alterado para 1004; em seguida, imprimimos 'obj'.

slot(obj,"id") <- 1004
obj
An object of class "employee"
Slot "name":
[1] "Steven"

Slot "id":
[1] 1004

Slot "contact":
[1] "North Avenue"
An object of class "employee"
Slot "name":
"Steven"

Slot "id":
1004

Slot "contact":
"North Avenue"

A saída mostra que o Slot "id" mudou seu valor de 1002 para 1004.

Criando sua própria função genérica em S4

Vamos criar uma função que imprime a saída do jeito que precisamos, usando 'setMethod()' com a função genérica 'show()'. Todos os valores dos slots são acessados por '@' e seus nomes são impressos. Por fim, obtemos a saída com 'obj'.

setMethod("show",
"employee",
function(object) {
cat("Name:",object@name, "\n")
cat("Id:",object@id, "\n")
cat("Contact:", object@contact, "\n")
}
)
obj
Name: Steven
Id: 1004
Contact: North Avenue
Name: Steven
Id: 1004
Contact: North Avenue

A saída mostra os nomes dos Slots acompanhados de seus respectivos valores.

Parabéns

Parabéns, você chegou ao fim deste tutorial!

Neste tutorial, você aprendeu sobre programação orientada a objetos (POO) no R, seus objetos, as classes S3 e S4, como construí-las, como criar funções genéricas com exemplos e muito mais.

Se quiser aprender mais sobre R, confira os cursos da DataCamp:

Object-Oriented Programming with S3 and R6 in R

Tópicos
R
Ciência de dados

Saiba mais sobre R

Curso

Programação Orientada a Objetos com S3 e R6 em R

4 h
23.6K
Domine a complexidade do seu código com programação orientada a objetos usando os sistemas S3 e R6.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

O que é o R? Introdução à poderosa linguagem de computação estatística

Aprenda tudo o que você precisa saber sobre a linguagem de programação R e descubra por que é a linguagem mais usada na ciência de dados.
Summer Worsley's photo

Summer Worsley

15 min

R Project

blog

As 8 melhores ideias de projetos R para 2026

Descubra o que é o R e todas as vantagens de usá-lo, com exemplos e novas ideias para um projeto.
Elena Kosourova's photo

Elena Kosourova

14 min

Tutorial

Programação orientada a objetos em Python (OOP): Tutorial

Aborde os fundamentos da programação orientada a objetos (OOP) em Python: explore classes, objetos, métodos de instância, atributos e muito mais!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

Tutorial

Criação de uma lista no R

Pratique Listas em R usando o material do curso Intro to R do DataCamp.
Ryan Sheehy's photo

Ryan Sheehy

3 min

Tutorial

Tutorial de Python

Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
DataCamp Team's photo

DataCamp Team

3 min

Tutorial

Tutorial de Pipes em R para iniciantes

Saiba mais sobre o famoso operador de pipe %>% e outros pipes no R, por que e como você deve usá-los e quais alternativas você pode considerar!
Karlijn Willems's photo

Karlijn Willems

15 min

Ver MaisVer Mais