Clases R6 en programación R

En la Programación Orientada a Objetos (OOP) de R Language , la encapsulación significa vincular los datos y métodos dentro de una clase . El paquete R6 es un sistema OOP encapsulado que nos ayuda a usar la encapsulación en R. El paquete R6 proporciona una clase R6 que es similar a la clase de referencia en R pero es independiente de las clases S4. Junto con los miembros privados y públicos, las clases R6 también admiten la herencia incluso si las clases están definidas en diferentes paquetes. Algunos de los paquetes R populares que usan clases R6 son dplyry shiny.

Ejemplo:

library(R6)
  
Queue <- R6Class("Queue",
  
# public members of the class
# that can be accessed by object
public  =  list(
      
# constructor/initializer  
initialize = function(...)
{
    private$elements = list(...)
},
  
# add to the queue
enqueue = function(num) 
{
    private$elements <- append(private$elements, num)
},
  
# remove from the queue
dequeue = function()
{
    if(self$size() == 0)
    stop("Queue is empty")
    element <- private$elements[[1]]
    private$elements <- private$elements[-1]
    element
},
  
# get the size of elements
size = function()
{
    length(private$elements)
}),
  
private = list(
      
  # queue list
  elements = list())
)
  
# create an object
QueueObject = Queue$new()
  
# add 2
QueueObject$enqueue(2)
  
# add 5
QueueObject$enqueue(5)
  
# remove 2
QueueObject$dequeue()
  
# remove 5
QueueObject$dequeue()

Producción:

[1] 2
[1] 5

Se pueden utilizar tanto miembros públicos como privados. La cola ( elements) es privada por lo que el objeto no puede modificarla externamente. La función de inicialización es el constructor para inicializar el objeto. object$memberse usa para acceder a los miembros públicos fuera de la clase, mientras que private$memberse usa para acceder a los miembros privados dentro de los métodos de la clase. self se refiere al objeto que ha llamado al método.

El siguiente ejemplo es una demostración de la herencia en las clases R6 mediante la creación de otra clase childQueue que hereda la clase Queue.

Ejemplo:

childQueue <- R6Class("childQueue",
  
# inherit Queue class which is the super class
inherit = Queue,
public = list(
initialize = function(...)
{
    private$elements <- list(...)
},
size = function()
{
    # super is used to access methods from super class
    super$size()
}
))
  
childQueueObject <- childQueue$new()
childQueueObject$enqueue(2)
childQueueObject$enqueue(3)
childQueueObject$dequeue()
childQueueObject$dequeue()

Producción:

[1] 2
[1] 3

La clase childQueue puede usar funciones de la superclase Queue enqueue(). dequeue()El método de tamaño anula la size()cola de la superclase pero llama size()a la cola internamente usando super. Estas clases se pueden heredar entre paquetes.

Publicación traducida automáticamente

Artículo escrito por akshit achara 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 *