Composizione

  • 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.
  • 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

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.

Poiché la relazione è forte è necessario dichiarare una classe nel namespace di una classe contenitore. In questo modo è realizzato anche il principio dell'esclusività.

Class A
{   
 private:    
    Class B
    {
    };
};

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à. Se la molteplicità è uno si realizza aggiungendo dei puntatori nella classe contenitore. Se la molteplicità è maggiore di uno si implementa con i vettori

Codice sorgente con esempio di composizione

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)