Tutorial de Ruby – Parte 19 – Redefinición de métodos

Capítulo 15. Redefinición de métodos

 

En una subclase se puede modificar el comportamiento de las instancias redefiniendo los métodos de la superclase.

 

ruby> class Humano

ruby| def identidad

ruby| print «soy una persona.\n»

ruby| end

ruby| def tarifa_tren(edad)

ruby| if edad < 12

ruby| print «tarifa reducida.\n»

ruby| else

ruby| print «tarifa normal. \n»

ruby| end

ruby| end

ruby| end

nil

ruby> Humano.new.identidad

soy una persona.

nil

ruby> class Estudiante<Humano

ruby| def identidad

ruby| print «soy un estudiante.\n»

ruby| end

ruby| end

nil

ruby> Estudiante.new.identidad

soy un estudiante.

nil

 

Supongamos que en vez de reemplazar el método identidad lo que queremos es mejorarlo. Para ello podemos utilizar super

 

ruby> class Estudiante2<Humano

ruby| def identidad

ruby| super

ruby| print «también soy un estudiante.\n»

ruby| end

ruby| end

nil

ruby> Estudiante2.new.identidad

soy una persona.

también soy un estudiante.

nil

 

super nos permite pasar argumentos al método original. Se dice que hay dos tipos de personas …

 

ruby> class Deshonesta<Humano

ruby| def tarifa_tren(edad)

ruby| super(11) #quiero una tarifa barata

ruby| end

ruby| end

nil

ruby> Deshonesta.new.tarifa_tren(25)

tarifa reducida.

nil

ruby> class Honesta<Humano

ruby| def tarifa_tren(edad)

ruby| super(edad) #pasa el argumento entregado

ruby| end

ruby| end

nil

ruby> Honesta.new.tarifa_tren(25)

tarifa normal.

nil

Gus Terrera

Apasionado por el agile testing y la ia.

Deja una respuesta