La herencia es uno de los conceptos en la programación orientada a objetos por el cual las nuevas clases pueden derivar de las clases base o existentes que ayudan en la reutilización del código. Las clases derivadas pueden ser las mismas que una clase base o pueden tener características extendidas que crean una estructura jerárquica de clases en el entorno de programación. En este artículo, discutiremos cómo se sigue la herencia con tres tipos diferentes de clases en la programación R.
Herencia en la clase S3
La clase S3 en el lenguaje de programación R no tiene una definición formal y fija. En un objeto de S3, una lista con su atributo de clase se establece en un nombre de clase. Los objetos de clase S3 heredan solo métodos de su clase base.
Ejemplo:
# Create a function to create an object of class student <- function(n, a, r){ value <- list(name = n, age = a, rno = r) attr(value, "class") <- student value } # Method for generic function print() print.student <- function(obj){ cat(obj$name, "\n") cat(obj$age, "\n") cat(obj$rno, "\n") } # Create an object which inherits class student s <- list(name = "Utkarsh", age = 21, rno = 96, country = "India") # Derive from class student class(s) <- c("InternationalStudent", "student") cat("The method print.student() is inherited:\n") print(s) # Overwriting the print method print.InternationalStudent <- function(obj){ cat(obj$name, "is from", obj$country, "\n") } cat("After overwriting method print.student():\n") print(s) # Check imheritance cat("Does object 's' is inherited by class 'student' ?\n") inherits(s, "student")
Producción:
The method print.student() is inherited: Utkarsh 21 96 After overwriting method print.student(): Utkarsh is from India Does object 's' is inherited by class 'student' ? [1] TRUE
Herencia en Clase S4
La clase S4 en la programación R tiene una definición adecuada y las clases derivadas podrán heredar tanto los atributos como los métodos de su clase base.
Ejemplo:
# Define S4 class setClass("student", slots = list(name = "character", age = "numeric", rno = "numeric") ) # Defining a function to display object details setMethod("show", "student", function(obj){ cat(obj@name, "\n") cat(obj@age, "\n") cat(obj@rno, "\n") } ) # Inherit from student setClass("InternationalStudent", slots = list(country = "character"), contains = "student" ) # Rest of the attributes will be inherited from student s <- new("InternationalStudent", name = "Utkarsh", age = 21, rno = 96, country="India") show(s)
Producción:
Utkarsh 21 96
Herencia en la clase de referencia
La herencia en la clase de referencia es casi similar a la clase S4 y usa setRefClass()
la función para realizar la herencia.
Ejemplo:
# Define class student <- setRefClass("student", fields = list(name = "character", age = "numeric", rno = "numeric"), methods = list( inc_age <- function(x) { age <<- age + x }, dec_age <- function(x) { age <<- age - x } ) ) # Inheriting from Reference class InternStudent <- setRefClass("InternStudent", fields = list(country = "character"), contains = "student", methods = list( dec_age <- function(x) { if((age - x) < 0) stop("Age cannot be negative") age <<- age - x } ) ) # Create object s <- InternStudent(name = "Utkarsh", age = 21, rno = 96, country = "India") cat("Decrease age by 5\n") s$dec_age(5) s$age cat("Decrease age by 20\n") s$dec_age(20) s$age
Producción:
[1] 16 Error in s$dec_age(20) : Age cannot be negative [1] 16
Publicación traducida automáticamente
Artículo escrito por utkarsh_kumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA