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