Software Architecture Lab www.sal.disco.unimib.it Programmazione con Java Associazioni Le associazioni • Ogni sistema è composto da più classi • Le associazioni collegano classi e sono il mezzo attraverso cui gli oggetti possono interagire • Concetto molto simile a (derivato da) le relazioni nei diagrammi relazionali dei DB • Un’associazione è un legame semantico fra classi; significa che fra i corrispondenti oggetti c’è un legame (detto link) • Un link è un’istanza di associazione così come un oggetto è istanza di una classe • Per default, un’associazione è bidirezionale, anche se può essere resa unidirezionale Software Architecture Lab www.sal.disco.unimib.it Associazioni 2 1 Un esempio di associazione Motore + + Classe Auto +ilMotore numeroCilindri: int 1 potenza: int + + 1 + + marca: String modello: String velocitaMassima: int targa: String Classe Associazione Fra le classi Auto e Motore c’è un’associazione: questo significa che fra ogni istanza della classe auto e ogni istanza della classe motore c’è un link Oggetto : classe = link : associazione La navigabilità specifica in quale classe verrà codificata l’associazione Associazioni Software Architecture Lab www.sal.disco.unimib.it 3 Realizzazione public class Auto{ public String marca; public String modello; … public Motore ilMotore; } public class Motore{ public int cilindrata; public int potenza; … } public class Test{ public static void main(String[] args) { Auto a = new Auto(); Motore m = new Motore(); … a.ilMotore = m; } } Software Architecture Lab www.sal.disco.unimib.it Associazioni 4 2 Esercizio: Partita ‐ classi • Codificare in Java le classi rappresentate nel seguente diagramma delle classi +squadra1 Partita Squadra 1 + stadio: String +squadra2 + nome: String 1 +arbitro 1 Arbitro + + numeroTesserino: int nome: String Associazioni Software Architecture Lab www.sal.disco.unimib.it 5 Esercizio: Partita ‐ oggetti • Dato il diagramma delle classi precedente, realizzare una classe Java nel cui main sono codificate le istruzioni per realizzare il seguente diagramma degli oggetti arbitro :Arbitro +arbitro nome = Tagliavento numeroTesserino = 12345 partita :Partita stadio = Meazza +squadra1 +squadra2 squadraOspite :Squadra squadraDiCasa :Squadra nome = Sampdoria Software Architecture Lab www.sal.disco.unimib.it nome = Inter Associazioni 6 3 Esercizio: Docente ‐ classi • Codificare in Java le classi rappresentate nel seguente diagramma delle classi Laureando + + +relatore 1 1 Tesi +tesi matricola: int nome: String 1 + titolo: String +correlatore Docente + nome: String Associazioni Software Architecture Lab www.sal.disco.unimib.it 7 Esercizio: Docente ‐ oggetti • Dato il diagramma delle classi precedente, realizzare una classe Java nel cui main sono codificate le istruzioni per realizzare il seguente diagramma degli oggetti +tesi tesi :Tesi pippo :Laureando nome = Pippo matricola = 123456 titolo = Visualizatore di spazi +correlatore +relatore docente2 :Docente nome = Bianchi Software Architecture Lab www.sal.disco.unimib.it Associazioni docente1 :Docente nome = Rossi 8 4 Esercizio: Francobollo ‐ classi • Codificare in Java le classi rappresentate nel seguente diagramma delle classi +destinatario Persona Lettera 1 + + nome: String indirizzo: String + peso: int +mittente 1 +affrancatura 1 Francobollo + valoreFacciale: int Associazioni Software Architecture Lab www.sal.disco.unimib.it 9 Esercizio: Francobollo ‐ oggetti • Dato il diagramma delle classi precedente, realizzare una classe Java nel cui main sono codificate le istruzioni per realizzare il seguente diagramma degli oggetti persona1 :Persona nome = Pluto indirizzo = Milano +mittente persona2 :Persona nome = Pippo indirizzo = Roma +destinatario francobollo :Francobollo valoreFacciale = 60 +affrancatura lettera :Lettera peso = 80 Software Architecture Lab www.sal.disco.unimib.it Associazioni 10 5 Liste • Situazioni come la seguente come si codificano? +next 0..1 Vagone + + classe :int capienza :int • Sorgenti ed esempi… Software Architecture Lab www.sal.disco.unimib.it Associazioni 11 Esercizio • Si realizzi una rete ferroviaria costituita da quattro stazioni • Ogni stazione ha un identificativo numerico univoco che va da 1 a 4 • Ogni stazione è collegata con la stazione precedente e la successiva secondo la seguente configurazione – (1,2) (2,3) (3,4) • Definire la classi Stazione che modella la rete, utilizzando attributi pubblici. • Scrivere una classe Prova contenente un main che: – costruisce la rete ferroviaria sopra descritta utilizzando un solo riferimento; – inserisce un nuovo nodo tra 2 e 3 con identificativo 5; – attende in input una coppia di numeri (stazioni) e restituisce il numero di stazioni intermedie estremi inclusi; – termina se riceve 0 in input. Software Architecture Lab www.sal.disco.unimib.it Associazioni 12 6 Array di reference • In situazioni tipo la seguente Auto + + + Garage +auto targa: String lunghezza: int 0..* larghezza: int + + indirizzo: String piani: int • La semplice elencazione può non essere possibile – Quanti reference? – Lo so solo a run‐time • Soluzione: array di reference – Stessa dichiarazione degli array di tipo primitivo Software Architecture Lab www.sal.disco.unimib.it Associazioni 13 Esercizio • Si consideri una rete ferroviaria in cui esistono: – 4 stazioni, caratterizzate da un identificatore numerico (da 1 a 4); – un insieme di linee, ciascuna delle quali collega due stazioni ed è caratterizzata da un tempo di percorrenza (minuti); – i collegamenti esistenti sono fra le seguenti stazioni: (1 ‐ 2) (2 ‐ 3) (3 ‐ 4) (4 ‐ 5). I tempi di percorrenza sono rispettivamente: 10, 20, 30, 40. • Definire le classi Stazione e Linea che modellano la rete, utilizzando attributi pubblici. • Scrivere una classe Prova contenente un main che: – costruisce la rete ferroviaria sopra descritta utilizzando un array di reference; – attende in input una coppia di numeri (stazioni) e restituisce il tempo di percorrenza fra esse; – termina se riceve 0 in input. Software Architecture Lab www.sal.disco.unimib.it Associazioni 14 7