Table of Contents
Aggregazione
- una linea continua con il simbolo del rombo vuoto vicino alla classe contenitore
- i numerini indicano la molteplicità
- Ha sempre UNO SOLO verso di percorrenza (quindi una regola)
- la Composizione ha il simbolo del rombo pieno.
Principio
Il verbo usato per descrivere questa relazione è has: possedere, avere, essere composto da… Nell'Aggregazione le classi componenti esistono indipendentemente dalla classe contenitore
Come si realizza?
Possedere un oggetto significa avere un oggetto membro di quel tipo…
Le classi componenti esistono indipendentemente dalla classe contenitore, quindi non è necessario definire tali classi all'interno dei contenitori, come lo è invece nella composizione. , perciò il distruttore del contenitore non si deve occupare della distruzione delle componenti. Se la molteplicità è uno si realizza aggiungendo dei reference nella classe contenitore.
Se la molteplicità è maggiore di uno si implementa con array di puntatori o vector (i vector lavorano per copia)
class B { //... }; class A { private: B m_b; };
Esempio
File sorgenti di un esempio di aggregazione
Esercizio
Creare le classi per disegnare punti e segmenti sul piano cartesiano. Lo stesso esempio può essere risolto:
- con l'aggregazione se considero i punti pre-esistenti al segmento e quindi indipendenti.
- con la composizione se considero di creare due nuovi punti per ogni segmento (non rappresento punti singoli)
Analisi del problema
- il segmento può essere creato a partire da punti pre-esistenti?
- cosa accade al punto se distruggo il segmento?(esclusività)
- cosa accade al segmento se distruggo un suo punto?
- un punto può appartenere a due segmenti contemporaneamente?