Le associazioni riflessive

Una associazione riflessiva è una associazione di qualunque tipo (dipendenza, composizione, aggregazione) che una classe del nostro diagramma UML può avere con se stessa.
Questo sta ad indicare che un qualunque oggetto della classe è legato, in qualche modo, ad uno o più oggetti della stessa classe.

Nei diagrammi UML una associazione riflessiva può essere rappresentata come mostrato nelle figure seguenti:


Associazione UML di dipendenza riflessiva


Associazione UML riflessiva


Associazione UML di composizione riflessiva


Associazione UML di aggregazione riflessiva

Volendo fare qualche esempio concreto di associazione riflessiva, possiamo pensare, al file system di un sistema operativo. La classe cartella, ad esempio, potrebbe essere una aggregazione di altre cartelle, come mostrato nella figura seguente.


Esempio di associazione UML riflessiva - Cartella

Si noti che la classe cartella precedentemente raffigurata contiene solo un attributo di tipo Cartella[*] (collezione di cartelle) per modellare l'aggregazione. Tale situazione determina l'associazione unidirezionale (vedi freccia a punta aperta nella figura).

Se, invece, la classe avesse avuto anche l'informazione della cartella contenitore, ossia la cartella che contiene quella in questione, l'associazione sarebbe stata bidirezionale ed il modello UML sarebbe stato il seguente.

Esempio di associazione UML riflessiva bidirezionale - Cartella

Un altro esempio potrebbe derivare dalla modellazione del concetto di responsabile di un gruppo di impiegati di una azienda. Si potrebbe modellare una dipendenza riflessiva, come mostrato nella figura che segue.


Esempio di associazione UML riflessiva - Impiegato