Sei sulla pagina 1di 4

Prova scritta 20 Giugno 2012, esercizio 3

public A(Figura[] figure) {


int contaQuadrati = 0, contaCerchi = 0;
for (int i = 0; i < figure.length; i++)
if (figure[i] instanceof Quadrato)
contaQuadrati++;
else if (figure[i] instanceof Cerchio)
Esercitazione 9 contaCerchi++;

this.cerchi = new Cerchio[contaCerchi];


this.quadrati = new Quadrato[contaQuadrati];
contaCerchi = 0;
contaQuadrati = 0;
for (int i = 0; i < figure.length; i++)
if (figure[i] instanceof Quadrato)
quadrati[contaQuadrati++] = (Quadrato) figure[i];
else if (figure[i] instanceof Cerchio)
cerchi[contaCerchi++] = (Cerchio) figure[i];
}

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

public double areaCerchi() {


double risultato = 0; array a vuoto: [x=2, y=0.0]
for (int i = 0; i < this.cerchi.length; i++) array a = null: [x=3, y=0.0]
risultato += this.cerchi[i].getArea(); array a = [R(2,3)]: [x=2, y=2.0]
array a = [R(2,3), Q(5), C(1)]: [x=1, y=27.0]
return risultato;
}

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 {

#### private static final char MATTONE_DEFAULT = #;


####
#### ### private char formaMadttone = MATTONE_DEFAULT;
#### ###
$$$$ #### ### ========== public Edificio(int lunghezza, int altezza) {
$$$$ ####$$$$$$# ==========
$$$$ ####$$$$##############=== super(lunghezza, altezza, MATTONE_DEFAULT);
$$$$ ####$$$$##############=== }

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

Edificio.java (2) Museo.java


// i musei sono edifici 10x4 con mattone =
public class Museo extends Edificio {

... private static final int LARGHEZZA = 10;


public char getFormaMattone() { private static final int ALTEZZA = 4;
return this.formaMattone; private static final char MATTONE = =;
}

public static void main(String[] args) { public Museo() {


Edificio ed = new Edificio(10, 5);
ed.print(); super(LARGHEZZA, ALTEZZA, MATTONE);
} }
}
public static void main(String[] args) {
Museo museo = new Museo();
museo.print();
}

}
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 {

private static final char MATTONE = $;


private String insegna;
...
public Negozio(int lunghezza, int altezza, String insegna) {
public static void main(String[] args) {
super(lunghezza, altezza, MATTONE); Negozio negozio = new Negozio(5,10, "Pasticceria");
negozio.print();
this.insegna = insegna; }
this.disegna(altezza / 2, lunghezza / 2, getInsegna()); }
}

public char getInsegna() {


return insegna.charAt(0);
}

...
}
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