Introducció

La programació orientada a objectes (OOP) és un paradigma de programació que utilitza "objectes" per representar dades i mètodes. En R, hi ha diversos sistemes per implementar OOP, incloent S3, S4, i R6. Aquest mòdul se centrarà en els sistemes S3 i S4, que són els més utilitzats en la comunitat R.

Objectius del Mòdul

  • Entendre els conceptes bàsics de la programació orientada a objectes.
  • Aprendre a crear i utilitzar classes i mètodes en R utilitzant els sistemes S3 i S4.
  • Comparar els sistemes S3 i S4.
  • Implementar exemples pràctics per consolidar els coneixements.

Conceptes Bàsics de la Programació Orientada a Objectes

Classes i Objectes

  • Classe: Una plantilla per crear objectes que defineix un conjunt d'atributs i mètodes.
  • Objecte: Una instància d'una classe que conté dades i mètodes per manipular aquestes dades.

Mètodes

  • Mètode: Una funció associada a una classe que opera sobre objectes d'aquesta classe.

Sistema S3

Creació d'Objectes S3

En el sistema S3, les classes són simplement etiquetes assignades a l'atribut class d'un objecte. No hi ha una definició formal de la classe.

# Creació d'un objecte S3
persona <- list(nom = "Joan", edat = 30)
class(persona) <- "Persona"

Definició de Mètodes S3

Els mètodes S3 es defineixen com funcions amb un nom específic que inclou el nom de la funció genèrica i el nom de la classe.

# Definició d'un mètode S3 per a la classe Persona
print.Persona <- function(x) {
  cat("Nom:", x$nom, "\n")
  cat("Edat:", x$edat, "\n")
}

# Ús del mètode
print(persona)

Exemple Pràctic

# Creació d'una classe S3 per a un cotxe
cotxe <- list(marca = "Toyota", model = "Corolla", any = 2020)
class(cotxe) <- "Cotxe"

# Definició d'un mètode S3 per a la classe Cotxe
print.Cotxe <- function(x) {
  cat("Marca:", x$marca, "\n")
  cat("Model:", x$model, "\n")
  cat("Any:", x$any, "\n")
}

# Ús del mètode
print(cotxe)

Sistema S4

Creació de Classes S4

El sistema S4 és més formal i rigorós que el S3. Les classes S4 es defineixen explícitament utilitzant la funció setClass.

# Definició d'una classe S4
setClass("Persona",
         slots = list(nom = "character", edat = "numeric"))

# Creació d'un objecte S4
joan <- new("Persona", nom = "Joan", edat = 30)

Definició de Mètodes S4

Els mètodes S4 es defineixen utilitzant la funció setMethod.

# Definició d'un mètode S4 per a la classe Persona
setMethod("show", "Persona",
          function(object) {
            cat("Nom:", object@nom, "\n")
            cat("Edat:", object@edat, "\n")
          })

# Ús del mètode
show(joan)

Exemple Pràctic

# Definició d'una classe S4 per a un cotxe
setClass("Cotxe",
         slots = list(marca = "character", model = "character", any = "numeric"))

# Creació d'un objecte S4
cotxe <- new("Cotxe", marca = "Toyota", model = "Corolla", any = 2020)

# Definició d'un mètode S4 per a la classe Cotxe
setMethod("show", "Cotxe",
          function(object) {
            cat("Marca:", object@marca, "\n")
            cat("Model:", object@model, "\n")
            cat("Any:", object@any, "\n")
          })

# Ús del mètode
show(cotxe)

Comparació entre S3 i S4

Característica S3 S4
Definició de Classe Informal (atribut class) Formal (funció setClass)
Definició de Mètodes Funcions amb nom específic Funció setMethod
Rigorositat Menys rigorós Més rigorós
Flexibilitat Més flexible Menys flexible

Exercicis Pràctics

Exercici 1: Creació d'una Classe S3

  1. Crea una classe S3 anomenada Animal amb els atributs nom i edat.
  2. Defineix un mètode print per a la classe Animal que imprimeixi els atributs de l'objecte.
# Solució
animal <- list(nom = "Lleó", edat = 5)
class(animal) <- "Animal"

print.Animal <- function(x) {
  cat("Nom:", x$nom, "\n")
  cat("Edat:", x$edat, "\n")
}

print(animal)

Exercici 2: Creació d'una Classe S4

  1. Crea una classe S4 anomenada Animal amb els atributs nom i edat.
  2. Defineix un mètode show per a la classe Animal que imprimeixi els atributs de l'objecte.
# Solució
setClass("Animal",
         slots = list(nom = "character", edat = "numeric"))

animal <- new("Animal", nom = "Lleó", edat = 5)

setMethod("show", "Animal",
          function(object) {
            cat("Nom:", object@nom, "\n")
            cat("Edat:", object@edat, "\n")
          })

show(animal)

Resum

En aquest mòdul, hem après els conceptes bàsics de la programació orientada a objectes en R, incloent la creació de classes i mètodes utilitzant els sistemes S3 i S4. Hem vist exemples pràctics i hem comparat els dos sistemes per entendre les seves diferències i aplicacions. Amb aquests coneixements, estàs preparat per aplicar OOP en els teus projectes en R.

Programació en R: De Principiant a Avançat

Mòdul 1: Introducció a R

Mòdul 2: Manipulació de Dades

Mòdul 3: Visualització de Dades

Mòdul 4: Anàlisi Estadística

Mòdul 5: Gestió Avançada de Dades

Mòdul 6: Conceptes Avançats de Programació

Mòdul 7: Aprenentatge Automàtic amb R

Mòdul 8: Temes Especialitzats

Mòdul 9: Projecte i Estudis de Cas

© Copyright 2024. Tots els drets reservats