Herencia En La Programación Orientada A Objetos

Herencia en la programación orientada a objetos

Que pasa churritas!

Ya estamos a puntito de terminar los artículos dedicados al “curso”… si curso… sobre programación orientada a objetos y si has seguido todos y cada uno de los posts ya serás capaz de entender los conceptos de la programación y de desarrollar un programa to’ flama. En el artículo de hoy vamos a volver a ver la herencia.

Es verdad que ya hable de ella y bastante bien por cierto en este primer artículo pero como en este post estaba rankeando por otra palabara clave pues toca marcarme la del partner y hacer un artículo en el que la palabra clave sea la herencia. Yeah bitches!

Así que vamos a ellos!

¿Qué coño es la herencia?

Es la primera pregunta obligatoria que te tiene que pasar por la cabeza y no hace referencia a la dota que te deja la bruja de tu tía cuando muere.

La herencia en la programación orientada a objetos hace referencia a la habilidad que tiene una clase para derivarse de otra clase. Cuando digo derivarse quiero volver a decir herencia pero es que no veas lo que me esta costando explicar este concepto que con su nombre ya lo dice todo…

Tenemos una clase, a la que típicamente se le conoce como clase base o clase padre. Esta clase tiene sus propiedades, sus métodos y sus constantes ¿no? Pues justamente podemos hacer que otra clase diferente tenga acceso a esas propiedades, métodos y constantes haciéndolos suyos y sin tener que volver a escribirlos en esta nueva clase.

Es esta la gracia de la herencia y de un sistema basado en la jerarquía. Podemos organizar nuestro código para que unas clases cuelguen de otras pero que a su vez puedan utilizar los métodos de las clases superiores, ahí está la ventaja de la herencia, en poder reutilizar código ya existente.

Además si lo hacemos bien y a medida que vamos creando clases padres estaremos creando abstracción en la lógica de nuestro programa. ¿Y esto que significa? Pues que estaremos entendiendo cada vez mejor el problema que tratamos de solucionar y a su vez estaremos preparando el programa para enfrentarnos a nuevos requerimientos o problemas ya sean esperados o no.

Pasar de lo genérico a lo abstracto. Y esto siempre es mejor y ya 😛

Querer buscar la abstracción en tu programa no significa que nos pongamos a hacer clases padres y clases hijas a lo loco. Tiene que existir un sentido lógico o de lo contrario estaremos llenando de mierda el código.

Ese sentido lógico lo encontramos a preguntarnos si una clase “es un” de otra clase, es decir, ¿un bolígrafo es una herramienta de escritura? Si. ¿Y un lápiz? ¿Es también una herramienta de escritura? Pues también. Ahí hay herencia, ¿la veis? Pero.. ¿y una pelota es una herramienta de escritura? Pues hombre, podríamos untar la pelota en pintura y dar pelotazos en la pared hasta que salga alguna palabra pero por lo general no, no es una herramienta de escritura y por ende ahí no hay herencia.

Así pues mediante este ejemplo tendríamos una jerarquía en la que existiría una clase padre llamada HerramientaDeEscritura.class.php por ejemplo y dos clases hijas llamadas Bolígrafo.class.php y Lapiz.class.php. Estas dos últimas clases van a compartir ciertas propiedades y ciertos métodos que vienen directamente heredados de la clase padre, aunque hay que aclarar que es puede que nos encontremos con métodos o propiedades que no pueden ser heredados ya que aquí entra en juego la visibilidad y el acceso. Si te perdiste esa parte te dejo aquí el enlace para que le eches un vistazo 😉

¿Qué gano si aplico herencia?

¿Que qué ganas al hacer herencia? Pues muchas cosas, aunque ya he mencionado una arriba y posiblemente sea de las mas importantes. Entender mejor el problema que tratamos de solucionar. Y esto sirve para hacerte el chulo porque si eres el único que entiende el problema y tus compañeros te preguntan tu jefazo tendrá una mejor visión de ti.

Hago herencia pa haserme el shulo

Hago herencia pa haserme el shulo

Pero fuera de todo esto a nivel de código el utilizar herencia tiene bastantes ventajas:

  • Si no somos unos paquetes conseguiremos reutilizar el código de forma eficiente. Write Once Run Anywhere, mas o menos. Escribes un método en una clase padre y lo utilizas en todas las clases hijas que te de la gana. El cenit de la vaguería…
  • Propagación de los cambios. Si quieres cambiar el valor de una constante, lo cambias en la clase padre y se aplica en todas las clases heredadas, pero ten cuidado porque las cagadas también se propagan!
  • Poder heredar propiedades y métodos de todas las clases superiores. Hacer una mega clase con toooodo lo anterior incluido, hasta el infinito y mas allá. No sería raro llegar a encontrarnos una clase hija que pinte de la siguiente forma:


Clase hija que tiene mucha herencia y que no hace nada.

Pero en PHP la herencia es una putada porque solo tenemos disponible la herencia simple. A diferencia de otros lenguajes como por ejemplo con Java que una clase hija puede heredar de tantas clases padres como les de la gana, PHP únicamente puede heredar de una sola clase padre. Por supuesto esto evita la complejidad del programa pero también es verdad que se pierden muchas características del polimorfismo y por supuesto se pierde un poquito el dinamismo en tiempo de ejecución.

Pero bueno, hay que sacrificar unas cosas para ganar otras. Yo la verdad es que hubiera preferido que existiera herencia múltiple en PHP pero que le vamos a hacer…

Podría hablar de muchas otras cosas que influyen y ayudan en la herencia como por ejemplo los constructores y destructores, la visibilidad de los métodos y propiedades y la sobrescritura pero esos temas ya los he tocado en artículos anteriores así que te recomiendo que si no los has visto eches un vistazo a este link en el que aparecen todos los posts pasados.

Y si tienes dudas o quieres aportar alguna sugerencia pues lo dejas en los comentarios y yo ya responderé cuando tal y sino puedes utilizar twitter a través del siguiente banner que en el fondo siempre es mas directo.

Hala a chuparla!

¿Te ha parecido este un artículo de 5 estrellas? Dame tu valoración:
Review Date
Reviewed Item
Herencia en la programación orientada a objetos
Author Rating
51star1star1star1star1star

Gorka Muñoz Andrés

Me llamo Gorka Muñoz y soy un desarrollador melómano. Combino a la perfección la búsqueda de nuevos grupos con la pasión por la tecnología. Desde chiquitito me ha gustado la programación, ahora que soy mayor estoy metido en el mundo del SEO sin olvidarme del /Dev.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *