Tutorial de RUBY – Parte 18 – Herencia

Capítulo 14. Herencia

 

La clasificación de los objetos en nuestra vida diaria es evidentemente jerárquica. Sabemos que todos los gatos son mamíferos y que todos los mamíferos son animales. Las clases inferiores heredan características de las clases superiores a las que pertenecen. Si todos los mamíferos respiran, entonces los gatos respiran.

 

Este concepto se puede expresar en Ruby:

 

ruby> class Mamifero

ruby| def respira

ruby| print «inhalar y exhalar\n»

ruby| end

ruby| end

nil

ruby> class Gato<Mamifero

ruby| def maulla

ruby| print «miau \n»

ruby| end

ruby| end

nil

 

Aunque no se dice cómo respira un Gato, todo gato heredará ese comportamiento de Mamifero dado que se ha definido Gato como una subclase de Mamifero. En terminología OO, la clase inferior es una subclase de la clase superior que es una superclase. Por lo tanto, desde el punto de vista del programador, los gatos obtienen gratuitamente la capacidad de respirar; a continuación se añade el método maulla, así nuestro gato puede respirar y maullar.

ruby> tama = Gato.new

#<Gato:0x401c41b8>

ruby> tama.respira

inhalar y exhalar

nil

ruby> tama.maulla

miau

nil

 

Existen situaciones donde ciertas propiedades de las superclases no deben heredarse por una determinada subclase.

 

Aunque en general los pájaros vuelan, los pingüinos es una subclase de los pájaros que no vuelan.

 

ruby> class Pajaro

ruby| def aseo

ruby| print «me estoy limpiando las plumas.»

ruby| end

ruby| def vuela

ruby| print «estoy volando.»

ruby| end

ruby| end

nil

ruby> class Pinguino<Pajaro

ruby| def vuela

ruby| fail «Lo siento. yo sólo nado.»

ruby| end

ruby| end

nil

 

En vez de definir exhaustivamente todas las características de cada nueva clase, lo que se necesita es añadir o redefinir las diferencias entre cada subclase y superclase. Esta utilización de la herencia se conoce como programación diferencial. Y es uno de los beneficios de la programación orientada a objetos.

Gus Terrera

Apasionado por el agile testing y la ia.

Deja una respuesta