Un'associazione collega una classe all'altra per indicare una relazione tra loro. Ad esempio, hai un'associazione tra Customer
e Order
che (senza ulteriori informazioni) indica che:
-
Un cliente può avere un ordine o forse più ordini,
-
Un ordine può appartenere a un cliente o forse condiviso da più clienti.
Il diagramma nella tua domanda fornisce informazioni aggiuntive: c'è un solo cliente per ordine e zero o più ordini per cliente, quindi le regole diventano:
-
Un cliente ha zero o più ordini,
-
Un ordine appartiene a uno e un solo cliente.
Mentre l'aggregazione viene utilizzata nell'associazione tra Order
e OrderDetail
, non viene utilizzata nell'associazione tra Customer
e Order
. Questo viene fatto per indicare la dipendenza dal ciclo di vita. Se un'istanza di Order
viene distrutta, anche tutte le istanze di OrderDetail
al suo interno verranno distrutte; d'altra parte, le istanze di Order
sono indipendenti dal ciclo di vita dell'istanza Customer
, quindi nessuna aggregazione qui.
Ciò non significa che un ordine possa esistere senza un cliente: l'associazione 1 ↔ 0 .. * vieta esplicitamente gli ordini che non hanno clienti. La differenza tra un'associazione 1 ↔ 0 .. * e l'aggregazione avviene realmente sul livello del ciclo di vita.