L'obiettivo di questa esercitazione è quello di prendere confidenza con la notazione e la programmazione a oggetti (capitolo 8 fino a 8.5 compreso).
Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.
Obiettivo: saper utilizzare la notazione puntata.
Attività:
Scatola
definito come segue:
class Scatola { private int altezza; private int larghezza; public Scatola(int altezza, int larghezza) { this.altezza = altezza; this.larghezza = larghezza; } public Scatola(int lato) { this(lato,lato); } public void allunga() { this.altezza++; } public void allarga() { this.larghezza++; } public void ruota() { int temp = this.larghezza; this.larghezza = this.altezza; this.altezza = temp; } }Aggiungete il metodo
toString
.
this
mantenendo inalterato il
funzionamento del TDA? Perché? Verificate (ricompilando) la correttezza delle vostre risposte.Scatola(int lato)
? Cosa fa il metodo allunga()
? Cosa
fa il metodo allarga()
? Cosa fa il metodo ruota()
? Sono scritti con approccio
funzionale? Sono scritti con approccio procedurale?UsoScatola
che
s1
alta 13 e larga 16;s2
alta e larga 4;s2
. Si può fare con una sola riga di codice? Perché?s1
e la stampi;s2
allungandola di 2, ruotandola e allargandola di 3. Si può fare con
una sola riga di codice? Perché?Scatola
sostituendo i metodi allunga, allarga
e
ruota
nel seguente modo:
public Scatola allunga() { this.altezza++; return this; } public Scatola allarga() { this.larghezza++; return this; } public Scatola ruota() { int temp = this.larghezza; this.larghezza = this.altezza; this.altezza = temp; return this; }
UsoScatola
funziona ancora? Se sì, perché? Se no, modificatelo per
farlo funzionare correttamente con la nuova versione del TDA.Scatola
sostituendo i metodi allunga, allarga
e
ruota
nel seguente modo:
public static Scatola allunga(Scatola s) { s.altezza++; return s; } public static Scatola allarga(Scatola s) { s.larghezza++; return s; } public static Scatola ruota(Scatola s) { int temp = s.larghezza; s.larghezza = s.altezza; s.altezza = temp; return s; }
UsoScatola
funziona ancora? Se sì, perché? Se no, modificatelo per
farlo funzionare correttamente con la nuova versione del TDA.Scatola
sostituendo i metodi allunga, allarga
e
ruota
nel seguente modo:
public static void allunga(Scatola s) { s.altezza++; } public static void allarga(Scatola s) { s.larghezza++; } public static void ruota(Scatola s) { int temp = s.larghezza; s.larghezza = s.altezza; s.altezza = temp; }
UsoScatola
funziona ancora? Se sì, perché? Se no, modificatelo per
farlo funzionare correttamente con la nuova versione del TDA.Obiettivo: saper definire e usare oggetti.
Attività:
Secchio
che rappresenta un contenitore di liquidi che può contenere
solo un numero intero di litri.riempi()
. Riempie fino all'orlo il secchio. Dopo questo metodo il secchio contiene un numero
di litri pari alla sua capacità; svuota()
. Svuota completamente il secchio. Dopo questo metodo il secchio contiene un numero di
litri pari a zero (il secchio è vuoto);travasaIn(Secchio s)
. Svuota il contenuto del secchio dentro a un altro
secchio s
senza farlo
traboccare. Se un secchio s1
di capacità 3 e completamente pieno viene travasato in un
secchio s2
di capacità 4 pieno solo per metà, dopo la chiamata del metodo
s1
conterrà 1 e s2
4. Se invece s2
fosse stato inizialmente
vuoto, dopo la chiamata del metodo, s1
sarebbe stato vuoto e s2
avrebbe contenuto
3 litri;int quanto()
. Restituisce il numero di litri contenuti dal secchio (non la
capacità).UsoSecchio
che
s1
di capacità 10 litri;s1
;s1
;s1
;s2
di capacità 4 litri;s2
;s1
in s2
;s1
e s2
;s1
in s2
per la seconda volta;s1
e s2
;s2
;s1
in s2
per la terza volta;s1
e s2
;s2
;s1
in s2
per la quarta volta;s1
e s2
;>java UsoSecchio s1 contiene 0 litri s1 contiene 10 litri s2 contiene 0 litri s1 contiene 6 litri, s2 ne contiene 4 s1 contiene 6 litri, s2 ne contiene 4 s1 contiene 2 litri, s2 ne contiene 4 s1 contiene 0 litri, s2 ne contiene 2
class UsoSecchio { public static void main(String[] args) { Secchio s1 = new Secchio(5); Secchio s2 = new Secchio(3); ... ... System.out.println("s1 contiene "+s1.quanto()+" litri"); } }in modo che l'output del programma sia il seguente:
>java UsoSecchio s1 contiene 4 litriNon dovete modificare il TDA
Secchio
e non dovete chiamare nuovi costruttori. Per risolvere
l'esercizio dovete usare solamente i metodi riempi, svuota
e
travasaIn
di s1
e s2
.