Associazione vs. aggregazione

Ho esaminato molte informazioni su queste cose, ma non riesco a capire qual è la differenza tra loro? In UML Distilled di Fowler si afferma che Aggreagation è strettamente privo di significato, quindi l’autore raccomanda di non usarlo nei diagrammi. Spiega, per favore, quando dovrei usare ciascuno di essi e come influenzerà il codice java.

Questa è una domanda molto discutibile. Come Martin spiega nella risposta , l’Ordine aggrega il Prodotto. E questo può essere considerato vero. Grady Booch nella sua “Analisi e progettazione orientata agli oggetti” offre un esempio simile per l’associazione: una vendita è associata a prodotti in quella vendita e viceversa. E una vendita non aggrega i prodotti. Quindi tutti gli esempi dovrebbero essere specifici del dominio, perché da un altro punto di vista l’associazione potrebbe diventare più specifica. Un altro esempio è la composizione di Documenti che utilizzano i paragrafi.

Quindi tutto in questo campo dipende fortemente dal contesto. Questo è l’OOP.

Puoi provare ad applicare le tue conoscenze a un particolare progetto che stai progettando. Ti consiglierei di leggere il libro di Grady Booch, se non l’hai ancora fatto. Molti libri sono stati scritti da allora, ma è ancora la Bibbia di OO *.

Esistono quattro tipi di relazioni di class

  1. Associazione: utilizza a
    Es: un Man class usa una Pen class (la penna è ancora lì quando l’uomo muore)
  2. Aggregazione: ha a
    Es: un Man class ha una Car class (l’auto è ancora lì quando l’uomo muore)
  3. Composizione: possiede a
    Es: un Man class possiede un Heart class (quando l’uomo muore, il cuore muore)
  4. Eredità: è a
    Es: un Class Man è un Class Human (Man is a Human)

Una relazione tra classi di oggetti

Ereditarietà> Composizione> Aggregazione> Associazione

Associazione significa che due classi hanno un qualche tipo di relazione, potrebbe essere qualsiasi cosa veramente.

La composizione e l’aggregazione sono due tipi di associazioni. Il modo più semplice per distinguerli è pensare a “quanto sia dura” la relazione. Pensa a cosa succede quando elimini l’object proprietario.

Aggregazione, l’object aggregato continua a vivere. (Pensa all’ordine <-> prodotto, il prodotto continua a vivere).

Composizione, l’object aggregato muore con il proprietario. (Pensa ai paragrafi <-> documento, i paragrafi muoiono con il documento).

Un’aggregazione può essere considerata priva di significato poiché non c’è davvero molta differenza tra disegnare una linea con una freccia non piena (associazione) e una linea con un diamante non pieno (aggregazione). Le relazioni sono molto simili. La linea con diamante pieno (composizione) è tuttavia molto diversa.

La composizione, l’aggregazione e l’associazione semplice di UML sono concetti semantici , non concetti di programmazione . Il loro significato può essere compreso come segue:

  • Composizione : A consiste di B; B è una parte di A e quindi non può esistere senza A
  • Aggregazione : A possiede B, B appartiene ad A
  • Associazione : A usa B, A è legato a B in un determinato modo

(La Composizione e l’Aggregazione sono tipi speciali di associazioni.)

In Java, puoi implementarli tutti nello stesso modo. È una differenza concettuale.

L’associazione è qualsiasi relazione tra classi in cui le istanze di una class hanno un riferimento di campo a un’istanza di un’altra class.

La composizione è una relazione “più forte”, nel senso che un’istanza (genitore) “possiede” un altro (figlio).

È Aggregation che non ha alcuna semantica aggiuntiva oltre a essere un’associazione.

Vedi di più qui: http://martinfowler.com/bliki/AggregationAndComposition.html

EDIT: puoi aggiungere alcune semantiche speciali al simbolo dell’aggregazione, ad esempio “Può essere posseduto da un massimo di un genitore alla volta, ma può cambiare i genitori o essere un orfano”. Tuttavia, tali estensioni sono le tue e non sono definite in UML, per quanto ne so.

Sembra esserci un dibattito su quale sia la parola.

Ha a che fare con le relazioni genitore-figlio tra oggetti e cosa succede ai bambini quando si elimina il genitore.

Uno scenario dice che i bambini non hanno vita al di fuori di quella dei loro genitori, quindi dovrebbero essere cancellati quando il genitore viene eliminato. Pensa “CANCELLA CASCADE” in chiavi esterne e database relazionali.

L’altro scenario dice che i bambini dovrebbero persistere oltre i loro genitori, quindi non dovrebbero essere cancellati quando i loro genitori vengono cancellati.

Lascerò agli altri il compito di discutere quale parola descrive ogni situazione.