Universidade Federal do Amazonas
Departamento de Estatística

Curso: Introdução à Ciência de Dados
Professor: Leonardo Nascimento
04/01/2024
Versão 1.0

1 Programação orientada a objetos

diamonds <- ggplot2::diamonds
class(diamonds$carat)
## [1] "numeric"
class(diamonds$cut)
## [1] "ordered" "factor"
summary(diamonds$carat)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.2000  0.4000  0.7000  0.7979  1.0400  5.0100
summary(diamonds$cut)
##      Fair      Good Very Good   Premium     Ideal 
##      1610      4906     12082     13791     21551
# Definição da classe 'Pessoa'
class Pessoa:
    # Método de inicialização
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade
    
    # Método para apresentar a pessoa
    def apresentar(self):
        print(f"Olá, eu sou {self.nome} e tenho {self.idade} anos.")

# Instanciando objetos da classe 'Pessoa'
pessoa1 = Pessoa("João", 30)
pessoa2 = Pessoa("Maria", 25)

# Chamando o método 'apresentar' para cada objeto
pessoa1.apresentar()
pessoa2.apresentar()
# Definição da classe'Pessoa'
pessoa <- list(nome = "Leo", idade = "30")
class(pessoa)
## [1] "list"
print(pessoa)
## $nome
## [1] "Leo"
## 
## $idade
## [1] "30"
# Método genérico
class(pessoa) <-"Pessoa"
print.Pessoa <- function(x) { # a função genérica é o print
  cat("Nome:", x$nome, "\n")
  cat("Idade:", x$idade, "\n")
}
print(pessoa)
## Nome: Leo 
## Idade: 30

1.1 S3

# Definição da função genérica 'foo'
minha_funcao_generica <- function(x) {
  # Chamando useMethod para despachar para métodos específicos
  UseMethod("minha_funcao_generica")
}

# Definição de métodos específicos para diferentes classes
minha_funcao_generica.default <- function(x) {
  print("Método padrão chamado")
}

minha_funcao_generica.integer <- function(x) {
  print("Método para números inteiros chamado")
}

minha_funcao_generica.character <- function(x) {
  print("Método para caracteres chamado")
}

# Testando a função genérica com diferentes tipos de argumentos
minha_funcao_generica(5)       # Chamará minha_funcao_generica.integer
## [1] "Método padrão chamado"
minha_funcao_generica("Hello") # Chamará minha_funcao_generica.character
## [1] "Método para caracteres chamado"
minha_funcao_generica(TRUE)    # Chamará minha_funcao_generica.default
## [1] "Método padrão chamado"

1.2 S4

setClass("Person", 
  slots = c(
    name = "character", 
    age = "numeric"
  )
)
leo <- new("Person", name = "Leo Nascimento", age = 32)
leo@name
## [1] "Leo Nascimento"
setGeneric("idade", function(x) standardGeneric("idade"))
## [1] "idade"
setMethod("idade", "Person", function(x) x@age)
idade(leo)
## [1] 32
setClass("Animal", 
  slots = c(
    name = "character", 
    age = "numeric"
  )
)
setMethod("idade", "Animal", function(x) cat("A idade é",x@age))
leao = new("Animal",name = "leão",age = 25)
idade(leao)
## A idade é 25