Agregación y composición en java
ComposiciónJava OOP: Tutorial de composiciónEn este tutorial de Java aprendemos a diseñar aplicaciones débilmente acopladas con composición y por qué debería favorecerla por encima de la herencia.Cubrimos cómo instanciar una clase dentro de otra clase y cómo acceder a los miembros de la clase a través de múltiples objetos.Por último, echamos un vistazo a los pros y los contras de la herencia y la composición.Qué es la composición
La composición es un tipo de relación entre clases en la que una clase contiene a otra, en lugar de heredar de otra.La composición debería ser favorecida por encima de la herencia porque es más flexible y nos permite diseñar aplicaciones poco acopladas.Como ejemplo, consideremos una aplicación que convierte un vídeo de un formato a otro. Por ejemplo, consideremos una aplicación que convierta un vídeo de un formato a otro. Normalmente, crearíamos una clase convertidora que contenga los detalles del archivo y la funcionalidad para convertirlo, y luego podríamos tener otra clase que herede del convertidor y envíe una notificación al usuario cuando haya terminado, extrayendo detalles como el nombre, el tamaño, etc. de la clase convertidora principal. Tendríamos que escribir otra clase de notificación, esta vez heredando del convertidor de audio.Esto crea dos problemas:La solución es la composición. La solución es la composición. Mientras que la herencia se puede considerar como una relación «es», la composición se puede considerar como una relación «tiene».En lugar de crear una clase hija que hereda la funcionalidad de una clase padre, creamos clases independientes que contienen otras clases.En pocas palabras, creamos una instancia de un objeto de una clase dentro de otra clase.Convertir la herencia en composición en Java
Composición en oop c++
Cuando considere utilizar la herencia, pregúntese si la subclase es realmente una versión más especializada de la superclase. En este caso, un coche es un tipo de vehículo, por lo que la relación de herencia tiene sentido.
Cuándo utilizar la composición en JavaEn la programación orientada a objetos, podemos utilizar la composición en los casos en que un objeto «tiene» (o es parte de) otro objeto. Algunos ejemplos serían:Para entender mejor este tipo de relación, consideremos la composición de una Casa:
En este caso, sabemos que una casa tiene un salón y un dormitorio, por lo que podemos utilizar los objetos Dormitorio y Salón en la composición de una Casa. Herencia frente a composición: Dos ejemplosConsidere el siguiente código. ¿Es un buen ejemplo de herencia?
En este caso, la respuesta es no. La clase hija hereda muchos métodos que nunca utilizará, lo que da lugar a un código estrechamente acoplado que es confuso y difícil de mantener. Si te fijas bien, también está claro que este código no pasa la prueba de «es un».Ahora vamos a intentar el mismo ejemplo utilizando la composición:
Qué es la composición en java
Favorecer la composición sobre la herencia es un principio en la programación orientada a objetos (POO). Las clases deben lograr un comportamiento polimórfico y la reutilización del código por su composición en lugar de la herencia de una clase base o padre. Para conseguir una mayor flexibilidad en el diseño, el principio de diseño dice que se debe favorecer la composición sobre la herencia. La herencia sólo debe utilizarse cuando la subclase «es una» superclase. No utilice la herencia para conseguir la reutilización del código. Si no hay una relación ‘es una’, entonces utilice la composición para la reutilización del código.Razones para favorecer la composición sobre la herencia en Java y OOP:Herencia :La herencia es la estrategia de diseño para implementar una relación entre objetos en la programación orientada a objetos. La palabra clave extends se utiliza para implementar la herencia en Java.class Persona {
En el ejemplo anterior, el empleado «es una» persona o hereda de Persona. Todas las relaciones de herencia son relaciones «is-a». El Empleado también hace sombra a la propiedad title de Persona, lo que significa que Employee. title devolverá el título del Empleado, no el de Persona.Composición :En la programación orientada a objetos, la composición es la estrategia de arquitectura para ejecutar una relación entre objetos. La composición en Java se realiza utilizando variables de instancia de otros objetos.
Ejemplo de composición en oop
Hay dos maneras de reutilizar las clases existentes, a saber, la composición y la herencia. Con la composición (también conocida como agregación), se define una nueva clase, que se compone de clases existentes. Con la herencia, se deriva una nueva clase basada en una clase existente, con modificaciones o extensiones.
Supongamos que necesitamos una nueva clase llamada Línea, podemos diseñar la clase Línea reutilizando la clase Punto mediante la composición. Decimos que «Una línea está compuesta por dos puntos», o «Una línea tiene dos puntos». La composición muestra una relación «tiene-un».
En POO, a menudo organizamos las clases en jerarquía para evitar la duplicación y reducir la redundancia. Las clases de la jerarquía inferior heredan todas las variables (atributos estáticos) y métodos (comportamientos dinámicos) de las jerarquías superiores. Una clase en la jerarquía inferior se llama subclase (o clase derivada, hija, extendida). Una clase de la jerarquía superior se llama superclase (o clase base, padre). Al extraer todas las variables y métodos comunes en las superclases, y dejar las variables y métodos especializados en las subclases, se puede reducir o eliminar en gran medida la redundancia, ya que estas variables y métodos comunes no necesitan repetirse en todas las subclases. Por ejemplo,