User Tools

Site Tools


appunti3s:aggregazione

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

appunti3s:aggregazione [2018/04/25 07:55]
appunti3s:aggregazione [2020/06/08 22:19] (current)
Line 1: Line 1:
 +====== 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. <del>, perciò il distruttore del contenitore **non** si deve occupare della distruzione delle componenti.</del> <del>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)
 +</del>
 +<code>
 +class B
 +{
 + //...
 +};
 +
 +class A
 +{
 +   private:
 +        B m_b;
 +};
 +</code>
 +
 +
 +===== 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?