Skip to main content

¿Qué es la composición sobre la herencia?

La composición sobre la herencia es una metodología de programación que se utiliza en lenguajes de programación orientados a objetos para ayudar a establecer relaciones más dinámicas y cambiables entre objetos en una aplicación. El formato básico para la composición sobre la herencia es la inclusión de una instancia de un objeto dentro de otro objeto. Esto es claramente diferente del método de herencia orientado a objetos, pero puede servir para el mismo propósito en muchos modelos. Las ventajas de la composición sobre la herencia incluyen fronteras bien definidas entre los objetos compuestos y los objetos envolventes, la capacidad de cambiar la implementación de un objeto sin afectar una jerarquía de herencia completa y un marco menos restrictivo para el diseño inicial del programa. Sin embargo, algunas de las complicaciones podrían incluir dificultades en la serialización y estructuras demasiado complejas en programas grandes y establecidos.

En la programación orientada a objetos, uno de los rasgos que es importante establecer durante el diseño es cómo los diferentes objetos se relacionan entre sí. La herencia es un mecanismo central en la programación orientada a objetos y permite que un objeto herede todos los datos y métodos de su padre, que luego puede agregar, modificar o ampliar con su propia implementación. Un ejemplo de diseño basado en la herencia podría ser un programa que tiene una clase principal que define un automóvil y modela algunos atributos genéricos de todos los automóviles. La clase para cada marca de automóvil individual se establece como un descendiente de la clase principal, pero define información específica, como el tamaño del motor, la capacidad de combustible u otra información específica de esa marca de automóvil en particular.

La composición se expresa al incluir instancias de objetos dentro de otros objetos. Si hay una clase principal que define un automóvil genérico, entonces, en lugar de crear subclases para marcas de automóviles específicas, la clase principal podría contener instancias de otros objetos que definan el automóvil más específicamente. Esto podría significar que la clase de automóvil principal podría contener un objeto para el tipo de motor y uno para la capacidad de combustible, que se establecería cuando la clase se utiliza para crear una instancia de una marca específica de automóvil.

Con la composición sobre la herencia, los objetos contenidos en la clase principal no están directamente relacionados con la clase principal, dando a los desarrolladores la libertad de cambiar la forma en que funcionan los objetos individuales. Un problema que la composición sobre la herencia puede ayudar a prevenir es una situación en la que un árbol de herencia puede ser excesivamente profundo, lo que significa que cualquier modificación de una clase en el árbol podría requerir cambios a lo largo del árbol. No todos los lenguajes orientados a objetos tienen soporte para múltiples herencias, y la composición sobre la herencia es un método que puede usarse para evitar esta restricción.