Contenido del curso

Construcción de clases y modelado de objetos

Asociación, agregación y composición en Java

Resumen

En Java, las clases no funcionan aisladas: colaboran entre sí para construir sistemas más complejos a partir de piezas simples. Entender las relaciones entre clases en Java te permite diseñar código limpio, reutilizable y fácil de mantener, algo clave si estás aprendiendo programación orientada a objetos.

¿Qué es la asociación entre clases?

La asociación es la relación más general y también la más débil. Aquí una clase no guarda a la otra como atributo, simplemente la usa dentro de uno de sus métodos. Son independientes, pero colaboran cuando se necesita.

Un ejemplo claro está en la clase Usuario, que tiene un método ver que recibe un parámetro de tipo Película. El usuario no contiene a la película dentro de sus atributos, solo la utiliza puntualmente. Trabajan juntos sin pertenecerse.

¿Qué es la asociación en programación orientada a objetos? Es una relación donde una clase usa a otra dentro de un método, pero no la guarda como atributo. Ambas clases son independientes y pueden existir por separado.

¿Cómo funciona la agregación y en qué se diferencia de la composición?

La agregación es una relación más fuerte que la asociación, pero todavía conserva independencia entre las clases involucradas. Una clase contiene a la otra como atributo, sin embargo, no la controla por completo, y si la quitas, la clase principal sigue teniendo sentido.

Imagina que tu plataforma maneja una lista de categorías. Eso sería agregación, porque:

  • Las categorías forman parte de la plataforma.
  • Las categorías podrían existir en otras plataformas distintas.
  • La plataforma puede funcionar perfectamente sin categorías.

¿Cuándo una relación es de composición?

La composición es la relación más fuerte de las tres. Indica que una clase crea, posee y controla completamente a otra. Si la clase principal desaparece, la clase contenida también deja de tener sentido.

Un ejemplo dentro del proyecto: la clase Película puede tener un elemento de tipo Créditos que contiene un director y una lista de actores. Los créditos no existen por sí solos, solo tienen sentido dentro del contexto de esa película. Si eliminas la película, sus créditos también desaparecen, porque pertenecen exclusivamente a ella.

¿Cuál es la diferencia entre agregación y composición? En la agregación, la clase contenida puede existir sin la principal. En la composición, la clase contenida depende totalmente de la principal y desaparece con ella.

¿Qué relación existe entre Plataforma y la lista de contenidos?

Analiza el código por un momento. La relación entre la clase Plataforma y su lista de contenidos es una agregación. ¿Por qué? Porque esa lista de películas o contenidos puede existir incluso fuera de la plataforma; no depende exclusivamente de ella.

Este tipo de análisis es justo lo que tienes que hacer cuando diseñas software: preguntarte si una clase puede vivir sin la otra, o si una desaparece cuando la otra lo hace.

Resumen práctico de las tres relaciones

Para que lo tengas claro al revisar tu propio código, recuerda estas diferencias:

  1. Asociación: una clase usa a otra dentro de un método, sin guardarla como atributo.
  2. Agregación: una clase contiene a otra como atributo, pero ambas pueden existir por separado.
  3. Composición: una clase contiene, crea y controla a otra; si desaparece la principal, la contenida también.

¿Por qué importan las relaciones entre clases en Java? Porque definen cómo colaboran los objetos en tu sistema y determinan qué tan acopladas están las clases. Un buen diseño usa la relación más débil posible para mantener el código flexible.

Ahora te dejo la reflexión: ¿qué tipo de relación crees que existe entre la Plataforma y la lista de usuarios? Déjame tu respuesta en los comentarios, me encantará leer cómo lo razonaste antes de avanzar a la siguiente clase, donde verás flujos de control como switch, otros tipos de if y while.