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 dplyr
y 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$member
se usa para acceder a los miembros públicos fuera de la clase, mientras que private$member
se 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