Table of Contents
Associazione
- La relazione di Associazione si rappresenta con una o due frecce su una linea continua .
- L'Associazione ha un nome
- I numerini indicano la molteplicità minima e massima (0..3, 1, *)
- Le classi possono avere un ruolo
- Può avere due versi di navigabilità (una o due frecce sulla linea), cioè DUE regole
- La relazione di Dipendenza si rappresenta con la freccia a linea tratteggiata. (classi astratte???)
Principio
Il verbo usato per descrivere questa relazione è uses: utilizzare
Come si realizza?
Se A e B sono in relazione di associazione, allora le funzioni membro della classe A usano (usa) oggetti di tipo B. Questo si può tradurre in:
- avere funzioni che hanno come argomenti copie, puntatori o reference a oggetti di tipo B
- avere funzioni che restituiscono copie, puntatori o reference a oggetti di tipo B.
- avere membri di tipo reference o puntatori a oggetti di tipo B
Class B; // non serve la definizione completa di B... Class A { public: void fun(B& b); };
A differenza dell'aggregazione, nell'associazione il compilatore deve solo usare un indirizzo di memoria e non deve conoscere necessariamente la dimensione dell'oggetto usato.
Esempio
Esempio di codice che fa uso dell'associazione
Esercizio
molti a molti
scrivere per bene il testo dell'esempio… persona e auto
ogni persona possiede piu auto ogni auto appartiere a piu' persone DUE REGOLE significa che c'e' un doppio orientamento partendo da auto si puo' arrivare a persona e viceversa
contraddizione con precedente paragrafo???come si realizza? ???quando e' a uno si usa un puntatore alla classe vicina ???quando e' a molti si usa un vettore di puntatori
tra due classi ci possonoo essere anche piu' relazioni (appartenere e e guidare) associazione riflessiva??
Classi associative
Se la relazione di associazione ha degli “attributi” si fa una linea tratteggiata perpendicolare a quella continua che rappresenta l'associazione e ci si attaccano gli attributi con una classe (detta appunto cl. associativa)che ha lo stesso nome dell'associazione. Quella classe conterrà tali attributi
In realtà questo schema può essere realizzato in modo equivalente con tre classi “normali” e due associazioni
Uno a molti
correntista e conto
ogni correntista possiede piu conti ogni conto e posseduto da piu' correntisti
il saldo e' un dato private perche' deve essere modificabile solo da un metodo del conto VERSAMENTO e PRELIEVO Due funzioni membro perche' devono operare sul saldo del conto