En un modelo de dominio algunas relaciones expresan una idea de todo y parte. Por ejemplo, una Agenda contiene Franjas horarias, un Pedido contiene Ítems de pedido o una Factura contiene Detalles de factura. Estas relaciones requieren más análisis que una asociación común, porque pueden implicar pertenencia, dependencia de ciclo de vida y reglas de consistencia.
En UML existen notaciones para agregación y composición, pero en modelado de dominio lo más importante no es el símbolo, sino comprender qué significa la relación en el negocio. Debemos preguntar si una parte puede existir sin el todo, si puede cambiar de dueño, si se comparte entre varios todos y qué ocurre cuando el todo desaparece o se cancela.
Una relación todo-parte indica que un concepto está formado por otros conceptos. El todo organiza, agrupa o contiene a las partes. Sin embargo, no todas las relaciones de contención tienen el mismo significado. Algunas partes dependen fuertemente del todo; otras pueden existir por separado.
Por ejemplo, un Ítem de pedido suele tener sentido dentro de un Pedido. En cambio, un Producto puede aparecer dentro de muchos pedidos, pero no pertenece exclusivamente a uno. Por eso, Ítem de pedido puede ser parte del Pedido, mientras que Producto se asocia con el ítem sin ser parte exclusiva del pedido.
La composición conceptual representa una relación todo-parte fuerte. La parte tiene sentido dentro del todo y su ciclo de vida suele depender de él. Si el todo deja de existir, la parte normalmente también deja de tener sentido como elemento independiente.
Por ejemplo, un Ítem de pedido pertenece a un Pedido. No tendría sentido conservar un ítem suelto sin pedido asociado. También un Detalle de factura puede depender de la Factura a la que pertenece. En estos casos, la parte suele ser creada, modificada y eliminada bajo las reglas del todo.
La agregación conceptual representa una relación todo-parte más débil. El todo agrupa o utiliza partes, pero esas partes pueden existir independientemente o incluso compartirse con otros todos.
Por ejemplo, una Especialidad puede agrupar Profesionales o un Catálogo puede agrupar Productos. Los productos no desaparecen necesariamente si se elimina un catálogo. Un Profesional tampoco deja de existir porque se modifique una lista de especialidades.
En muchos modelos conceptuales no hace falta usar el símbolo formal de agregación. Puede alcanzar con una asociación bien nombrada y reglas claras.
Una de las preguntas más importantes es si la parte depende del ciclo de vida del todo. Si la parte nace, cambia y desaparece junto con el todo, estamos cerca de una composición. Si la parte puede existir antes, después o fuera del todo, la relación es más débil.
Por ejemplo, una Franja horaria creada dentro de una Agenda puede depender de esa agenda si no tiene sentido fuera de ella. Pero si el dominio maneja franjas horarias como plantillas reutilizables, entonces podrían existir independientemente.
La respuesta depende del negocio, no de la preferencia del modelador.
Otra pregunta importante es si una parte puede pertenecer a más de un todo. En una composición fuerte, la parte normalmente pertenece a un solo todo. Un Ítem de pedido no pertenece a dos pedidos distintos. Un Detalle de factura no pertenece a dos facturas.
En una agregación más débil, puede haber compartición. Un Producto puede aparecer en muchos pedidos. Una Especialidad puede estar asociada a muchos profesionales. Un Documento puede estar relacionado con varios trámites, según el dominio.
Que un concepto esté relacionado con otro no significa que sea parte de él. Un Turno puede estar relacionado con un Paciente, pero el paciente no es parte del turno. Un Pedido puede referenciar un Cliente, pero el cliente no pertenece al pedido. Un Ítem de pedido puede referenciar un Producto, pero el producto no es parte exclusiva del pedido.
Esta diferencia evita modelos incorrectos. Si tratamos como parte algo que solo es una referencia, podemos derivar reglas equivocadas sobre eliminación, modificación o propiedad.
En un sistema de ventas, Pedido e Ítem de pedido suelen formar una composición conceptual. El pedido contiene ítems, cada ítem pertenece a un pedido, y el ítem no tiene sentido como entidad independiente fuera del pedido.
Sin embargo, Producto no es parte del pedido en el mismo sentido. El ítem puede indicar qué producto se solicitó, pero el producto existe en el catálogo antes y después del pedido. Esta diferencia es clave para no confundir composición con asociación común.
En un sistema de turnos, una Agenda puede contener Franjas horarias. Si cada franja se crea específicamente para una agenda concreta y no tiene sentido fuera de ella, podemos pensar en una composición conceptual. La agenda organiza y controla sus franjas.
Pero si el dominio usa plantillas de horarios compartidas por varias agendas, esas plantillas no serían partes exclusivas de una agenda. Podrían modelarse como conceptos independientes asociados a varias agendas.
Las relaciones todo-parte suelen tener reglas de consistencia. Por ejemplo, un Pedido no puede confirmarse si no tiene ítems. Una Factura debe tener al menos un detalle. Una Agenda publicada debe contener franjas horarias válidas y no superpuestas.
Estas reglas normalmente pertenecen al todo, porque el todo debe asegurar que sus partes formen una estructura válida. En análisis de dominio, conviene identificar esas reglas aunque todavía no decidamos cómo implementarlas.
Las relaciones todo-parte también tienen multiplicidad. Un Pedido puede tener 1..* Ítems de pedido. Una Factura puede tener 1..* Detalles. Una Agenda puede tener 0..* Franjas si está en preparación, pero 1..* si está publicada.
Cuando combinamos composición con multiplicidad, el modelo se vuelve más preciso: no solo sabemos que hay pertenencia, sino cuántas partes son necesarias o permitidas.
La siguiente tabla resume diferencias conceptuales:
| Aspecto | Composición conceptual | Agregación conceptual |
|---|---|---|
| Dependencia | La parte depende fuertemente del todo. | La parte puede existir con mayor independencia. |
| Ciclo de vida | El ciclo de vida de la parte suele estar ligado al todo. | La parte puede existir antes o después del todo. |
| Compartición | La parte normalmente pertenece a un solo todo. | La parte puede ser compartida o reutilizada. |
| Ejemplo | Pedido e Ítem de pedido. | Catálogo y Producto. |
| Pregunta clave | ¿La parte tiene sentido sin el todo? | ¿El todo solo agrupa elementos independientes? |
Estas preguntas ayudan a analizar una relación todo-parte:
Al modelar agregación y composición, suelen aparecer estos errores:
Agregación y composición ayudan a expresar relaciones todo-parte, pero deben usarse con criterio. Lo esencial es comprender si una parte depende del todo, si puede compartirse, si tiene ciclo de vida propio y qué reglas de consistencia existen. El símbolo visual solo tiene valor cuando refleja una decisión conceptual clara.
En el próximo tema estudiaremos generalización y especialización, prestando atención a cuándo las jerarquías son útiles y cuándo agregan complejidad innecesaria.