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.
Paolo Coppola