2.5 Herencia

ADN
Imagen en Pixabay de OpenClipart-Vectors con licencia CC0 Public Domain

Una clase puede "heredar" atributos (variables) y métodos (funciones) de otra clase (herencia simple) o de otras (herencia múltiple), lo cual supone una característica muy potente de la programación orientada a objetos. Con ello el programador hace extensivo a nuevas clases lo existente en otras, ya creadas y testeadas, reutilizando recursos sin necesidad de modificar ni rediseñar nada.

Se dice que la subclase o clase hija obtiene todos los atributos y métodos de su superclase (clase padre y otros...). La superclase en este sentido es más general y la subclase es más específica,  pues además de lo heredado tendrá sus propios atributos (variables) y métodos (funciones) que no existirán en la superclase, es decir la subclase añade a lo suyo propio lo de la superclase. Por ejemplo si queremos definir un formato de texto (color fondo, color escritura, subrayados etc) podemos crear una clase general con estos atributos para tener después clases más específicas donde se incluyan por ejemplo subíndices, superíndices, sangrados, etc.

"Es mejor programador quien mejor reutiliza las líneas del código, no quien más líneas escribe". Hay que evitar usar "copiar y pegar" y duplicar código innecesariamente. La herencia (no genética, ni económica, sino informática) es la transmisión de código informático.


Las ventajas de la herencia pueden resumirse en las siguientes:

  1. Con la herencia conseguiremos reutilizar el código de forma eficiente (estaremos utilizando el mismo código en las dos clases, padre e hija, pero solo lo habremos escrito una vez).
  2. Permite una propagación de cambios muy buena. Cualquier cambio que se realice en las clases base será accesible inmediatamente en las clases derivadas, siempre que la visibilidad establecida lo permita. Sin embargo a veces pueden surgir problemas, por tanto hay que asegurarse que los cambios son compatibles con las clases derivadas. Una regla que evita problemas es que las modificaciones en realidad consistan en añadir nuevos atributos y métodos y no modificar los existentes.
  3. La herencia es transitiva. Esto significa que una clase puede heredar características de la clase base que se encuentra  niveles más arriba en la jerarquía de herencia. Por ejemplo si la clase Mercedes es una subclase de la clase Coche, y la clase Coche es una subclase de la clase Vehículo, entonces el Mercedes heredará atributos tanto de Coche como de Vehículo.

 

HERENCIA EN PHP:

En PHP la herencia se implementa mediante el comando extends. Se podría crear una clase llamada Coche que tuviese una subclase derivada llamada Todoterreno de la siguiente forma:

<?php

class Coche {

// atributos y métodos de la clase Coche

}

class Todoterreno extends Coche {

// atributos y métodos de la clase Todoterreno

}

?>

A partir de ahí, cualquier objeto de la clase Todoterreno podrá utilizar sus métodos pero también los de la clase Coche, por ser su clase padre. En los siguientes apartados se verá con más detenimiento, ya que dependerá de la visibilidad con la que se hayan declarado los atributos y métodos de las clases.

Para saber más

Más sobre la visibilidad de atributos y métodos en PHP:

  • Se puede declarar un artibuto público anteponiéndole la palabra public o la palabra var.
  • Los métodos de clases pueden ser definidos como public, private, o protected. Aquellos declarados sin ninguna palabra clave de visibilidad explícita serán definidos como public.