Diagrama de clases

En el ámbito del dominio del problema, nos centraremos en la identificación de clases. Una clase es la “descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y semánticas” (Booch et al., 2006).

En UML cada clase se representa por un rectángulo. En etapas tempranas del análisis orientado a objetos, generalmente el rectángulo sólo contiene el nombre de la clase, como la clase Vendedor, de la Figura 3. Cuando se conoce mejor el dominio del problema y se está en condiciones de establecer las clases relevantes que deberán ser usadas en el diseño, cada clase se representa con su nombre, atributos y operaciones (clase Cliente de la Figura 3).

Representación de una clase en UML
Figura 3. Representación de una clase en UML.

Un diagrama de clases es un “diagrama que muestra un conjunto de clases, interfaces y colaboraciones y sus relaciones” (Booch et al., 2006). Dado que los párrafos anteriores describen las clases, en este apartado se definirán las relaciones que pueden presentarse en un diagrama de clases que representa los conceptos del dominio del problema.

Las relaciones son conexiones semánticas entre clases. Las más relevantes son dependencia, generalización, asociación, agregación y composición. La figura 4 muestra algunos ejemplos de ellas.

Representación en UML de las relaciones entre clases
Figura 4. Representación en UML de las relaciones entre clases.

La dependencia es una relación de uso que declara que un elemento utiliza la información y los servicios de otro elemento, pero no necesariamente a la inversa. Se representa gráficamente con una línea discontinua dirigida hacia el elemento del cual depende. En el diagrama de clases las dependencias indican que una clase utiliza las operaciones de otra o que utiliza variables o parámetros cuyo tipo viene dado por la otra clase. Generalmente se utilizan las relaciones de dependencia cuando se está proponiendo el diseño del software.

La generalización es una relación entre un elemento general (padre) y un caso más específico de ese elemento (hijo). También se le conoce como relación “es un tipo de”. Ejemplo: Un gato “es un tipo de” felino. Cuando se usa una relación de generalización, la clase hijo puede sustituir a la clase padre. La clase hijo hereda las propiedades de la clase padre, y la clase hijo puede añadir atributos y operaciones. La generalización se representa gráficamente como una línea dirigida continua, con punta en forma de triángulo vacío apuntando a la clase padre.

La asociación es una relación estructural que especifica que los objetos de un elemento están conectados con los objetos de otro. La asociación representa una relación estructural entre iguales y ambas clases están en el mismo nivel y tienen la misma importancia. Es válido que los extremos de una asociación estén conectados a la misma clase. Puede existir más de una asociación entre las mismas clases. La asociación se representa con una línea continua que conecta la misma o diferentes clases.

La agregación representa una relación “todo/parte” una cosa grande (el todo) consta de elementos más pequeños (las partes). Es un tipo especial de asociación en donde un objeto (todo) tiene objetos de la parte. Esta relación sólo es conceptual, no semántica. La agregación se representa con una línea continua, como la usada en la asociación, sólo que el extremo que se une al objeto (todo) es un rombo vacío.

La composición es una forma de agregación con una fuerte relación de pertenencia y vidas coincidentes de la parte con el todo. Las partes con una multiplicidad no fijada pueden crearse después de la parte compuesta, pero una vez creadas viven y mueren con el objeto (todo). La parte compuesta es responsable de disponer de las partes. Debe gestionar la creación y destrucción de éstas. Gráficamente, la composición se representa como la relación de agregación, sólo que el rombo está lleno.


Elementos para definir las asociaciones

Las asociaciones siempre deben definir el nombre de la asociación entre dos clases así como su multiplicidad. En ocasiones se prefiere definir los roles en lugar del nombre de la asociación.

Nombre. Describe la naturaleza de la relación. Se puede utilizar una flecha para dar sentido a la lectura de la asociación. Se incluye el nombre cuando los roles no han sido especificados.

Rol.Cuando una clase participa en una asociación, tiene un rol específico. Un rol es simplemente la cara que la clase de un extremo de la asociación presenta a la clase del otro extremo. Se denomina nombre de extremo.

Multiplicidad.Especificación del rango de cardinalidades (número de elementos) permisible que puede asumir un conjunto. Se escribe como una expresión con un valor mínimo y un máximo separados por dos puntos consecutivos: 1..* (1 a muchos) 0..* (cero a muchos o sólo *). Un rango de enteros: (3..5). Un número exacto (2..2).