Herencia o Composición en JAVA

En esta entrada hablaremos sobre la herencia y composición en JAVA, estos son temas que los programadores orientados a objetos debemos tener bien claros, ya que van a determinar la calidad de nuestro software, una decisión mal tomada sobre que se debe utilizar si herencia o composición puede determinar el fracaso o éxito del desarrollo de tu producto. Hay que tener siempre en mente que el ciclo del desarrollo software nunca termina, únicamente terminara cuando el software muera.

Así que empecemos a entender que es todo esto de la herencia y composición:

Comencemos hablando de la herencia, la herencia es una dependencia fuerte entre clases. La clase hija depende fuertemente de la clase padre y la necesita para funcionar. Cualquier cambio que se realice en la clase padre va tener efectos inesperados en cualquiera de las clases hijas y perdemos la libertad de cambiar el comportamiento de la clase padre. Este es un mecanismo para la reutilización de código. La herencia siempre la veremos en una relación “es un/una”, uno de los ejemplos típico que veremos en la red es el siguiente:


La clase vehículo que se encuentra arriba es la super clase (la clase padre), mientras que la clase Taxi y Autobús vienen siendo los tipos concretos, es decir los tipos de vehículos que pueden existir. O sea, nosotros podemos decir que un Taxi “es” siempre un vehículo, pero no necesariamente un Vehículo no tiene por que ser siempre un Taxi, puede ser de cualquier tipo concreto, por eso decimos que la herencia es unidireccional, el hijo “es” un tipo concreto de su padre

Ahora en la programación orientada a objetos hay un principio que dice "preferir la composición sobre la herencia", entonces veamos que nos propone la composición: La composición en palabras sencillas quiere decir que vamos a tener una INSTANCIA de una clase que va a CONTENER instancias de otras clases las cuales van a implementar ciertas funciones requeridas. Con la composición empezamos a dar a inicio a la delegación de acciones.

Siguiente con el ejemplo del vehículo, un vehículo va estar compuesto por distintas piezas (motor, sistema de freno, sistema de combustible) donde cada una de ellas tiene una función en específico, como se observa en la siguiente imagen:


Como lo mencionamos en el párrafo anterior la composición busca delegar sus responsabilidades y esto lo logra gracias a las clases colaboradoras designada para cada función.

Diseñar nuestro software bajo composición nos permite obtener un sistema mucho más flexible en tiempo de programación e incluso en tiempo de ejecución.

Ahora veamos una tabla comparativa de la herencia Vs la composición:



Para concluir con esta entrada, vamos a ver mucha información en la red de que es preferible utilizar la composición en vez de la herencia, pero la verdad verdadera es que la herencia si sirve si la sabemos aplicar, PERO si no realizamos una buena definición de la estructura del software la herencia se volcará sobre nosotros y nos traerá muchos problemas, es por esta razón que si no estamos confiados de si utilizar o no la herencia es mejor irnos por lo seguro y utilizar la composición.

System.out.print("Hasta la próxima entrada");







Comentarios

Publicar un comentario

Entradas populares