Modifiche recenti - Cerca:

Categorie

Pagine utente

Winzipedia

Uso dell'wiki

modifica il menu

SoluzioneVisitorPrimoCompitino

Informatica3.SoluzioneVisitorPrimoCompitino Versioni

Nascondi le modifiche minori - Mostra le modifiche

Modificate le linee 2-3: da:
'''Autori:''' [[Profiles.Francesco|Francesco Gianni]]
a:
'''Autore:''' [[Profiles.Francesco|Francesco Gianni]]
Modificate le linee 2-3: da:
'''Autori:''' [[Profiles.Francesco|Francesco Gianni]]\\
a:
'''Autori:''' [[Profiles.Francesco|Francesco Gianni]]
24/06/2006 ore 13:45 CEST di Vincenzo - Modifica del sommario
Modificate le linee 3-4: da:
'''Hanno contribuito:'''
a:
Modificate le linee 5-8: da:
*[-Introduzione all'esercizio-]
*[-Codice JAVA commentato-]
*[-Conclusioni
-]
a:
->[-Soluzione dell'esercizio sul patter ''Visitor'' proposto nel primo compitino di '''Informatica 3''' dell'anno accademico 2005/06.-]
Aggiunte le linee 1-121:
!Soluzione esercizio sul Pattern Visitor, primo compitino 2006
'''Autori:''' [[Profiles.Francesco|Francesco Gianni]]\\
'''Hanno contribuito:'''

->'''Sommario'''
*[-Introduzione all'esercizio-]
*[-Codice JAVA commentato-]
*[-Conclusioni-]

!!Introduzione
Testo dell'esercizio proposto nel compitino:

!!!Esercizio 4


!!Codice JAVA commentato

!!!Interfaccia {+Visitor+}

public interface Visitor <T> {

public T visit(Aula a); //metodo definito generico sul tipo che restituisce infatti la classe
//Direttore, che implementa Visitor, restituisce un Integer (vedere Direttore)
}

!!!Interfaccia {+Visitable+}

public interface Visitable {

public void accept(Visitor v);

}

!!!Classe astratta {+Aula+}

public abstract class Aula implements Visitable{

private int posti = 0;
private String name = "Aula";

public void accept(Visitor v){
v.visit(this);
}

public int getPosti() {
return posti;
}

public void setPosti(int posti) {
this.posti = posti;
}

public String getName(){
return this.name;
}

}

!!!Classe {+Laboratorio+}

public class Laboratorio extends Aula {

private String name = "Laboratorio";

public String getName() {
return name;
}

}

!!!Classe {+AulaMagna+}

public class AulaMagna extends Aula{

private String name = "Magna";

public String getName() {
return name;
}

}

!!!Classe {+Direttore+}

public class Direttore implements Visitor{

public Integer visit(Aula a) {
System.out.println("Visiting... " + a.getName() + " posti: " + a.getPosti());
return a.getPosti();
}

}

!!!Classe {+Main+}

public class Main {

public static void main(String[] args) {

Aula la = new Laboratorio(); //creo un laboratorio
Aula ma = new AulaMagna(); //creo un aula magna
la.setPosti(3); //setto a 3 il numero di posti del laboratorio
ma.setPosti(23); //setto a 23 il numero di posti dell'aula magna

Visitor d = new Direttore(); //creo un oggetto che implementa il Visitor (Direttore)
d.visit(la); //usando il metodo implementato da Direttore
d.visit(ma); //visito il laboratorio e l'aula magna

la.setPosti(42); //cambio il numero di posti del laboratorio
la.accept(d); //visito laboratorio usando il suo metodo accept(Visitor v)
} //invece che usare il metodo visit del Direttore
//risultato identico
}

!!!Output del programma
Visiting... Laboratorio posti: 3
Visiting... Magna posti: 23
Visiting... Laboratorio posti: 42

!!Conclusioni
Modifica - Versioni - Stampa - Modifiche recenti - Cerca
Ultima modifica il 02/08/2006 ore 23:19 CEST