Modelando relaciones en UML, un acercamiento a las Asociaciones

En este artículo les traigo un análisis sobre las relaciones típicas de UML, como trabajar con ellas y algunas nociones de modelado.

Al modelar los elementos que constituyen el vocabulario de un sistema, también hay que modelar como se relacionen entre si estos elementos. Pero típicamente encontramos complejidad en estas redes de relaciones, para sortear este inconveniente tenemos que tener un acabado conocimiento del uso de la relaciones.

Hablando con diseñadores en diversos escenarios manifiestan conocimiento sobre relaciones, "utilizo a diario en mis diseños, dependencias, generalizaciones y asociaciones", pero el interrogante que emerge "¿Es suficiente la utilización básica de las relaciones para capturar los detalles de los sistemas actuales?"

Para niveles aceptables de diseño, muchas veces es necesario profundizar sobre las relaciones y este objetivo intentaré cubrir en este artículo, como sería muy extenso tratar todas las relaciones voy a optar por definir como eje "las asociaciones" en posteriores artículos podemos analizar el resto.

¿Qué es una relación?

"Una relación es una conexión entre elementos. En el modelado orientado a objetos, los cuatro tipos más importantes de relaciones son las dependencias, generalizaciones, asociaciones y realizaciones"

Analicemos rápidamente a las asociaciones:

"Una asociación es una relación estructural que especifica que los objetos de un elemento se conectan a los objetos de otro".


En la figura anterior tenemos dos clases, empleado y documento relacionados por una relación de asociación sin adornos.

Hay cuatro tipos de adornos básicos que se aplican a las asociaciones: nombre, rol en cada extremo de la asociación, multiplicidad en cada extremo y agregación.

Como nuestro objetivo es realizar un análisis avanzado sobre la relación, vamos a tener que conceptualizar y aplicar navegabilidad, visibilidad y calificación.

Navegabilidad: "Dada una asociación simple, sin adornos entre dos clases (como el ejemplo planteado), es posible navegar de los objetos de un tipo a los del otro tipo. A menos que se indique lo contrario, la navegación a través de una asociación es bidireccional".

Esto conceptualmente es correcto pero existen ocasiones en donde se desea restringir este mecanismo y trabajar de unidireccional para dotar de mayor detalle a nuestro modelo.


Y en este punto tengo que aclarar algo que es importante:

"Especificar una dirección de recorrido no significa necesariamente que no se pueda llegar nunca de los objetos de un extremo a los del otro. El concepto expresa un enunciado de que, dado un objeto en un extremo, se puede llegar fácil y directamente a los objetos del otro extremo, normalmente debido a que el objeto inicial almacena algunas referencias a ellos".

Completemos este sencillo ejemplo con roles, ¿Que implica esto?


Como podemos observar ya tenemos navegabilidad, agregamos multiplicidad también a nuestro pequeño modelo y aplicamos roles también, graficando la asociación entre las entidades.

Ahora de este punto surge un nuevo concepto a tener en cuenta, "la visibilidad" en este caso de la asociación.

Visibilidad: "Dada una asociación entre dos clases, los objetos de una clase pueden ver y navegar hasta los objetos de la otra, a menos que se restrinja explícitamente por un enunciado explícito de navegación"

En UML se pueden especificar tres niveles de visibilidad para el extremo de una asociación, igual que para las características de una clase, adjuntando un símbolo de visibilidad al nombre de un rol.

Veamos cómo realizar esta operación en una herramienta de modelado: (voy a utilizar EA)

Al modelo anteriormente presentado voy a establecer algunos retoques sobre la asociación:


Como vemos en las propiedades de la asociación, dentro del rol de destino puedo establecer su ámbito que restringe a objeto externos a la asociación (por defecto esto es público). El resultado es el siguiente:


Tenemos muchas variantes para retocar pero sigamos analizando los conceptos planteados y solo nos resta definir la calificación.

Calificación: "Es el contexto de una asociación, uno de los esquemas de modelado más frecuentes tiene que ver con el problema de las búsquedas"

En UML se modela este esquema con un calificador, que es un atributo de una asociación.


Como lo realizo en la herramienta de modelado:


Nuevamente utilizando EA podemos ver sobre las propiedades de una asociación la utilización de un calificador que agrega detalle a nuestro modelo y permite aplicar el concepto de calificación para un ejemplo muy simple.

Bien, aplicamos algunos conceptos avanzados de las relaciones que nos provee UML, particularmente hemos trabajado sobre las asociaciones ahora si es interesante dejarles algunas nociones de modelado en las redes de relaciones:

  1. No hay que comenzar de forma aislada (leer escenarios o UC dependiendo la estrategia utilizada en el modelado)
  2. Hay que empezar modelando las relaciones estructurales que estén presentes.
  3. A continuación es sano identificar las posibles relaciones de generalización/especialización.
  4. Solo después de completar los pasos precedentes se deberían buscar dependencias.
  5. Para cada tipo de relación hay que comenzar con su forma básica y aplicar las características avanzadas solo cuando sea absolutamente necesario.
  6. Puede y es sano modelar con diversas vistas las relaciones entre entidades.

Espero les sea de utilidad este acercamiento a las relaciones de UML donde vimos algunas pinceladas de características avanzadas sobre las asociaciones.


Bibliografia: "El lenguaje unificado de modelado" - Booch, Jacobson y Rumbaugh

Comentarios

Entradas más populares de este blog

Utilizando Intents implícitos para crear actividades

Entendiendo la personalidad de mi equipo, cual es tu estilo?