User Tools

Site Tools


appunti3s:associazione

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
appunti3s:associazione [2018/11/09 15:02]
profpro
appunti3s:associazione [2020/06/08 22:19] (current)
Line 1: Line 1:
 +[[appunti5s:associazioni_possibili]]
 +
 +====== Associazione ======
 +{{:appunti3s:cpp-associazione.png|}}
 +  * 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
 +<code>
 +Class B; // non serve la definizione completa di B...
 +
 +Class A
 +{
 +   public:
 +           void fun(B& b);
 +};
 +</code>
 +
 +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'{{:appunti3s:associazione.zip|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