Hasta ahora todos los problemas planteados hemos llamado a los métodos desde donde definimos un objeto de dicha clase, por ejemplo:
empleado1 = Empleado.new "diego", 2000 empleado1.paga_impuestos
Utilizamos la sintaxis:
[nombre del objeto].[nombre del método]
Es decir antecedemos al nombre del método el nombre del objeto y el operador punto.
Ahora bien que pasa si queremos llamar dentro de la clase a otro método que pertenece a la misma clase, la sintaxis es la siguiente:
[nombre del método]
Es importante tener en cuenta que esto solo se puede hacer cuando estamos dentro de la misma clase.
Plantear una clase Operaciones que solicite en el método "initialize" la carga de dos enteros e inmediatamente muestre su suma, resta, multiplicación y división. Hacer cada operación en otro método de la clase Operación y llamarlos desde el mismo método initialize.
class Operaciones
def initialize
print "Ingrese primer valor:"
@valor1 = gets.to_i
print "Ingrese segundo valor:"
@valor2 = gets.to_i
sumar
restar
multiplicar
division
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
Nuestro método initialize además de cargar los dos enteros procede a llamar a los métodos que calculan la suma, resta, multiplicación y división de los dos valores ingresados.
Como vemos las llamadas desde un método a otro solo se hace indicando su nombre:
def initialize
print "Ingrese primer valor:"
@valor1 = gets.to_i
print "Ingrese segundo valor:"
@valor2 = gets.to_i
sumar
restar
multiplicar
division
end
El método sumar multiplica los dos atributos @valor1 y @valor2 y lo almacena en una variable local llamada "su" (no lleva @ la variable "su" ya que es una variable local a dicho método):
def sumar
su = @valor1 + @valor2
puts "La suma es #{su}"
end
En el bloque principal del programa creamos un objeto de la clase Operaciones:
operacion1 = Operaciones.new
Plantear una clase que administre un Hash que almacene como clave el nombre de un alumno y como valor su nota (cargar 5 alumnos)
Mostrar un menú de opciones que permita:
class Alumnos
def initialize
@notas = Hash.new
end
def menu
opcion = 0
while opcion != 4
puts "1- Cargar alumnos"
puts "2- Listar alumnos"
puts "3- Listado de alumnos con notas mayores o iguales a 7"
puts "4- Finalizar programa"
print "Ingrese su opcion:"
opcion= gets.to_i
if opcion == 1
cargar
elsif opcion == 2
listar
elsif opcion == 3
notas_altas
end
end
end
def cargar
@notas.clear
for indice in 1..5
print "Ingrese nombre del alumno:"
alumno = gets.chomp
print "Nota del alumno:"
no = gets.to_i
@notas[alumno] = no
end
end
def listar
puts "Listado completo de alumnos"
@notas.each do |nombre, no|
puts "Alumno #{nombre} su nota es #{no}"
end
puts "-" * 50
end
def notas_altas
puts "Alumnos con notas superiores o iguales a 7"
@notas.each do |nombre, no|
if no >= 7
puts "#{nombre} #{no}"
end
end
puts "-" * 50
end
end
# bloque principal
alumnos = Alumnos.new
alumnos.menu
Si ejecutamos el programa podemos ver como aparece un menú de opciones y podemos seleccionar para cargar, listar etc.:

El bloque principal del programa es muy sencillo, solo creamos un objeto de la clase Alumno y llamamos posteriormente al método menu:
# bloque principal alumnos = Alumnos.new alumnos.menu
Ahora analicemos la clase Alumno, en el método initialize procedemos a crear un atributo de tipo Hash donde se almacenarán los nombres de alumnos (clave del Hash) y sus notas (valor del Hash):
class Alumnos
def initialize
@notas = Hash.new
end
El método menu muestra una serie de opciones y solicita al operador que elija una de ellas, según cual de ellas selecciona procede a llamar al método respectivo:
def menu
opcion = 0
while opcion != 4
puts "1- Cargar alumnos"
puts "2- Listar alumnos"
puts "3- Listado de alumnos con notas mayores o iguales a 7"
puts "4- Finalizar programa"
print "Ingrese su opcion:"
opcion= gets.to_i
if opcion == 1
cargar
elsif opcion == 2
listar
elsif opcion == 3
notas_altas
end
end
end
El método menu se repite el while mientras no se ingrese en la variable local opcion el valor 4.
El método cargar se llama desde el método menu, en el mismo procedemos a cargar 5 elementos en el Hash:
def cargar
@notas.clear
for indice in 1..5
print "Ingrese nombre del alumno:"
alumno = gets.chomp
print "Nota del alumno:"
no = gets.to_i
@notas[alumno] = no
end
end
Llamamos al método clear del Hash por si ya habíamos cargado otros alumnos (esto ocurriría si llamamos al método cargar varias veces)
El método listar muestra todos los nombres de alumnos y sus notas recorriendo el Hash mediante el método each:
def listar
puts "Listado completo de alumnos"
@notas.each do |nombre, no|
puts "Alumno #{nombre} su nota es #{no}"
end
puts "-" * 50
end
Finalmente el método notas_altas muestra solo los alumnos cuyas notas sean igual o superior a 7:
def notas_altas
puts "Alumnos con notas superiores o iguales a 7"
@notas.each do |nombre, no|
if no >= 7
puts "#{nombre} #{no}"
end
end
puts "-" * 50
end
ejercicio137.rb
class Agenda
def initialize
@contactos = Hash.new
end
def menu
opcion = 0
while opcion != 5
puts "1- Carga de un contacto en la agenda"
puts "2- Listado completo de la agenda"
puts "3- Consulta ingresando el nombre de la persona"
puts "4- Modificacion del telefono"
puts "5- Finalizar programa"
print "Ingrese su opcion:"
opcion = gets.to_i
if opcion == 1
cargar
elsif opcion == 2
listado
elsif opcion == 3
consulta
elsif opcion == 4
modificacion
end
end
end
def cargar
print "Ingrese el nombre de la persona:"
nombre = gets.chomp
print "Ingrese el numero de telefono:"
telefono = gets.to_s
@contactos[nombre] = telefono
puts "-" * 50
end
def listado
puts "-" * 50
puts "Listado completo de la agenda"
@contactos.each do |nombre, telefono|
puts "El teléfono de #{nombre} es #{telefono}"
end
puts "-" * 50
end
def consulta
puts "-" * 50
print "Ingrese el nombre de la persona a consultar:"
nombre = gets.chomp
if @contactos.include? nombre
puts "El teléfono de #{nombre} #{@contactos[nombre]}"
else
puts "No existe un contacto con ese nombre"
end
puts "-" * 50
end
def modificacion
puts "-" * 50
print "Ingrese el nombre de la persona a modificar su teléfono:"
nombre = gets.chomp
if @contactos.include? nombre
print "Ingrese el nuevo número de teléfono:"
telefono = gets.to_s
@contactos[nombre] = telefono
else
puts "No existe un contacto con ese nombre"
end
puts "-" * 50
end
end
# bloque principal
agenda=Agenda.new
agenda.menu