COMPOSICIÓN SOBRE HERENCIA

Descubre aquí que es composición y que es herencia, así como también porque es importante privilegiar la composición de objetos a la herencia de clases

Introducción – Herencia y Composición

Cuando en informática deseamos reutilizar parte del código fuente sobre el cual estamos trabajando, muchas veces recurrimos a la implementación de herencias y/o composiciones.

Gracias a estos dos mecanismos de desarrollo podremos obtener muchos resultados favorables a la hora de escribir nuestros programas, pero también puede que si durante los inicios de la construcción del código aplicamos mal estos sistemas terminaremos padeciendo bugs difíciles, principios SOLID violados y aplicaciones imposibles de mantener en etapas más avanzadas del desarrollo.

Es por eso que conocer sus limitaciones, así como también sus diferencias puede ser muy beneficioso para lograr obtener un código limpio, testeable y escalable que nos permita alcanzar nuestros objetivos e incorporar nuevas implementaciones sin problemas.

 

Herencia: ¿para qué se utiliza y cuáles son sus ventajas?

Al ser la herencia uno de los métodos de extensión de comportamiento más utilizados en informática se ha transformado en uno de los pilares de la programación orientada a objetos mediante la cual podemos reutilizar el código desarrollado en la clase base.

Es decir, los objetos derivados de una clase base o una superclase pueden contar con la misma implementación y/o comportamiento que sus padres.

Con lo cual, las subclases que heredan de la clase base toman las propiedades y métodos que utilizan las superclases u objetos padres.

Una de las características de las herencias es que son unidireccionales y solo los subtipos de las superclases pueden comportarse igual que los tipos de quienes están heredando. Si bien muchas veces esto nos permite ampliar fácilmente el código y obtener extensiones independientes, otras veces genera complejidad en la elaboración del mismo.

Además, la herencia nos permite aplicar el polimorfismo y la abstracción.

 

¿Qué es composición y para qué sirve?

Dentro del paradigma de la programación orientada a objetos, la composición (composition en inglés) es una forma de diseñar la relación existente entre los diferentes tipos de objetos. 

Al igual que en la cocina podemos elaborar diferentes recetas con los mismos ingredientes dependiendo de cómo los combinemos, mediante este sistema podremos instanciar componentes (objetos) en diferentes compuestos (conjunto de objetos) para obtener resultados distintos dependiendo del método utilizado.

La composición es un tipo de relación dependiente en dónde un objeto más complejo está compuesto por otros objetos, es decir que se genera cuando tenemos una instancia de una clase que contiene instancias de otras clases, como dependencias, que implementan las funciones deseadas. Con lo cual, nos permite delegar responsabilidades a otros objetos y así poder estar más alineado al SRP de SOLID.

Debido a la relación a partir de la cual los objetos interactúan entre sí en una composición podemos trabajar a partir de un acoplamiento débil aplicando la inversión de dependencias de los principios SOLID, con lo cual expandir y mantener nuestro código se vuelve una tarea más sencilla de realizar, ya que por lo general las clases base no son afectadas cuando agregamos objetos o uno de sus componentes modifican su comportamiento.

Gracias a este sistema podremos crear softwares más flexibles en tiempos de construcción y ejecución que si bien en sus inicios pueden ser difíciles de llevar adelante también nos darán muchas ventajas durante las etapas avanzadas de desarrollo. 

 

Composición vs. Herencia

Muchas veces escuchamos hablar de composición sobre herencia y esto se debe a las ventajas que ofrece la composición al desarrollar nuestro código, así como también a la mala reputación que ha obtenido la herencia por su mal uso e implementación durante la construcción y desarrollo de diferentes proyectos.

A continuación te presentamos los pros y contras de la herencia y la composición: 

HERENCIA VENTAJAS Y DESVENTAJAS

Una de las principales ventajas que ofrece un diseño basado en herencias es su velocidad de avance y construcción, ya que el diseño de desarrollo suele ser fácil de elaborar. 

Pero justamente esto es lo que trae aparejado desventajas notables a medida que el proyecto avanza por lo que si no tomamos los recaudos suficientes terminaremos con problemas difíciles de solucionar como pueden ser grandes cantidades de código espagueti, código duplicado o demasiado acoplamiento que a la larga dificultará el proceso de mantenimiento, expansión y testing. 

 

COMPOSICIÓN VENTAJAS Y DESVENTAJAS

La composición puede requerir de un proceso de desarrollo más extenso que la herencia, lo cual puede ser considerado una desventaja en los primeros estadios de todo proyecto, pero a medida que avanzamos en las etapas de desarrollo de un diseño basado en este sistema obtendremos un desarrollo de software más elaborado y con muchas ventajas.

La principal ventaja que tiene trabajar con la composición es la practicidad y facilidad con la cual podemos reutilizar nuestro código siempre y cuando se encapcule adecuadamente. 

Además, al trabajar aplicando la letra D (inversión de dependecias) de los principios SOLID contaremos con un bajo acoplamiento en el código fuente, lo que nos permitirá disminuir el número de refactorizaciones y obtener una mayor facilidad de mantenimiento, expansión, cambiabilidad e incluso implementar la ejecución de pruebas menos complicadas.

 

Conclusión

Aunque diferentes, tanto la herencia como también la composición, son sistemas de reutilización del código fuente potentes que bien implementados podemos utilizar para lograr que nuestros programas superen los altos estándares de calidad que el mercado hoy día impone. 

Lo que muchas veces puede resultar difícil es comprender cuando debemos utilizar herencias y cuando utilizar composiciones, es por eso que en Craft Code queremos enseñarte como y cuando aplicar cada uno de estos métodos.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad