User Tools

Site Tools


appunti3s:composizione

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.

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

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

Esempio

Codice sorgente con esempio di 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: 2020/06/08 22:19 (external edit)