Modelado de datos con UML: Generalización y Especialización

La generalización (o especialización según se mire) es una relación es-un (is-a en inglés) entre dos clases de modo que una, la subclase o clase hija, se considera como forma especializada (refinada) de la otra, la superclase o clase padre. La superclase se considera como generalización de la subclase y la subclase se considera una especialización de la superclase.
También se suele denominar relación de herencia ya que representa el mismo concepto del paradigma de orientación a objetos:
  • La subclase hereda (adquiere implícitamente) todos los atributos, métodos y asociaciones definidos en la clase padre.
  • Todas las instancias de la subclase son un subconjunto de las instancias de la superclase. Es decir, cualquier instancia de la subclase es una instancia de la superclase también. La relación inversa no es cierta: una instancia de la superclase no tiene por qué ser también instancia de la subclase. Por ejemplo, todo automóvil es un vehículo, pero no todo vehículo es un automóvil (puedo serlo, pero también puede ser una bicicleta, un avión, etc.)
Las relaciones de generalización son entre clases, no entre instancias como ocurre en el resto de asociaciones.
Se dibujan mediante una flecha de triángulo blanco teniendo en cuenta que la flecha siempre apunta de la subclase hacia la superclase. Fíjate en el siguiente ejemplo:
Tenemos una jerarquía entre las clases Animal, Mamífero y Gato. Todo gato es siempre un mamífero y también un animal; pero no todos los animales son gatos (pueden ser perros, caballos…).
Gato contiene 6 atributos: nombre y especie, que los hereda de Animal; númPatas y tienePelo, que los hereda de Mamífero, y color y raza, que le son propios.
Gato, al ser un animal, hereda la relación "vive en" con Ecosistema. También la hereda la clase Mamífero.
HERENCIA SIMPLE Y MÚLTIPLE
En función del número de padres que tiene una clase distinguimos dos tipologías:
  • Herencia simple. La clase solamente tiene un único padre. Se recomienda siempre el uso de esta opción ya que de cara a la construcción la mayoría de lenguajes de programación orientados a objetos sólo admiten este tipo de herencia.
  • Herencia múltiple. La clase hereda de varios padres.
Profesor Primaria es un Profesor (herencia simple). Sin embargo Profesor Universitario es a la vez un Profesor y un Investigador (herencia múltiple). A su vez, Profesor e Investigador son personas (herencia simple).
JERARQUÍAS
En algunos casos, especializamos una clase padre mediante varias subclases en función de un criterio. Esta clasificación se llama jerarquía o grupo de generalización.
  • El criterio de clasificación de los hijos se llama discriminante.
  • Al dibujar las jerarquías, se agrupan  las clases con mismo discriminante en un mismo origen. El discriminante se escribe cerca de las líneas.
En el ejemplo de arriba, un animal lo podemos clasificar según su clase (mamífero o reptil) o bien según su alimentación (hervíboro o carnívoro). Las jerarquías nos permiten agrupar diferentes subclases según discriminante.
COBERTURA Y SOLAPAMIENTO
A la hora de modelar una jerarquía de clases hemos de tener en cuenta definir las propiedades de cobertura y de solapamiento.
La cobertura de una jerarquía nos indica si es obligatorio que todas las instancias de una clase padre se clasifiquen en alguna de las clases hijas. Los posibles valores de cobertura son:
  • Complete. Cada instancia de la superclase es obligatoriamente también instancia de alguna (o varias) subclases.
  • Incomplete. puede haber instancias de la superclase que no sean instancias de ninguna subclase.
El solapamiento nos indica si una instancia puede pertenecer a la vez a diferentes subclases. Los posibles valores de solapamiento son:
  • Disjoint. Una instancia de la clase padre sólo puede ser de una única clase hija.
  • Overlapping. Se permite que una instancia pertenezca a varias subclases.
Se utiliza la notación {, } o bien {, }. Si no se especifica ningún valor, por defecto una jerarquía es {incomplete, disjoint}.
Si la jerarquía sólo contiene una subclase, las propiedades de cobertura y solapamiento no se especifican ya que no aplican.
En este caso, un empleado llamado Miguel podría ser Técnico y Administrativo a la vez. También podría no ser de ninguna categoría y pertenecer directamente a la clase Empleado.
En este otro caso las tarjetas sólo pueden ser de dos tipos: Crédito o Débito. Una tarjeta de débito no puede ser nunca de crédito y viceversa.

Comentarios