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