Ingegneria del Software Java Relazioni Associazioni 1
Associazione Uno a Zero-Uno Un esempio Un autovettura ha al più un proprietario 0..1 Dato il verso di navigazione specificato è necessario avere una reference ad un oggetto all interno dell oggetto I due oggetti hanno cicli di vita indipendenti +Marca: String +Modello: String +Titolare: Associazione Uno a Zero-Uno (2) Classe File:.java public class { private String Cognome; private String Nome; (String Cognome, String Nome){ this.cognome = Cognome; this.nome = Nome; public String getnome(){ return Nome; public String getcognome(){ return Cognome; 2
Associazione Uno a Zero-Uno (3) Classe File:.java public class { private String Marca; private String Modello; private Titolare; (String Marca, String Modello, Titolare){ this.marca = Marca; this.modello = Modello; this.titolare = Titolare; void stampa(){ System.out.println("Dati del proprietario dell'auto "+Marca+" "+Modello); System.out.println("Nome: "+Titolare.getNome()); System.out.println("Cognome: "+Titolare.getCognome()); Associazione Uno a Zero-Uno (4) Classe Main File: Main.java Output public class Main { public static void main(string[] args) { // Dichiarazione degli oggetti Alfa; Ford; Coronato; // Creazione degli oggetti Coronato = new ("Antonio","Coronato"); Alfa = new ("Alfa Romeo","156",Coronato); Ford = new ("Ford","Fiesta",Coronato); Dati del proprietario dell'auto Alfa Romeo 156 Nome: Coronato Cognome: Antonio Dati del proprietario dell'auto Ford Fiesta Nome: Coronato Cognome: Antonio // Stampa report Alfa.stampa(); System.out.println(); Ford.stampa(); Corso di Ingegneria del Software 3
Associazione Uno a Uno Un esempio Un autovettura ha un solo proprietario 1 I due oggetti hanno cicli parzialmente di vita indipendenti Nell esempio precedente la reference all oggetto poteva valere NULL (valore zero della relazione) Si deve gestire in maniera affidabile la cancellazione dell oggetto Che cosa succede all oggetto se il suo viene eliminato dal sistema? Associazione Bi-direzionale Esempio Si tiene conto anche delle Autovetture possedute da un 0..* 0..1 E necessario avere una struttura di reference agli oggetti all interno dell oggetto 4
Associazione Zero (Uno) a Molti Esempio Si tiene conto anche delle Autovetture possedute da un 0..* Una soluzione basata su array : String : String +Auto: [ ] Associazione Zero (Uno) a Molti (2) Classe File:.java public class { private String Marca; private String Modello; (String Marca, String Modello){ this.marca = Marca; this.modello = Modello; public String getmarca(){ return Marca; public String getmodello(){ return Modello; [ ] 5
Associazione Zero (Uno) a Molti (2) Classe File:.java public class { private String Cognome; private String Nome; private [] Auto; (String Cognome, String Nome, [] Auto){ this.cognome = Cognome; this.nome = Nome; this.auto = Auto; public void stampaauto(){ [ ] System.out.println("Report delle auto di "+" "); for(int i = 0; i < Auto.length; i++) System.out.println("Marca: "+Auto[i].getMarca()+" Modello: "+Auto[i].getModello()); Corso di Ingegneria del Software Università Federico II di Napoli Associazione Zero (Uno) a Molti (3) Classe Main File: Main.java public class Main { public static void main(string[] args) { // Dichiarazione [] Auto; Coronato; // Implementazione Auto = new [2]; Alfa = new ("Alfa Romeo","156"); Ford = new ("Ford","Fiesta"); Output Report delle auto di Coronato Antonio Marca: Alfa Romeo Modello: 156 Marca: Ford Modello: Fiesta Auto[0] = Alfa; Auto[1] = Ford; Coronato = new ("Antonio","Coronato",Auto); [ ] Corso di Ingegneria del Software Università Federico II di Napoli // Stampa report Coronato.stampaAuto(); 6
Associazione Zero (Uno) a Molti Esempio Si tiene conto anche delle Autovetture possedute da un 0..* Una soluzione basata su LinkedList Maggiore dinamicità Aggregazioni 7
Aggregazioni Ancora una volta i cicli di vita degli oggetti devono essere indipendenti salvo molteplicità particolari Si utilizzano le stesse soluzioni adottate per le associazioni Composizioni 8
Composizioni Un esempio Motore 1 +Cilindrata: Int +Potenza: Int Gli oggetti hanno ciclo di vita condiviso Classe Motore Composizioni (2) File: Motore.java public class Motore { private int Cilindrata; private int Potenza; Motore(int Cilindrata, int Potenza){ this.cilindrata = Cilindrata; this.potenza = Potenza; int getpotenza(){ return Potenza; int getcilindrata(){ return Cilindrata; 9
File:.java public class { private String Marca; private String Modello; private Motore Mo; Composizioni (3) (String Marca, String Modello, int Cilindrata, int Potenza){ this.marca = Marca; this.modello = Modello; Mo = new Motore(Cilindrata,Potenza); (String Marca, String Modello, Motore Mo){ this.marca = Marca; this.modello = Modello; this.mo = Mo; public String getmarca(){ return Marca; public String getmodello(){ return Modello; public int getcilindrata(){ return Mo.getCilindrata(); public int getpotenza(){ return Mo.getPotenza(); Università Federico II di Napoli File: Main.java public class Main { public static void main(string[] args) { Classe Main Composizioni (4) // Dichiarazione ed implementazione Alfa = new ("Alfa Romeo","156",1900,150); Motore Mo = new Motore(1100,75); Ford = new ("Ford","Fiesto",Mo); // Stampa report alfa System.out.println("Report Auto "); System.out.println("Marca: "+Alfa.getMarca()); System.out.println("Modello: "+Alfa.getModello()); System.out.println("Cilindrata: "+Alfa.getCilindrata()); System.out.println("Potenza: "+Alfa.getPotenza()); System.out.println(); System.out.println(); Output Report Auto Marca: Alfa Romeo Modello: 156 Cilindrata: 1900 Potenza: 150 // Stampa report ford fiesta System.out.println("Report Seconda Auto "); System.out.println("Marca: "+Ford.getMarca()); System.out.println("Modello: "+Ford.getModello()); System.out.println("Cilindrata: "+Ford.getCilindrata()); System.out.println("Potenza: "+Ford.getPotenza()); Corso di Ingegneria del Software Report Seconda Auto Marca: Ford Modello: Fiesto Cilindrata: 1100 Potenza: 75 10