clases de programacion en r

Las clases y los objetos son conceptos básicos de la programación orientada a objetos que giran en torno a las entidades de la vida real. Todo en R es un objeto. Un objeto es simplemente una estructura de datos que tiene algunos métodos y atributos. Una clase es solo un plano o un boceto de estos objetos. Representa el conjunto de propiedades o métodos que son comunes a todos los objetos de un tipo.

A diferencia de la mayoría de los otros lenguajes de programación, R tiene un sistema de tres clases. Estas son S3, S4 y clases de referencia.

Clase S3

S3 es el sistema OOP más simple pero más popular y carece de definición y estructura formales. Se puede crear un objeto de este tipo simplemente agregándole un atributo. El siguiente es un ejemplo para hacer las cosas más claras:

Ejemplo:

# create a list with required components
movieList <- list(name = "Iron man", leadActor = "Robert Downey Jr")
  
# give a name to your class
class(movieList) <- "movie"
  
movieList

Producción:

$name
[1] "Iron man"
$leadActor
[1] "Robert Downey Jr"

En los sistemas S3, los métodos no pertenecen a la clase. Pertenecen a funciones genéricas. Significa que no podemos crear nuestros propios métodos aquí, como hacemos en otros lenguajes de programación como C++ o Java. Pero podemos definir qué hace un método genérico (por ejemplo, imprimir) cuando se aplica a nuestros objetos.

print(movieList)

Producción:

$name
[1] "Iron man"
$leadActor
[1] "Robert Downey Jr"

Ejemplo: creación de una función de impresión definida por el usuario

# now let us write our method
print.movie <- function(obj)
{
    cat("The name of the movie is", obj$name,".\n")
    cat(obj$leadActor, "is the lead actor.\n")
}

Producción:

The name of the movie is Iron man .
Robert Downey Jr is the lead actor.

Clase S4

Los programadores de otros lenguajes como C++, Java pueden encontrar que S3 es muy diferente a su idea normal de las clases, ya que carece de la estructura que se supone que deben proporcionar las clases. S4 es una ligera mejora con respecto a S3 ya que sus objetos tienen una definición adecuada y les da una estructura adecuada.

Ejemplo:

library(methods)
  
# definition of S4 class
setClass("movies", slots=list(name="character", leadActor = "character"))
  
# creating an object using new() by passing class name and slot values
movieList <- new("movies", name="Iron man", leadActor = "Robert Downey Jr")
movieList

Producción:

An object of class "movies"
Slot "name":
[1] "Iron man"
Slot "leadActor":
[1] "Robert Downey Jr"

Como se muestra en el ejemplo anterior, setClass()se usa para definir una clase y new()se usa para crear los objetos.

El concepto de métodos en S4 es similar al de S3, es decir, pertenecen a funciones genéricas. El siguiente ejemplo muestra cómo crear un método:

movieList

Producción:

An object of class "movies"
Slot "name":
[1] "Iron man"

Slot "leadActor":
[1] "Robert Downey Jr"

Ejemplo:

# using setMethod to set a method
setMethod("show", "movies",
function(object) 
{
    cat("The name of the movie is ", object@name, ".\n")
    cat(object@leadActor, "is the lead actor.\n")
}
)
movieList

Producción:

[1] "show"
The name of the movie is  Iron man .
Robert Downey Jr is the lead actor.

Clase de referencia

Reference Class es una mejora con respecto a S4 Class. Aquí los métodos pertenecen a las clases. Son muy similares a las clases orientadas a objetos de otros lenguajes.

Definir una clase de referencia es similar a definir clases de S4. Usamos setRefClass()en lugar de setClass()y «campos» en lugar de «ranuras».

Ejemplo:

library(methods)
   
# setRefClass returns a generator 
movies <- setRefClass("movies", fields = list(name = "character",
                       leadActor = "character", rating = "numeric"))
  
#now we can use the generator to create objects
movieList <- movies(name = "Iron Man", 
                    leadActor = "Robert downey Jr", rating = 7)
movieList

Producción:

Reference class object of class "movies"
Field "name":
[1] "Iron Man"
Field "leadActor":
[1] "Robert downey Jr"
Field "rating":
[1] 7

Ahora veamos cómo agregar algunos métodos a nuestra clase con un ejemplo.

Ejemplo

library(methods)
  
movies <- setRefClass("movies", fields = list(name = "character", 
                       leadActor = "character", rating = "numeric"), methods = list(
                       increment_rating = function()
                       {
                           rating <<- rating + 1
                       },
                       decrement_rating = function()
                       {
                           rating <<- rating - 1
                       }
                     ))
movieList <- movies(name = "Iron Man", 
                    leadActor = "Robert downey Jr", rating = 7)
  
# print the value of rating
movieList$rating
  
# increment and then print the rating
movieList$increment_rating()
movieList$rating
  
# decrement and print the rating
movieList$decrement_rating()
movieList$rating

Producción:

[1] 7
[1] 8
[1] 7

Publicación traducida automáticamente

Artículo escrito por praveenism y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *