Differences

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

Link to this comparison view

appunti3s:composizione [2018/04/25 07:55] (current)
Line 1: Line 1:
 +====== Composizione ======
 +{{:​appunti3s:​cpp-composizione.png|}}
 +  * una linea continua con il simbolo del rombo pieno appoggiato alla classe //​contenitore//​
 +  * i numerini indicano la molteplicità
 +  * Ha sempre DUE versi di percorrenza (quindi due regole)
 +  * l'​Aggregazione ha il simbolo del rombo vuoto. ​
  
 +===== Principio ​ di esclusività =====
 +  * La classe del componente può andar a comporre una sola classe contenitore
 +  * Non si possono creare nuovi oggetti senza creare prima il loro oggetto contenitore
 +===== Descrizione =====
 +
 +Il verbo usato per descrivere questa relazione è //has//: possedere, avere, essere composto da... 
 +Nella Composizione le classi componenti esistono solo in relazione alla classe contenitore. Non si possono creare oggetti al di fuori di tali classi.
 +
 +===== Come si realizza? =====
 +Poiché la relazione è forte è necessario dichiarare una classe nel namespace di una classe contenitore. ​
 +In questo modo è realizzato anche il principio dell'​esclusività.
 +<​code>​
 +Class A
 +{   
 + ​private: ​   ​
 +    Class B
 +    {
 +    };
 +};
 +</​code>​
 +
 +In questo modo tutte le funzioni membro della classe contenitore hanno accesso a tutti i dati membro dell'​altra classe. Il costruttore della classe contenitore inizializzerà questi oggetti come inizializza gli altri oggetti. ​
 +Se gli oggetti sono creati nello stack verranno inizializzati/​distrutti automaticamente,​ mentre se puntato nell'​heap **dovrà** occuparsene il costruttore/​distruttore.
 +
 +Se è necessario usare più volte questi oggetti (come 4 gambe di un tavolo) si possono usare vector.
 +
 +Non confondere la molteplicità con il numero di versi di navigabilità.
 +<​del>​Se la molteplicità è uno si realizza aggiungendo dei puntatori nella classe //​contenitore//​.
 +Se la molteplicità è maggiore di uno si implementa con i vettori</​del>​
 +===== Esempio =====
 +
 +Codice sorgente con esempio di {{:​appunti3s:​composizione.zip|composizione}}
 +
 +===== 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)
  • appunti3s/composizione.txt
  • Last modified: 2018/04/25 07:55
  • (external edit)