Diferencia entre composición y herencia

Diferencia entre composición y herencia

En la programación, el código reutilizable es el uso del software existente para crear un nuevo software utilizando los principios de reutilización. La reutilización del código se considera una funcionalidad productiva fundamental en las empresas intensivas de tecnología de la información. Se promueve en sistemas orientados a objetos estableciendo relaciones entre clases. Hay dos formas fundamentales de establecer estas relaciones en la programación orientada a objetos: herencia y composición. La implementación de la herencia es una forma de relacionar las clases, pero OOP proporciona un nuevo tipo de relación entre las clases llamadas composición. Al establecer una relación entre las clases nuevas y existentes, una nueva clase puede heredar o incrustar el código de una o más clases existentes.

En OOP, la herencia es la metodología por la cual un objeto adquiere las características de uno o más otros objetos. Es una de las herramientas más poderosas para implementar la reutilización del código en OOP. Al usar la herencia, se puede crear una nueva clase estableciendo las relaciones entre padres e hijos con las clases existentes. La composición del objeto es una alternativa a la herencia de clase. Usar un objeto dentro de otro objeto se conoce como composición. En muchas ocasiones, desearía usar un objeto como campo dentro de otra clase porque es fácil crear clases complejas utilizando clases escritas previamente y bien diseñadas como componentes. Esto se llama composición. Bueno, tanto la herencia como la composición proporcionan una funcionalidad equivalente en muchos casos, la composición del objeto es un mejor modelo de reutilización que la herencia de clase. Este artículo compara los dos enfoques.

Que es la herencia?

La herencia es una de las herramientas más poderosas en la implementación de la reutilización del código en la programación orientada a objetos. Se refiere a la funcionalidad por la cual un objeto adquiere las características de uno o más otros objetos. La herencia en C ++ significa que puede crear clases que obtengan sus atributos de las clases existentes. Esto significa que se especializa en una clase para crear una relación IS-A entre las clases que resulta en un fuerte acoplamiento entre las clases de base y derivada. La implementación de la herencia promueve la reutilización del código porque se crean nuevas clases a partir de clases existentes. La herencia de clase también facilita la modificación de la implementación que se está reutilizando. Pero la herencia de clase también tiene algunas desventajas. Primero, debido a que la herencia se define en el tiempo de compilación, no puede cambiar las implementaciones heredadas de las clases de los padres en tiempo de ejecución.

Que es la composición?

OOP proporciona otra relación entre las clases llamadas composición, que también se conoce como una relación ha-una. Si las características de un objeto deben ser parte de otro objeto, la relación requiere composición. Para componer una clase de las clases existentes, se debe declarar un objeto de cada clase como miembro de la nueva clase. En palabras simples, usar un objeto dentro de otro objeto se conoce como composición. Muchas veces, es posible que desee usar un objeto como campo dentro de otra clase. Usas un objeto dentro de una clase en composición. A diferencia de la herencia de clase, la composición del objeto se define dinámicamente en el tiempo de ejecución a través de objetos que adquieren referencias a otros objetos. Además, la composición proporciona una mejor manera de usar un objeto sin comprometer los detalles internos del objeto, es donde la composición es útil.

Diferencia entre composición y herencia

Acercarse

Si bien tanto la herencia como la composición promueven la reutilización del código en el sistema orientado a objetos al establecer relaciones entre clases y proporcionan una funcionalidad equivalente de muchas maneras, utilizan diferentes enfoques. Con la herencia, puede crear clases que obtengan sus atributos de las clases existentes para que mientras usa la herencia para crear una clase, puede expandirse en una clase existente. Por el contrario, usar un objeto dentro de otro objeto se conoce como composición. La composición del objeto es una alternativa a la herencia de clase. Si las características de un objeto deben ser parte de otro objeto, la relación requiere composición.

Relación

En herencia, se especializa en una clase para crear una relación "IS-A" entre las clases que resulta en un fuerte acoplamiento entre las clases de base y derivada. Permite diseñar una jerarquía de clases y la jerarquía comienza con la clase más general y se mueve a clases más específicas. Al implementar la herencia, las funciones de los miembros de una clase se convierten en propiedades de otra clase sin codificarlas explícitamente dentro de la clase. En composición, utiliza un objeto dentro de una clase y cualquier solicitud al objeto se reenvía al objeto. Los detalles internos no están expuestos entre sí en composición, por lo que es una relación "ha-a".

Implementación

La herencia de clase se define en el tiempo de compilación, por lo que no puede cambiar las implementaciones heredadas de las clases de los padres en tiempo de ejecución. Debido a que la herencia expone una subclase a los detalles de la implementación de sus padres, a menudo rompe la encapsulación. Cualquier cambio en la clase principal se reflejará en la subclase que puede crear problemas cuando intente reutilizar una subclase. La composición del objeto, por el contrario, se define dinámicamente en el tiempo de ejecución a través de objetos que adquieren referencias a otros objetos. Y debido a que se accede a los objetos únicamente a través de sus interfaces, no romperá la encapsulación. Cualquier objeto puede ser reemplazado en tiempo de ejecución por otro objeto siempre que tenga el mismo tipo.

Composición vs. Herencia: tabla de comparación

Resumen de composición vs. Herencia

En muchas ocasiones, desea usar un objeto como campo dentro de otra clase porque las clases complejas son más fáciles de crear utilizando clases bien diseñadas previamente escritas y bien diseñadas. Aquí es donde usas la composición. La herencia proporciona una forma de reutilizar el código extendiendo una clase con un esfuerzo mínimo, es por eso que la herencia es una herramienta valiosa para establecer relaciones entre clases. En general, es preferible usar la composición, ya que proporciona una forma de usar un objeto sin comprometer los detalles internos del objeto donde la composición es útil. La herencia no está exenta de problemas, sino como la herencia, la composición de los objetos plantea preocupaciones de rendimiento similares con respecto a la creación y destrucción de objetos.