En un proyecto real, un sistema no se representa con un único diagrama. Puede haber casos de uso, clases, secuencias, actividades, estados, componentes y despliegue. Cada diagrama muestra una vista distinta, pero todas esas vistas deben describir el mismo sistema de manera compatible.
La coherencia entre diagramas evita contradicciones. Si un diagrama de casos de uso habla de Registrar pedido, un diagrama de secuencia relacionado no debería usar Confirmar orden sin aclarar si se trata del mismo objetivo o de otro. Si un diagrama de clases define Pedido, los diagramas de estados y secuencia deberían usar ese mismo concepto de manera consistente.
La coherencia significa que los diagramas no se contradicen y que comparten conceptos, nombres, relaciones y responsabilidades compatibles. Cada diagrama puede tener su propio nivel de detalle, pero no debería representar una versión diferente del sistema.
Un modelo coherente permite pasar de una vista a otra sin perder sentido. Desde un caso de uso se puede llegar a una secuencia. Desde una secuencia se pueden revisar clases participantes. Desde esas clases se pueden analizar estados o componentes relacionados.
Los diagramas UML pueden mostrar alcance, estructura, comportamiento, interacción y despliegue. La coherencia aparece cuando esas vistas comparten nombres, reglas, relaciones y responsabilidades compatibles. Así, cada diagrama aporta una mirada distinta sin contradecir a las demás.
Los nombres deben mantenerse consistentes. Si un concepto se llama Turno en el diagrama de clases, no conviene llamarlo Reserva en otro diagrama sin explicar la diferencia. Si un caso de uso se llama Solicitar turno, el flujo, las secuencias y las actividades deberían usar términos compatibles.
La falta de consistencia en nombres genera dudas. Puede parecer que existen conceptos distintos cuando en realidad se habla de lo mismo, o puede ocultar que se mezclaron responsabilidades diferentes.
Un glosario compartido ayuda a mantener coherencia. Allí se definen términos importantes del dominio y del sistema. Por ejemplo: Turno, Agenda, Profesional, Paciente, Reserva, Cancelación, Pago, Pedido, Factura.
El glosario no necesita ser extenso al principio. Puede crecer a medida que aparecen conceptos relevantes. Lo importante es que los diagramas usen los mismos términos con el mismo significado.
Un caso de uso describe un objetivo funcional. Un diagrama de actividades puede detallar el flujo de ese objetivo. Ambos deben coincidir. Si el caso de uso indica que el usuario puede cancelar una operación, el diagrama de actividades debería contemplar ese camino si es relevante.
Si una actividad muestra pasos que no aparecen en el caso de uso, puede tratarse de un detalle interno válido o de una funcionalidad no documentada. En cualquiera de los dos casos, conviene revisar la relación entre ambas vistas.
Un diagrama de secuencia puede detallar cómo se realiza un escenario de un caso de uso. El actor, el objetivo y el resultado deberían corresponderse con lo definido en el caso de uso.
Por ejemplo, si el caso de uso es Solicitar turno, la secuencia debería mostrar participantes y mensajes relacionados con esa solicitud. Si aparecen pagos, notificaciones o validaciones, deben tener sentido dentro del escenario o estar justificados como colaboraciones internas.
Los participantes de una secuencia suelen corresponder a clases, objetos, componentes o servicios. Si una secuencia envía un mensaje a ServicioTurnos, esa responsabilidad debería existir en el diseño. Si una clase recibe mensajes que no corresponden a su responsabilidad, puede haber un problema de modelado.
Las secuencias ayudan a validar diagramas de clases. Si una operación importante no tiene una clase responsable, el modelo puede estar incompleto. Si una clase concentra demasiados mensajes, puede estar haciendo demasiado.
Un diagrama de estados suele aplicarse a una clase o entidad importante. Los estados y transiciones deben ser compatibles con los atributos, operaciones y reglas representadas en el modelo de clases.
Por ejemplo, si la clase Turno tiene un atributo estado, el diagrama de estados puede detallar los valores válidos y transiciones. Si el diagrama de estados incluye Cancelado, Confirmado y Atendido, esos estados deberían estar contemplados por el modelo o por las reglas de negocio asociadas.
Los componentes agrupan responsabilidades de mayor nivel. Las clases o servicios internos deberían pertenecer razonablemente a esos componentes. Si una clase de facturación aparece dentro del componente de usuarios sin justificación, puede haber una mala separación de responsabilidades.
La coherencia entre componentes y clases ayuda a mantener una arquitectura comprensible. También permite ubicar cambios con mayor facilidad.
El diagrama de componentes muestra módulos de software. El diagrama de despliegue muestra dónde se ejecutan esos módulos o artefactos. Si un componente importante existe en la arquitectura, el despliegue debería mostrar dónde se ejecuta cuando esa información sea relevante.
Por ejemplo, si existe un Servicio de pagos como componente, el diagrama de despliegue puede mostrar si se ejecuta en un contenedor propio, en el mismo servidor de la API o como servicio externo.
Las responsabilidades deben mantenerse estables entre vistas. Si el ServicioTurnos es responsable de reservar turnos, no conviene que otro diagrama muestre a la interfaz de usuario realizando directamente validaciones complejas de disponibilidad, salvo que el diseño lo justifique claramente.
Cuando una responsabilidad cambia de lugar entre diagramas, puede ser señal de una decisión no actualizada o de una contradicción en el modelo.
Las relaciones también deben ser compatibles. Si el diagrama de clases indica que Pedido se compone de LíneasDePedido, los diagramas de objetos y secuencia deberían respetar esa idea. Si un diagrama de paquetes indica que Dominio no depende de Infraestructura, los diagramas de componentes no deberían mostrar lo contrario sin explicar la excepción.
Las relaciones inconsistentes suelen revelar dependencias mal entendidas o cambios no reflejados en todos los diagramas.
Un escenario debe mantener continuidad entre documentos y diagramas. Si el flujo principal dice que el sistema valida disponibilidad antes de reservar, la secuencia no debería guardar el turno antes de consultar disponibilidad.
La coherencia de escenarios es importante para pruebas. Si cada diagrama cuenta una versión distinta del flujo, será difícil derivar casos de prueba confiables.
Dos diagramas pueden tener distinto nivel de detalle y seguir siendo coherentes. Un caso de uso puede decir "el sistema registra el pedido", mientras que una secuencia puede detallar validaciones, cálculo de total, persistencia y notificación.
La diferencia de detalle es aceptable si ambas vistas cuentan la misma historia y no se contradicen.
Los modelos evolucionan. Cuando cambia una regla, una clase, un componente o un flujo, conviene revisar qué otros diagramas quedan afectados. No todos los diagramas deben actualizarse ante cualquier cambio, pero los que se usan como referencia deben mantenerse consistentes.
Un diagrama obsoleto puede causar más daño que la ausencia de diagrama, porque transmite una versión incorrecta del sistema.
| Aspecto | Pregunta de revisión |
|---|---|
| Nombres | ¿El mismo concepto se llama igual en todos los diagramas? |
| Relaciones | ¿Las asociaciones, dependencias y composiciones son compatibles? |
| Escenarios | ¿El orden y los resultados coinciden entre casos de uso, actividades y secuencias? |
| Responsabilidades | ¿Cada clase, componente o servicio mantiene una responsabilidad estable? |
| Estados | ¿Los estados usados son válidos para la entidad correspondiente? |
| Despliegue | ¿Los componentes importantes tienen una ubicación de ejecución cuando corresponde? |
La calidad de un modelo UML no depende solo de cada diagrama individual, sino también de la coherencia entre ellos. Cuando nombres, relaciones, escenarios y responsabilidades se mantienen consistentes, los diagramas funcionan como una documentación integrada y útil.
En el próximo tema veremos niveles de abstracción: diagramas conceptuales, de análisis y de diseño.