User Tools

Site Tools


appunti3s:composizione

Differences

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

Link to this comparison view

appunti3s:composizione [2018/04/25 07:55]
appunti3s:composizione [2020/06/08 22:19] (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)