Uno de los temas fundamentales a entender en el mundo de la Programación Orientada a Objetos y el modelado de sistemas, es … ¿cómo los objetos se relacionan entre sí? Las asociaciones entre objetos definen cómo las instancias de una clase se pueden vincular a instancias de otra clase.
En este capítulo vamos a ver los diferentes tipos de asociaciones, enfocándonos en la multiplicidad, composición y agregación.
Una asociación es una conexión entre dos clases, indica que instancias de una clase pueden conocer o interactuar con instancias de otra clase.
Las asociaciones son la base sobre la cual se construyen relaciones más complejas.
En un diagrama de clases en UML, una asociación se representa como una línea que conecta dos clases. Opcionalmente, se pueden agregar etiquetas y flechas para aclarar la naturaleza de la relación.
La multiplicidad es un concepto que define cuántas instancias de una clase pueden estar asociadas con una instancia de otra clase.
Es una forma de expresar la cantidad y la naturaleza de las conexiones entre clases.
Notación: Se coloca cerca del extremo de la asociación y puede tomar varios valores como 1 (exactamente uno), 0..1 (ninguno o uno), * (cero o más), 1..* (uno o más), etc.
Importancia: La multiplicidad ayuda a entender las posibles interacciones entre objetos, como saber si un objeto puede existir sin estar asociado a otro.
La composición es un tipo especial de asociación que representa una relación “contiene-a” o “parte-de” entre objetos. Indica que una instancia de una clase es una parte esencial e intrínsecamente vinculada a otra.
Características: Si el objeto contenedor (el todo) es destruido, todas sus partes también deben ser destruidas. La composición es una relación fuerte y exclusiva.
Notación en UML: Se representa con una línea que tiene un diamante negro en el extremo del contenedor.
La agregación es similar a la composición en que representa una relación “parte-de“, pero es menos estricta. En la agregación, las partes pueden existir independientemente del todo.
Características: Si el objeto contenedor es destruido, las partes pueden continuar existiendo.
Notación en UML: Se representa con una línea que tiene un diamante blanco en el extremo del contenedor.
Para entender cómo los objetos se vinculan en un sistema y cómo se aplican conceptos como asociación, multiplicidad, composición y agregación en un contexto real, vamos a modelar un sistema sencillo de e-commerce que incluye Pedido
, Cliente
y Producto
.
Así podríamos representar estas relaciones en UML:
En este diagrama:
Pedido
indica que un cliente puede realizar cero o muchos pedidos. La multiplicidad “1” cerca de Cliente
indica que cada pedido está asociado con un único cliente.Pedido
. La multiplicidad “1..*” cerca de Producto
indica que un pedido puede contener uno o muchos productos. La multiplicidad “0..” cerca de Pedido
indica que un producto puede ser parte de cero o muchos pedidos.Las asociaciones, multiplicidades, composiciones y agregaciones son herramientas fundamentales para modelar cómo los diferentes objetos y clases se relacionan y trabajan juntas.
Necesitamos entender estas herramientas porque son clave a la hora de diseñar sistemas, es un lenguaje común establecido en cualquier equipo de trabajo.