En los diagramas de casos de uso UML, la generalización permite representar una relación entre un elemento general y elementos más específicos. Puede aplicarse tanto a actores como a casos de uso.
La idea es similar a una relación de herencia: un actor especializado puede participar en los mismos casos de uso que el actor general, y además puede tener casos propios. De manera parecida, un caso de uso especializado puede conservar el comportamiento general de otro y agregar o ajustar detalles.
La generalización puede simplificar diagramas cuando existen roles o comportamientos con una base común, pero debe usarse con cuidado. Si se aplica sin necesidad, el modelo se vuelve más complejo y menos claro.
Generalizar significa identificar algo común entre varios elementos y representarlo en un elemento más amplio. Especializar significa tomar ese elemento general y crear variantes más concretas.
Por ejemplo, Usuario registrado puede ser un actor general, mientras que Paciente y Médico pueden ser actores especializados si comparten ciertos casos de uso, como Iniciar sesión o Actualizar datos personales.
La generalización se representa con una línea continua y una flecha triangular vacía que apunta hacia el elemento más general. El elemento especializado queda en el origen de la línea y el elemento general queda en la punta de la flecha.
Si Paciente y Médico son tipos de Usuario registrado, las flechas salen desde Paciente y Médico hacia Usuario registrado.
En el ejemplo, Usuario registrado representa un actor general que puede iniciar sesión y actualizar sus datos. Paciente y Médico son actores especializados: heredan esas interacciones comunes y además pueden participar en casos propios, como Solicitar turno o Consultar agenda diaria.
La generalización de actores se usa cuando varios actores comparten casos de uso o características de participación. En lugar de repetir las mismas asociaciones para cada actor, se puede crear un actor más general.
Ejemplo:
Paciente y Médico heredan las asociaciones del actor general Usuario registrado.
Conviene usar generalización de actores cuando:
Si no existe una relación clara de especialización, es mejor usar actores separados sin generalización.
Un error común es usar generalización solo para ordenar visualmente el diagrama. No debe usarse para agrupar actores que parecen parecidos, sino para representar una relación real de especialización.
Por ejemplo, Paciente y Servicio de mensajería no deberían generalizarse bajo un actor común llamado Participante del sistema, porque no comparten una naturaleza útil ni una relación de herencia funcional clara.
La generalización también puede aplicarse a casos de uso. Un caso de uso especializado conserva el comportamiento general de otro caso de uso y agrega o redefine detalles.
Por ejemplo, Realizar pago podría ser un caso de uso general, mientras que Realizar pago con tarjeta y Realizar pago por transferencia podrían ser casos especializados si comparten un objetivo común pero tienen diferencias específicas.
La generalización de casos de uso conviene cuando hay variantes de un mismo objetivo general y esas variantes tienen comportamiento común significativo.
Ejemplos posibles:
Si las variantes son simples alternativas dentro de un mismo flujo, puede ser más claro documentarlas como flujos alternativos.
La generalización no significa lo mismo que inclusión ni extensión. Cada relación comunica una idea distinta.
| Relación | Idea principal | Ejemplo |
|---|---|---|
| Generalización | Un elemento especializado es un tipo de otro más general. | Paciente es un tipo de Usuario registrado. |
| <<include>> | Un caso de uso incorpora obligatoriamente otro comportamiento. | Solicitar turno incluye Validar disponibilidad. |
| <<extend>> | Un caso de uso agrega comportamiento condicional a otro. | Programar recordatorio extiende Solicitar turno. |
En un sistema de turnos médicos, podría existir un actor general Usuario autenticado. Ese actor participa en casos como Cerrar sesión o Actualizar datos personales.
Luego pueden existir actores especializados:
La generalización evita repetir asociaciones comunes si realmente todos los actores especializados comparten esos casos.
Supongamos que el sistema permite registrar distintos tipos de personas. Puede existir un caso general Registrar persona y casos especializados Registrar paciente y Registrar profesional.
El comportamiento común podría incluir cargar datos personales, validar documento y guardar información básica. Los casos especializados podrían agregar datos de cobertura médica o matrícula profesional.
Antes de usar generalización, conviene preguntar:
La generalización puede ser útil, pero no debe usarse en exceso. Un diagrama con muchas jerarquías puede volverse difícil de leer, especialmente para usuarios no técnicos.
En casos de uso, la claridad suele ser más importante que la elegancia formal del modelo. Si la generalización no ayuda a comprender mejor, probablemente no haga falta.
Al usar generalización, suelen aparecer estos errores:
La generalización permite representar relaciones de especialización en diagramas de casos de uso. Puede simplificar modelos cuando varios actores o casos comparten comportamiento común y tienen diferencias específicas.
Sin embargo, debe usarse con moderación. Un modelo simple y claro suele ser mejor que una jerarquía compleja que pocos entienden. En el próximo tema veremos errores frecuentes en diagramas de casos de uso y cómo evitarlos.