martedì 6 ottobre 2015

UML - Le proprietà delle relazioni

Oggi scrivo qualche appunto relativo alle proprietà delle relazioni UML

Ogni relazione fra elementi UML, può avere le seguenti proprietà:

Cardinalità (o molteplicità)
Rappresenta il numero di oggetti minimo e massimo, che è possibile associare ad una classe.
La relazione può essere di tre tipi: uno a uno, uno a molti, o molti a molti. In un diagramma UML è indicata da un numero (1, 1..6, *) vicino alla fine del un segmento di congiunzione ad un elemento.

I possibili valori di molteplicità sono:
  • molti (*)
  • uno (1)
  • zero o più (0..*)
  • uno o più (1..*)
  • zero o uno (0..1)
  • all'interno di un range (2..4)
Guadando le cardinalità dell'esempio del post sulle relazioni UML (e ricordando che la regola  è valida, per il momento temporale in cui viene descritta), abbiamo le seguenti cardinalità:


Un datore di lavoro può avere da un minimo di zero ad uno o più dipendenti (quando un datore di lavoro viene creato, non deve avere necessariamente un dipendente). La molteplicità persona, datore di lavoro invece non è segnata quindi la relazione viene detta indefinita. Una persona ha una sola posizione (e deve necessariamente averne una per il momento ed il contesto in cui si trova) e una entità posizione è ricoperta da una sola persona. Una posizione è creata ed è assegnata da un datore di lavoro e senza di lui non esisterebbe.

Navigabilità
Può essere unidirezionale (un oggetto fa riferimento ad un altro, ma non il contrario), oppure bidirezionale (un oggetto fa riferimento ad un altro e viceversa).

Quando una classe può "navigare" o aggiornare l'associazione vuol dire che ha responsabilità sulla stessa.

Una relazione unidirezionale, può avere anche  una freccia invece del rombo, sul segmento di collegamento fra gli elementi.
Ecco un esempio di relazione di contenimento, unidirezionale:

In questo diagramma, un Libro è un contenitore di (puntatori a) pagine, ma anche le pagine hanno le loro relazioni di navigazione. Un lettore, (oppure un browser), che visualizzano una pagina alla volta, beneficia dei collegamenti alle pagine vicine e al sommario. Ogniuno di questi collegamenti è unidirezionale, e nella figura sopra ne possiamo vedere di tre tipi diversi.

Per la lista di pagine m_pagine non vi è nessuna relazione inversa raffigurata, quindi questa poterebbe rappresentare una relazione di contenimento unidirezionale, ma anche bidirezionale.

Se c'è bisogno che Pagina possa muoversi nell'oggetto Libro che la contiene, la direzionalità sul diagramma, dovrebbe essere mostrata, etichettando l'alta estremità del rapporto e/o aggiungendo un attributo m_libro alla classe Pagina.

Per adesso è tutto, se ci sono domande o altro scrivetemi pure un feedback.

Grazie a tutti.