Linea guida: Aggregazione
L'aggregazione modella una relazione di composizione tra elementi del modello. Questa linea guida descrive come utilizzare questa relazione.
Relazioni
Descrizione principale

Aggregazione

L'aggregazione viene utilizzata per modellare una relazione di composizione tra elementi del modello. Esistono diversi esempi di relazioni di composizione: una Libreria contiene Libri, all'interno di un'azienda i Reparti sono formati da Impiegati, un Computer è composto dalle Periferiche. Per modellare tali elementi, l'aggregato (Reparto) dispone di un'associazione aggregazione alle relative parti che lo costituiscono (Impiegato).

Un quadro vuoto viene allegato alla fine di un percorso di associazione dal lato dell'aggregato (l'insieme), per indicare aggregazione.

Esempio

In questo esempio, un Cliente dispone di un Indirizzo. Si usa l'aggregazione perché le due classi rappresentano parte di un insieme più ampio. Si è anche scelto di modellare Indirizzo come classe separata, poiché sono stati utilizzati anche molti altri tipi di elementi.

Esempio di aggregazione

Un oggetto aggregato può mantenere insieme altri oggetti.

Aggregazione condivisa

Una relazione di aggregazione con una molteplicità superiore a quella stabilita per l'aggregato è denominata condivisa e l'eliminazione dell'aggregato non elimina necessariamente le parti. Per implicazione, un aggregato condiviso forma un grafico o un albero con numerosi elementi principali. Le aggregazioni condivise vengono utilizzate nei casi in cui esiste una relazione solida tra le due classi, in modo che la stessa istanza possa partecipare in due aggregazioni differenti.

Esempio

Considerare il caso in cui una persona dispone di un business in casa. Sia la persona che il business hanno lo stesso indirizzo. L'indirizzo è una parte integrante sia della persona che del business. Eppure il business potrebbe cessare di esistere, lasciando la persona nello stesso indirizzo.

Tenere inoltre presente che, in questo caso, è possibile iniziare con l'aggregazione condivisa, quindi convertirla in aggregazione non condivisa in un secondo momento. Il business in casa potrebbe crescere e prosperare, spostandosi anche in quartieri separati. A questo punto, la persona e il business non condivideranno più lo stesso indirizzo. Come risultato, l'aggregazione non è più condivisa.

Esempio di aggregazione

Un esempio di aggregazione condivisa.

Composizione

La Composizione è una forma di aggregazione con una forte appartenenza e una durata coincidente della parte con l'aggregato. La molteplicità dell'estremità dell'aggregato (nell'esempio Ordine) potrebbe non superarne uno (ad esempio, non può essere condivisa). Anche l'aggregazione è invariabile, ossia, una volta stabilita, non è possibile modificarne i collegamenti. Per implicazione, un'aggregazione composita forma un "albero" di parti, con l'elemento principale come aggregato e le "sezioni" come parti.

Un'aggregazione di composizioni dovrebbe essere utilizzata rispetto all'aggregazione "semplice" quando esiste una relazione di forte interdipendenza tra l'aggregato e le parti; in cui la definizione dell'aggregato è incompleta senza le parti. Nel seguente esempio, non ha senso avere un Ordine se non è stato ordinato nulla, ad esempio Voci della riga). In alcuni casi, è possibile identificare all'inizio tale interdipendenza come analisi (come nel caso di questo esempio), ma spesso è solo durante la progettazione che tali decisioni possono essere prese con sicurezza.

Un quadro pieno viene allegato alla fine di un percorso di associazione per indicare composizione, come mostrato di seguito:

Aggregazione di composizione

Un esempio di aggregazione di composizione

Esempio

In questo esempio, l'Interfaccia del cliente è composta da diverse altre classi. In questo esempio, le molteplicità delle aggregazioni non sono ancora specificate.

Un esempio di aggregazione di composizione

