31 - Objetos: definición del método initialize

En Ruby podemos definir un método que se ejecute inicialmente y en forma automática. Este método debe llamarse en forma obligatoria "initialize"

El método initialize tiene las siguientes características:

  • Es el primer método que se ejecuta.
  • Se ejecuta en forma automática.
  • No puede retornar datos.
  • Puede tener parámetros.
  • Tiene por objetivo inicializar atributos.

Problema 1:

Confeccionar una clase que represente un empleado. Definir como atributos su nombre y su sueldo. En el método initialize cargar los atributos por teclado y luego en otro método imprimir sus datos y por último uno que imprima un mensaje si debe pagar impuestos (si el sueldo supera a 3000)

Programa: ejercicio131.rb

class Empleado

  def initialize
    print "Ingrese el nombre del empleado:"
    @nombre = gets.chomp
    print "Ingrese el sueldo:"
    @sueldo = gets.to_f
  end

  def imprimir
    puts "Nombre: #{@nombre}"
    puts "Sueldo: #{@sueldo}"
  end

  def paga_impuestos
    if @sueldo > 3000
      puts "Debe pagar impuestos"
    else
      puts "No paga impuestos"
    end
  end
end


empleado1 = Empleado.new
empleado1.imprimir
empleado1.paga_impuestos

Cuando se crea el objeto de la clase Empleado:

empleado1 = Empleado.new

El método new se encarga de llamar al método initialize:

  def initialize
    print "Ingrese el nombre del empleado:"
    @nombre = gets.chomp
    print "Ingrese el sueldo:"
    @sueldo = gets.to_f
  end

Problema 2:

Desarrollar una clase que represente un punto en el plano y tenga los siguientes métodos: inicializar los valores de x e y que llegan como parámetros (definir el método initialize), imprimir en que cuadrante se encuentra dicho punto (concepto matemático, primer cuadrante si x e y son positivas, si x<0 e y>0 segundo cuadrante, etc.)

Programa: ejercicio132.rb

class Punto

  def initialize(x, y)
    @x = x
    @y = y
  end

  def imprimir
    puts "Coordenada del punto"
    puts "(#{@x},#{@y})"
  end

  def imprimir_cuadrante
    if @x > 0 && @y > 0
      puts "Primer cuadrante"
    elsif @x < 0 && @y > 0
      puts "Segundo cuadrante"
    elsif @x < 0 && @y < 0
      puts "Tercer cuadrante"
    elsif @x > 0 && @y < 0
      puts "Cuarto cuadrante"
    end
  end
  
end


punto1 = Punto.new 10, -2
punto1.imprimir
punto1.imprimir_cuadrante

En este problema el método initialize tiene dos parámetros:

  def initialize(x, y)
    @x = x
    @y = y
  end

Los parámetros al método initialize llegan en forma indirecta cuando creamos un objeto de la clase Punto al llamar al método new:

punto1 = Punto.new 10, -2

Si no le pasamos los dos parámetros al método new se genera un error sintáctico.

Problemas propuestos

  • Desarrollar una clase que represente un Cuadrado y tenga los siguientes métodos: inicializar el valor del lado llegando como parámetro al método initialize (definir un atributo llamado @lado), imprimir su perímetro y su superficie.
  • Implementar la clase Operaciones. Se deben cargar dos valores enteros por teclado en el método initialize, calcular e imprimir su suma, resta, multiplicación y división, cada una en un método.
Solución
ejercicio133.rb

class Cuadrado

  def initialize(lado)
    @lado = lado
  end

  def mostrar_perimetro
    per = @lado * 4
    puts "El perimetro del cuadrado es:#{per}"
  end

  def mostrar_superficie
    sup = @lado * @lado
    puts "La superficie del cuadrado es: #{sup}"
  end

end


cuadrado1 = Cuadrado.new 12
cuadrado1.mostrar_perimetro
cuadrado1.mostrar_superficie




ejercicio134.rb

class Operaciones

  def initialize
    print "Ingrese primer valor:"
    @valor1 = gets.to_i
    print "Ingrese segundo valor:"
    @valor2 = gets.to_i
  end

  def sumar
    su = @valor1 + @valor2
    puts "La suma es #{su}"
  end

  def restar
    re = @valor1 - @valor2
    puts "La resta es #{re}"
  end

  def multiplicar
    pro = @valor1 * @valor2
    puts "El producto es #{pro}"
  end

  def division
    divi = @valor1 / @valor2
    puts "La division es #{divi}"
  end

end


operacion1 = Operaciones.new
operacion1.sumar
operacion1.restar
operacion1.multiplicar
operacion1.division