====== Aggregazione ======
{{:appunti3s:cpp-aggregazione.png|}}
* 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 {{:appunti3s:aggregazione.zip|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?