====== 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?