back to top

Diagramma delle classi: aggregazione e composizione – Guida UML

Nel capitolo precedente abbiamo definito in maniera chiara ed esaustiva che cosa si intende per associazione. In questo capitolo analizziamo altri tipi di associazione, per certi versi un po’ più complessi, dette aggregazione e composizione. Spesso questo tipo di relazioni tra classi tendono ad essere confuse oppure ad essere utilizzate in maniera errata dato che la differenza che intercorre tra le due non è, a primo acchito, ben visibile. Entrambe le relazioni vengono definite come relazione di tipo whole-part ovvero relazione tutto-parte nelle quali le classi parte, con aggregazione e composizione, vanno a creare una classe tutto. Solitamente le classi parte sono classi abbastanza semplici la cui composizione o aggregazione forma una classe tutto ben più complessa e completa. Identifichiamo adesso la differenza principale tra aggregazione e composizione:

  • l’ggregazione viene definita come una relazone non forte ovvero una relazione nella quale le classi parte hanno un significato anche senza che sia presente la classe tutto.
  • la composizione, invece, è definita come una relazione forte cioè una relazione nella quale le classi parte hanno un reale significato solo se sono legate alla classe tutto.

Aggregazione

Prima di elencare, in maniera dettagliata le varie proprietà dell’aggregazione, mostriamo un esempio a riguardo:

Esempio di rappresentazione di una aggregazione in UML

Lo schema sopra mostra le relazioni che intercorrono tra la classe Museo e le classi Quadro e Statua. In sostanza il significato di quell’aggregazione indica che un Quadro o una Statua si può trovare in un solo museo ed un museo ha uno o più oggetti di tipo Quadro e Statua. Il lettore a questo punto potrebbe dire? Che differenza intercorre tra un’aggregazione e una associazione normale con molteplicità una o più? Dal punto di vista del codice non esiste una reale differenza, ma l’aggregazione indica una collezione di oggetti, un insieme ben definito, presenti in un’altra classe (il museo avrà una collezione di quadri e una di statue). La classe Museo viene definita come aggregato e dalle proprietà dell’aggregazione si ha che l’aggregato può comunque esistere senza alcune classi parte; infatti potremmo avere un museo di soli quadri. Un aggregato mancante di qualche classe parte risulta, ovviamente, incompleto rispetto alle previsioni ed è possibile che più aggregati condividono le stesse classi parte. Un esempio di quanto affermato si può trovare in ambito elettronico dove un determinato componente può essere utilizzato nell’aggregato per realizzare una scheda madre di un computer oppure per realizzare un lettore DVD.

Composizione

Andiamo adesso a mostrare un possibile uso della composizione in un diagramma delle classi in UML:

Esempio di rappresentazione di una composizione in UML

Le relazioni nel diagramma sono ovvie: un Animale è composto da due o più Zampe, da un Tronco e da una Testa. Già nella lettura dello schema, si può interpretare la semantica della composizione e notare la differenza rispetto all’aggregazione. Infatti nella composizione ogni classe parte appartiene ad una ed una solaclasse tutto e, conseguentemente, si denota la relazione forte tra il composito e le classi parte in quanto il composito ne gestisce completamente la creazione e la distruzione. Chiaramente, questa relazione forte implica che quando il compisito viene distrutto automaticamente anche le classi parte vengono distrutte in quanto non avrebbe senso la loro esistenza senza un composito.

Questi due tipi di associazioni, come detto precedentemente, spesso vengono usate in maniera errata, usate l’una per l’altra. La cosa migliore per padroneggiare questi strumenti, molto potenti e iportanti per lo sviluppo di sistemi complessi, è l’esercizio manualmente nella progettazione.

PubblicitÃ