Programmazione con Java Le associazioni - e-Learning

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