Ésta es la primera entrada de una série donde vamos a intentar presentar algunos errores típicos que he ido detectando en el uso de UML, especialmente entre mis estudiantes. Espero que todos los que estén aprendiendo UML (y algunos que “ya saben”) puedan beneficiar de esta lista y vigilar estos errores al modelar. Como siempre, sugerencias de otros errores típicos són bienvenidas.

Para ilustrar nuestro primer problema, imaginar que hay que modelar un sistema que guarde información de personas (Person en ingles) y de sus padres ( parents). Con este requisito, muchos dibujarían un esquema como éste:

infinite reflexive association

A primera vista parecer una solución razonable, ¿no?. El diagrama indica que todas las personas pueden tener zero o más hijos y que cada persona tiene que tener dos padres (algunos prefieren poner entre uno y dos). Entonces, ¿dónde está el problema?

El problema es que este modelo obliga al usuario a introducir un número infinito de padres/antepasados para cada persona que se inserta en el sistema!

Es fácil verlo con un ejemplo. Imaginad que damos de alta una persona llamada Alberto. De acuerdo con el modelo, tenemos que dar de alta también los padres de Alberto para no violar la restricción de multiplicidad mínima de la asociación isParentOf . Por lo tanto, tenemos que insertar dos nuevas personas (e.g. José y Marta) indicando que son los padres de Alberto. A continuación, y cómo José y Marta són también personas, el sistema nos obliga a dar de alta sus cuatro padres. ¿Véis ya lo qué pasa? Después de eso tendremos que dar de alta los 8 abuelos de Jose y Marta, después los 16 bisabuelos,.. .

La única manera de acabar la recursión es decir que una persona es su propio ancestro cosa que obviamente no tiene sentido

Solución: la manera más fácil de evitar el problema es debilitar la restricción de multiplicidad. A lo mejor en el mundo real todas las personas tienen padres pero eso no puede ser cierto también en el sistema si queremos evitar problemas. Por lo tanto, una solución sería:

infinite reflexive association-solution

RECORDAD: las asociaciones reflexivas obligatorias sólo tienen sentido si el dominio admite que haya ciclos entre los objetos de la clase

Pin It on Pinterest

Share This