Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 91 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 92
Prova scritta 20 Giugno 2012, esercizio 4 Prova scritta 20 Giugno 2012, esercizio 5
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 93 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 94
Esercizio Ascii Skyline Edificio.java
Applicazione per visualizzare lo skyline di una citta mediate AsciiArt. public class Edificio extends AsciiArtImage {
Lo skylyine e un AsciiArt a cui possono essere aggiunti edifici (che a loro public Edificio(int lunghezza, int altezza,
volta sono AciiAart). char formaMattone) {
super(lunghezza, altezza, formaMattone);
Gli edifici sono di tre tipi: this.formaMattone = formaMattone;
Edifici generici (caratterizzati da lunghezza e altezza (LxH), mattone = #) }
Musei (edifici di dimensione 10x4, mattone = =)d
Negozi (edifici con un insegna, mattone = $) ...
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 95 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 96
}
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 97 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 98
Negozio.java (1) Negozio.java (2)
/* E come un edificio, ma prevede un insegna e il mattone e $ */
public class Negozio extends Edificio {
...
}
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 99 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 100
AsciiSkyline.java AsciiSkyline.java
/** Lo skyline e una AsciiArtImage vuota (carattere= ) */
class AsciiSkyline extends AsciiArtImage { class AsciiSkyline extends AsciiArtImage {
...
public AsciiSkyline(int lunghezza, int altezza) {
super(lunghezza, altezza, ); /* per testare questa classe */
}
static public void main(String[] args) {
public void aggiungi(int coordinataX, Edificio e) { AsciiSkyline s = new AsciiSkyline(70, 20);
this.disegna(0, coordinataX, e);
} s.aggiungi(1, new Edificio(8, 4));
... s.aggiungi(3, new Edificio(4, 12));
Si noti che:
s.aggiungi(17, new Edificio(9, 18));
s.aggiungi(12, new Museo());
AsciiArtImage definisce un metodo:
s.aggiungi(18, new Negozio(12, 3, "Pescivendolo"));
public void disegna(int y, int x, AsciiArtImage disegno)
che disegna limmagine specificata come argomento a partire dalla posizione (y, x). s.print();
Edificio e sottoclasse di AsciiArtImage
Museo, Negozio sono sottoclassi di Edificio }
}
Quindi possiamo invocare il metodo disegna specificando come terzo argomento
un oggetto di tipo Edificio, Museo o Negozio.
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 101 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 102
Struttura applicazione Struttura directory, compilazione ed esecuzione
Modello Struttura delle directory che contengono il progetto
Insieme delle classi che implementa la logica dellapplicazione. ./skyline:
|
Nel nostro caso e costituita dalle classi che modellano lo skyline e gli edifici.
|__./skyline/model:
Le raggruppiamo tutte in un package skyline.model. | |_ AsciiArtImage.java AsciiSkyline.java Edificio.java
1 Definiamo una directory skyline/model | |_ Museo.java Negozio.java
2 Poniamo in questa directory i file AsciiArtImage.java, AsciiSkyline.java, |
Edificio.java, Negozio.java, Museo.java. |__./skyline/view:
3 Aggiungiamo nel sorgente di ognuna delle classi, come prima istruzione, |_ Main.java
package skyline.model;
Compilazione
Vista Compiliamo contemporneamente tutte le classi del package skyline
Insieme delle classi che gestiscono linterazione fra lutente e il modello. > javac skyline/model/*.java skyline/view/*.java
Nel nostro caso sara costituita da un unica classe Main.java.
La poniamo in un package skyline.view Esecuzione
1 Definiamo una directory skyline/view > java skyline.view.Main
2 Poniamo in questa directory il file Main.java
3 Aggiungiamo nel sorgente della classe, come prima istruzione, Osservazione: in entrambi i casi siamo posizionati nella directory che
package skyline.view; contiene direttamente la directory skyline.
c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 103 c 2014 Mauro Ferrari v. 15.11.27 Esercitazione 9 104