Tabla de Contenidos
L’aggregazione è un tipo di associazione tra classi che può essere eseguita in vari linguaggi di programmazione orientati agli oggetti, come Java. È un processo che consente di riutilizzare il codice in modo rapido ed efficiente, rendendo i programmi molto più facili da scrivere e da eseguire in modo più efficiente.
In generale, l’aggregazione fa riferimento a una classe all’interno di un’altra classe. Questo crea quella che viene chiamata una relazione HAS-A tra la classe contenitore e la classe contenitore. Queste relazioni sono caratterizzate dall’essere unidirezionali, in quanto implicano che una delle classi contenga l’altra; questo impedisce che accada il contrario.
Ad esempio, possiamo dire che un’azienda, che può essere vista dal punto di vista della programmazione come una classe di oggetti, ha un insieme di dipendenti; questi, a loro volta, possono anche essere visti come oggetti con propri attributi. In questo caso la classe contenitore è l’azienda, mentre la classe contenitore sono i dipendenti. Questa relazione ha senso solo in questa direzione, cioè dall’azienda al dipendente. La relazione in senso inverso non ha senso, poiché sarebbe come dire che il dipendente contiene l’azienda. Il fatto che ciò non abbia senso dimostra che si tratta di una relazione a senso unico.
Aggregazione nei diagrammi delle classi
Nell’Unified Modeling Language (UML), che è un tipo di linguaggio visivo universale creato per progettare sistemi software complessi, i diagrammi di classe vengono utilizzati per descrivere la struttura e le caratteristiche di un sistema. In questi diagrammi ogni classe e le sue relazioni con le altre sono rappresentate mediante figure geometriche. Nel caso dell’aggregazione, questa relazione è rappresentata da un rombo cavo sul lato della classe contenitore, che è collegato mediante un segmento di retta alla classe contenitore. Per esempio:
Questa è una relazione di aggregazione che indica che la classe Well contiene la classe Duck.
Come viene implementata l’aggregazione in Java?
L’implementazione dell’aggregazione in Java è relativamente semplice. Si tratta solo di creare due classi e quindi fare riferimento alla prima classe all’interno della seconda.
Oltre a stabilire una relazione “have a” o “have to”, l’aggregazione Java è caratterizzata da una debole relazione tra l’oggetto contenitore e il contenuto. Ciò significa che la distruzione dell’uno non implica la distruzione dell’altro. Per comprendere questo tipo di relazione, si può prendere come esempio il rapporto tra un insegnante e i suoi studenti. In questo caso, la scomparsa o la morte dell’insegnante non comporta la scomparsa o la morte dei suoi studenti.
Il caso opposto sarebbe il rapporto tra un essere umano e il suo cuore. Non c’è dubbio che il cuore è contenuto nell’essere umano, ma questo rapporto è diverso da quello di aggregazione. Questo perché, in questo caso, entrambi dipendono l’uno dall’altro. La distruzione dell’essere umano distrugge anche il cuore, poiché per funzionare ha bisogno dei nutrienti e dell’ossigenazione che il corpo fornisce. D’altra parte, la distruzione del cuore distrugge anche l’essere umano, poiché senza cuore non si può vivere (esclusi i casi di trapianti o altri metodi di supporto vitale artificiale).
Esempio di aggregazione
Il codice seguente esemplifica l’implementazione dell’aggregazione come forma di associazione tra due classi utilizzando Java. L’esempio riguarda un programma per tenere traccia di quali dipendenti di un’azienda hanno la propria auto e quali no, nonché quali hanno biciclette e quali no.
Poiché si cerca di stabilire una relazione che indichi che il dipendente “ha” un’auto e/o che il dipendente “ha” una bicicletta, si tratta di una relazione di aggregazione tra la classe a cui apparterrà il dipendente (che chiameremo Dipendente , per ovvie ragioni) e due ulteriori classi, una per l’auto e una per la bicicletta.
La prima cosa da fare in questi casi è creare le rispettive classi. In questo caso ci sono tre classi: una per l’auto, una per la bicicletta e una per il dipendente. La figura seguente mostra il codice per la creazione di queste classi, denominate Car, Bicycle e Employee.
Nel codice sopra puoi anche vedere che ogni classe ha determinati attributi ad essa associati. Nel caso dell’auto ha come attributi il modello, il colore e le targhe, tutti associati all’auto. Lo stesso accade con la bicicletta, alla quale viene associato un numero di targa e il modello.
Quando osserviamo la classe Employee, notiamo che questa classe ha gli attributi monbreemp , che rappresenta il nome del dipendente, ed empid, che rappresenta il numero identificativo del dipendente; quindi fa riferimento alle classi Auto e Moto, creando l’associazione di aggregazione tra queste classi. Infine, viene creato il record di un dipendente insieme alla sua auto e bicicletta.
Si noti che in questo esempio, il riferimento alle classi Car e Bike all’interno della classe Employee consente di accedere agli attributi bike e car dall’interno della classe Employee.
L’output di questo programma sarebbe:
________Dettagli del dipendente________
Nome del dipendente: Saverio
Numero di identificazione del dipendente: 210921
________Dettagli auto dipendente________
Modello auto: Corolla
Colore auto: verde
Targa auto: XFZ-043
________Dettagli bici del dipendente________
Modello bici: MERIDA
Targhe per biciclette: LAA-11B
Riferimenti
- Aggregazione nella programmazione Java . (2020). ICHI.PRO. https://ichi.pro/es/agregacion-en-programacion-java-144087060492693
- Barquinero, JMM (2019). Aggregazione Vs Composizione nei diagrammi delle classi. UML. | Blog MARI . blog MARI. https://www.seas.es/blog/informatica/agregacion-vs-composicion-en-diagramas-de-clases-uml/
- Tutoraggio software. (2019). OOP8 – Programmazione orientata agli oggetti in Java – Diagrammi UML e OOP – Esercizi [Video]. Youtube. https://www.youtube.com/watch?v=-Gy7Rf_wOeY