La generalización y la especialización permiten organizar conceptos del dominio en jerarquías. Un concepto general reúne características comunes, mientras que los conceptos especializados agregan diferencias relevantes. Por ejemplo, Persona puede generalizar a Paciente y Profesional si ambos comparten datos básicos, pero cumplen reglas y roles diferentes.
Las jerarquías pueden aclarar el modelo cuando reflejan diferencias reales del negocio. También pueden complicarlo cuando se usan por costumbre, por parecido superficial o por trasladar prematuramente ideas de programación al análisis conceptual.
Generalizar significa identificar un concepto más amplio que agrupa conceptos más específicos. Por ejemplo, si Paciente y Profesional comparten nombre, documento y datos de contacto, podríamos pensar en un concepto general Persona.
Pero generalizar no consiste solo en encontrar atributos repetidos. La generalización debe tener sentido para el dominio. Si el negocio no habla de Persona o no necesita reglas comunes para personas, quizá esa abstracción no aporte claridad.
Especializar significa definir conceptos más concretos a partir de uno general. Cada especialización hereda el significado común y agrega reglas, relaciones o comportamientos propios. Por ejemplo, Profesional puede tener matrícula, especialidades y agenda; Paciente puede tener historia clínica, cobertura e historial de turnos.
Una especialización debe responder a diferencias importantes. Si los conceptos especializados no tienen reglas ni relaciones distintas, tal vez no haga falta crear una jerarquía.
Una jerarquía suele ser útil cuando:
Una jerarquía puede ser innecesaria cuando solo se crea para ordenar visualmente conceptos, evitar repetición mínima de atributos o imitar una estructura técnica. Si la jerarquía no ayuda a expresar reglas ni a conversar con expertos, probablemente agrega complejidad.
Por ejemplo, crear PacienteConEmail y PacienteSinEmail como subtipos sería exagerado si la diferencia solo es la presencia opcional de un dato. En ese caso, un atributo opcional o una regla de contacto puede ser suficiente.
Una heurística simple consiste en probar si la frase "es un tipo de" tiene sentido en el dominio. Un Profesional es un tipo de Persona puede sonar razonable. Un Turno cancelado es un tipo de Turno puede parecer razonable, pero quizás en realidad "cancelado" sea un estado, no una especialización.
La prueba ayuda, pero no alcanza. Además de sonar bien, la jerarquía debe aportar reglas o diferencias conceptuales claras.
Un error frecuente es confundir tipos con estados. Un tipo suele representar una clasificación más estable. Un estado representa una situación transitoria dentro del ciclo de vida de una entidad.
Por ejemplo, Turno presencial y Turno virtual podrían ser tipos de turno si tienen reglas y datos diferentes. En cambio, Turno reservado, Turno cancelado y Turno atendido probablemente sean estados, porque un mismo turno puede pasar por esas situaciones durante su vida.
También es común confundir tipos con roles. Un rol es una función que una persona o entidad cumple en un contexto determinado. Una misma persona puede ser Paciente, Profesional, Responsable de pago o Usuario administrativo, según el dominio.
Si una entidad puede cumplir varios papeles al mismo tiempo o cambiar de papel según el contexto, modelar cada rol como subtipo puede ser limitante. A veces conviene modelar Persona y asociarla con roles, permisos o perfiles.
Algunas clasificaciones no deberían convertirse en jerarquías porque son configurables por el negocio. Por ejemplo, tipos de especialidad, categorías de producto, motivos de cancelación o niveles de prioridad pueden cambiar sin alterar la estructura conceptual principal.
Si cada nueva categoría exige modificar el modelo, quizás la jerarquía está demasiado rígida. En esos casos puede convenir modelar Categoría, Tipo o Motivo como conceptos configurables.
En un sistema de turnos, Persona puede generalizar información común como nombre, documento y datos de contacto. Paciente puede especializar Persona con historia clínica, cobertura y reglas de reserva. Profesional puede especializar Persona con matrícula, especialidades y agenda.
Esta jerarquía puede ser útil si el dominio realmente trata a ambos como personas y existen reglas comunes. Pero si Paciente y Profesional se gestionan de forma completamente separada, o si una misma persona puede ser ambas cosas, quizá convenga modelar roles en lugar de herencia conceptual rígida.
Turno presencial y Turno virtual podrían ser especializaciones si tienen reglas diferentes. Un turno presencial puede requerir consultorio o sede. Un turno virtual puede requerir enlace de videollamada, plataforma y reglas de conexión.
Si la única diferencia es un atributo "modalidad", quizá no conviene crear subtipos. La decisión depende de si las reglas del negocio son realmente distintas y significativas.
En modelado de dominio, una jerarquía expresa una relación conceptual. No obliga a implementar herencia de clases en el código. Durante el diseño técnico, el equipo puede representar esa diferencia con herencia, composición, estrategias, tipos enumerados, tablas separadas u otros mecanismos.
Confundir herencia conceptual con herencia de programación puede llevar a modelos rígidos. Primero debemos entender la clasificación del negocio; luego se decide cómo implementarla.
La siguiente tabla muestra situaciones frecuentes:
| Situación | Posible enfoque | Motivo |
|---|---|---|
| Paciente y Profesional comparten datos, pero tienen reglas propias. | Generalización Persona, si el dominio la reconoce. | Existe parte común y diferencias relevantes. |
| Turno reservado, cancelado y atendido. | Estados de Turno. | Un turno puede cambiar entre esas situaciones. |
| Usuario administrador y usuario operador. | Roles o permisos. | Puede depender del contexto y cambiar con el tiempo. |
| Motivos de cancelación configurables. | Catálogo o tipo configurable. | El negocio puede agregar motivos sin cambiar el modelo principal. |
| Turno presencial y virtual con reglas distintas. | Especialización o modalidad con reglas. | Depende de la cantidad y profundidad de diferencias. |
Antes de crear una jerarquía, conviene preguntar:
Al modelar generalización y especialización, suelen aparecer estos errores:
La generalización y la especialización son herramientas útiles cuando ayudan a expresar diferencias reales del dominio. Pero una jerarquía mal elegida puede volver el modelo rígido, difícil de mantener y alejado del lenguaje del negocio. Antes de crear subtipos, conviene revisar si la diferencia corresponde a un tipo, un estado, un rol o una configuración.
En el próximo tema estudiaremos las reglas de negocio, incluyendo condiciones, restricciones, cálculos y decisiones que el modelo debe hacer visibles.