40 - Objetos: constantes de clase

Las constantes de clase en forma similar a las variables de clase pertenecen a la clase y no a una instancia en particular. Una constante no puede variar su valor durante la ejecución del programa.

Por convención en Ruby las constantes se escriben toda en mayúsculas.

Problema 1:

Plantear una classe llamada Circulo que permita calcular su área. Al método initialize llega el radio del círculo.

Programa: ejercicio156.rb

class Circulo
  
  PI = 3.141592

  def initialize(radio)
    @radio = radio
  end

  def retornar_area
    PI * @radio * @radio
  end

end


circulo1 = Circulo.new 100
puts "El área de un círculo de 100 metros es #{circulo1.retornar_area}"

Definimos una constante de clase indicando el nombre en mayúsculas (por convención) y le asignamos el valor que almacenará:

  PI = 3.141592

En cualquier método tenemos acceso a la constante indicando su nombre:

  def retornar_area
    PI * @radio * @radio
  end

A una constante no le podemos asignar otro valor (se produce un error en tiempo de ejecución):

PI = 2

Desde fuera de la clase podemos acceder al valor almacenada en la constante por medio de la sintaxis:

puts Circulo::PI

Problema propuesto

  • Modificar la clase Circulo y hacer que el método retornar_area sea un método de clase que reciba como parámetro el radio. Llamar a dicho método sin tener que definir instancias de la clase Circulo.
Solución
ejercicio157.rb

class Circulo
  
  PI = 3.141592

  def self.retornar_area radio
    PI * radio * radio
  end

end


puts "El área de un círculo de 100 metros es #{Circulo.retornar_area 100}"