Un oggetto Interfaccia del cliente sa quali oggetti Video, Stampante di ricevuta, Tastierino numerico e Altoparlanti gli appartengono.

Utilizzo della composizione per modellare le proprietà della classe

Una proprietà di una classe è qualcosa che la classe riconosce come propria. Come nel caso della classe Cliente, mostrato in precedenza, è possibile scegliere di modellare l'Indirizzo del cliente come classe (come è stato appena dimostrato) o come serie di attributi della classe. La decisione di utilizzare una classe e la relazione di aggregazione o una serie di attributi, dipende da quanto segue:

  • E' necessario che le 'proprietà' abbiano identità indipendenti, in modo che sia possibile fare riferimento ad esse da numerosi oggetti? In tal caso, utilizzare una classe e un'aggregazione.
  • E' necessario che diverse classi abbiano le stesse 'proprietà'? In tal caso, utilizzare una classe e un'aggregazione.
  • Le 'proprietà' hanno una struttura complessa e proprietà specifiche? In tal caso, utilizzare una classe (o classi) e un'aggregazione.
  • Altrimenti, utilizzare gli attributi.

Esempio

In uno sportello automatico, il sistema deve tenere traccia del cliente corrente e del relativo codice PIN: si presupponga che l'interfaccia del cliente sia responsabile di ciò. Queste informazioni possono essere pensate come "proprietà" della classe. Tale operazione può essere effettuata utilizzando una classe separata, nel seguente modo:

Proprietà modellate utilizzando un'aggregazione

Proprietà di un oggetto modellate utilizzando un'aggregazione

L'alternativa, consentire all'interfaccia del cliente di tenere traccia del cliente corrente e del relativo codice PIN utilizzando gli attributi viene modellata nel seguente modo:

Proprietà modellate utilizzando gli attributi

Proprietà di un oggetto modellate utilizzando gli attributi

La decisione di utilizzare gli attributi o un'associazione di aggregazione in una classe separata viene determinata in base al grado di dipendenza tra i concetti rappresentati: quando i concetti modellati sono strettamente collegati, utilizzare gli attributi. Quando è possibile che i concetti cambino in modo indipendente, utilizzare l'aggregazione.

Aggregazione o Associazione?

Si consiglia di utilizzare l'aggregazione solo nei casi in cui esiste una relazione di composizione tra le classi, in cui una classe è composta da altre classi, dove le parti sono incomplete al di fuori del contesto generale. Considerare il caso di un Ordine: non ha senso avere un ordine "vuoto" che non consiste in "nulla". La situazione è identica per tutti gli aggregati: i reparti devono avere impiegati, le famiglie devono avere dei componenti, ecc.

Se le classi possono avere un'identità indipendente esterna al contesto fornito da altre classi, se non fanno parte di un insieme più ampio, si consiglia di utilizzare le relazioni di associazioni. Inoltre, nei casi dubbi, un'associazione è più adeguata; le aggregazioni sono, generalmente, ovvie e la scelta di un'aggregazione viene effettuata solo per una migliore chiarificazione. Non è una scelta cruciale per il buon esito dell'impegno di modellazione.

Aggregazioni in se stesse

A volte, una classe può essere aggregata con se stessa. Questo non significa dire che un'istanza di quella classe è composta da se stessa (sarebbe sciocco), bensì che è un aggregato composto da altre istanze della stessa classe. Nel caso delle aggregazioni in se stesse, i nomi ruolo sono essenziali per distinguere lo scopo dell'associazione.

Esempio

Considerare la seguente aggregazione in se, che include la classe Prodotto:

Esempio di aggregazione in se

In questo esempio, un prodotto può essere composto da altri prodotti; in tal caso, i prodotti aggregati vengono denominati sotto-prodotti. L'associazione è percorribile solo dall'aggregato al sotto-prodotto; ad esempio, i sotto-prodotti non sanno di quali prodotti fanno parte (poiché potrebbero far parte di diversi prodotti).