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.