En Ruby, las variables y métodos de clase son fundamentales para la programación orientada a objetos. Este tema te enseñará cómo definir y utilizar variables y métodos de clase, así como las diferencias entre ellos y sus contrapartes de instancia.

  1. Variables de Clase

¿Qué son las Variables de Clase?

Las variables de clase son variables que pertenecen a la clase en sí, en lugar de a una instancia específica de la clase. Se definen utilizando @@ antes del nombre de la variable.

Definición y Uso

class MiClase
  @@variable_de_clase = 0

  def self.incrementar_variable
    @@variable_de_clase += 1
  end

  def self.mostrar_variable
    @@variable_de_clase
  end
end

# Incrementar la variable de clase
MiClase.incrementar_variable
MiClase.incrementar_variable

# Mostrar el valor de la variable de clase
puts MiClase.mostrar_variable  # Salida: 2

Explicación del Código

  1. Definición de la Variable de Clase: @@variable_de_clase = 0 define una variable de clase inicializada en 0.
  2. Método de Clase para Incrementar la Variable: self.incrementar_variable es un método de clase que incrementa @@variable_de_clase en 1.
  3. Método de Clase para Mostrar la Variable: self.mostrar_variable es un método de clase que retorna el valor de @@variable_de_clase.

Ejercicio Práctico

Ejercicio: Define una clase Contador que tenga una variable de clase @@conteo que se incremente cada vez que se cree una nueva instancia de la clase. Además, define un método de clase mostrar_conteo que muestre el valor de @@conteo.

class Contador
  @@conteo = 0

  def initialize
    @@conteo += 1
  end

  def self.mostrar_conteo
    @@conteo
  end
end

# Crear instancias de Contador
contador1 = Contador.new
contador2 = Contador.new
contador3 = Contador.new

# Mostrar el conteo
puts Contador.mostrar_conteo  # Salida: 3

Solución Explicada

  1. Inicialización de la Variable de Clase: @@conteo = 0 inicializa la variable de clase.
  2. Incremento en el Constructor: @@conteo += 1 en el método initialize incrementa @@conteo cada vez que se crea una nueva instancia.
  3. Método de Clase para Mostrar el Conteo: self.mostrar_conteo retorna el valor de @@conteo.

  1. Métodos de Clase

¿Qué son los Métodos de Clase?

Los métodos de clase son métodos que se definen en la clase en sí, no en sus instancias. Se definen utilizando self antes del nombre del método.

Definición y Uso

class MiClase
  def self.metodo_de_clase
    "Este es un método de clase"
  end
end

# Llamar al método de clase
puts MiClase.metodo_de_clase  # Salida: Este es un método de clase

Explicación del Código

  1. Definición del Método de Clase: self.metodo_de_clase define un método de clase que retorna una cadena de texto.
  2. Llamada al Método de Clase: MiClase.metodo_de_clase llama al método de clase y muestra su salida.

Ejercicio Práctico

Ejercicio: Define una clase Calculadora con un método de clase sumar que tome dos números como argumentos y retorne su suma.

class Calculadora
  def self.sumar(a, b)
    a + b
  end
end

# Llamar al método de clase
puts Calculadora.sumar(5, 3)  # Salida: 8

Solución Explicada

  1. Definición del Método de Clase: self.sumar(a, b) define un método de clase que toma dos argumentos y retorna su suma.
  2. Llamada al Método de Clase: Calculadora.sumar(5, 3) llama al método de clase y muestra su salida.

Conclusión

En esta sección, hemos aprendido sobre las variables y métodos de clase en Ruby. Las variables de clase (@@) son compartidas entre todas las instancias de una clase, mientras que los métodos de clase (self.metodo) son llamados directamente en la clase. Estos conceptos son esenciales para la programación orientada a objetos y te permitirán escribir código más organizado y eficiente.

Resumen

  • Variables de Clase: Se definen con @@ y son compartidas entre todas las instancias de la clase.
  • Métodos de Clase: Se definen con self y se llaman directamente en la clase.

Próximos Pasos

En el siguiente tema, exploraremos la Herencia en Ruby, que te permitirá crear clases que hereden comportamientos y propiedades de otras clases, facilitando la reutilización del código y la creación de jerarquías de clases.

© Copyright 2024. Todos los derechos reservados