|
Questa esercitazione verte principalmente
sulla realizzazione di classi.
Come sempre, prima della fine dell'esercitazione siete invitati a
inviare tutti i file .java
prodotti (anche se incompleti) al docente come attachment di un
unico messaggio di posta elettronica con Subject: LIP-07 Es10 (ad esempio usando
pine, seguendo le corrispondenti istruzioni).
Indirizzi di posta
elettronica da
utilizzare per inviare programmi svolti in aula o a casa dopo le
esercitazioni.
| CORSO A | CORSO B |
| lipa-doc oppure lipa-doc@cli.di.unipi.it
|
lipb-doc oppure lipb-doc@cli.di.unipi.it
|
Esercizi
Si suggerisce di creare un nuovo progetto Eclipse per i file di questa esercitazione,
chiamandolo ad esempio LIP-ES-10. Se
hai problemi con Eclipse, prova a
guardare la breve introduzione all'uso di eclipse o segui le istruzioni riassuntive sui
primi passi con Eclipse.
Per gli esercizi che coinvolgono array, usare i metodi
della classe ArrayUtils.java quando opportuno.
Per leggere dei dati in
input da tastiera, usare la classe Input.java. Ricordarsi di
importare entrambe le classi nel package.
|
Esempio di interazione con il programma (in blu l'input
dell'utente):
Dammi il primo valore (>0): -5
Dammi il primo valore (>0): 2
Dammi un multiplo di 2 (>0): 4
Dammi un multiplo di 4 (>0): 32
Dammi un multiplo di 32 (>0): 64
Dammi un multiplo di 64 (>0): 80
64 diviso 2 = 32 |
Esempio di interazione con il programma (in blu l'input dell'utente)
Nome (stringa non vuota): Bob
Saldo iniziale di Bob (valore positivo): 2105
Nome (stringa non vuota):
Nome (stringa non vuota): Alice
Saldo iniziale di Alice (valore positivo): -34
Saldo iniziale di Alice (valore positivo): 65
Quanto vuoi trasferire? 27
Il trasferimento ha avuto successo.
Il saldo di Bob e' 2078.0
Il saldo di Alice e' 92.0
Quanto vuoi trasferire? 583
Il trasferimento ha avuto successo.
Il saldo di Bob e' 1495.0
Il saldo di Alice e' 675.0
Quanto vuoi trasferire? 1295
Il trasferimento ha avuto successo.
Il saldo di Bob e' 200.0
Il saldo di Alice e' 1970.0
Quanto vuoi trasferire? 205
Il trasferimento non ha avuto successo.
Il saldo di Bob e' 200.0
Il saldo di Alice e' 1970.0
Quanto vuoi trasferire? 200
Il trasferimento ha avuto successo.
Il saldo di Bob e' 0.0
Il saldo di Alice e' 2170.0
|
- [64] Scrivere la classe Buffer
i cui oggetti rappresentano dei buffer a una posizione. Un buffer può essere vuoto oppure contenere un messaggio di tipo String. Un buffer mette a disposizione tre operazioni principali: isEmpty() permette di controllare se il buffer è vuoto oppure no; put(s) permette di inserire la stringa s in un buffer, ma solo se il buffer è vuoto; get() permette di estrarre la stringa contenuta nel buffer, ma solo se il buffer non è vuoto. La classe deve contenere:
Per testare la classe, scrivere un programma TestBuffer che crea un oggetto della
classe Buffer e in maniera
iterativa offre all'utente la possibilità di invocare una
delle tre funzionalità sul buffer (visualizzando l'esito
dell'operazione) o di terminare l'esecuzione.
- [65] La classe java.awt.Point
definisce degli oggetti che rappresentano dei punti in uno spazio
bidimensionale, aventi come variabili di istanza le coordinate
x e y di tipo int. Si consulti la documentazione
della classe, accedendovi tramite Eclipse oppure cliccando su questo link, per vedere quali metodi fornisce.
In questo esercizio vogliamo definire una classe chiamata Punto che si ispira alla classe
java.awt.Point. Scrivere quindi la classe
Punto che contiene:
-
due variabili di istanza private x e y di tipo
int;
- un costruttore senza argomenti che crea un punto di coordinate
(0,0);
- un costruttore con due argomenti di tipo int
che inizializza le variabili di istanza con i valori passati per
argomento;
- due metodi pubblici: getX
che restituisce l'ascissa del punto e getY che restituisce l'ordinata;
- un metodo pubblico translate con due parametri di
tipo int, che trasla il
punto aggiungendo alle coordinate i valori passati per argomento;
- un metodo pubblico distance di tipo
double e con un solo parametro di
tipo Punto, che restituisce
la distanza
tra l'oggetto su cui viene invocato e il punto passato per argomento,
calcolata usando il Teorema di Pitagora,
cioè
RadiceQuadrata(Quadrato(differenza delle ascisse) +
Quadrato(differenza delle ordinate)).
Per il calcolo della radice quadrata, usare il
metodo fornito dalla classe Math.
- un metodo pubblico toString
senza argomenti, che restituisce una stringa che è una
rappresentazione testuale del punto, ad esempio "(vx, vy)", dove vx è l'ascissa del
punto e vy è l'ordinata.
Scrivere poi una classe TestPunto che
- chiede all'utente se vuole inserire le coordinate del punto oppure
no;
- se l'utente risponde negativamente, crea un punto con il
costruttore senza parametri;
- se l'utente risponde positivamente, chiede i valori delle
coordinate e poi crea un punto con i valori forniti dall'utente;
- stampa la rappresentazione testuale del punto, con un opportuno
commento;
- trasla il punto di 5
unità lungo le ascisse e di 10
unità lungo le ordinate;
- stampa nuovamente la rappresentazione testuale del punto, con un opportuno
commento;
- stampa la distanza del punto dall'origine degli assi, cioè
dal punto di coordinate (0, 0).
Esempi di interazione con il programma (in blu l'input dell'utente)
Vuoi darmi le coordinate del punto? (s/n) n
Il punto creato e': (0 , 0)
Il punto spostato e': (5 , 10)
La distanza dall'origine e': 11.180339887498949
|
Vuoi darmi le coordinate del punto? (s/n) s
Dammi il valore dell'ascissa: 7
Dammi il valore dell'ordinata: 2
Il punto creato e': (7 , 2)
Il punto spostato e': (12 , 12)
La distanza dall'origine e': 16.97056274847714
|
- [66] Scrivere la classe Bulb
i cui oggetti rappresentano delle lampadine elettriche. Una lampadina può essere accesa, spenta o rotta, e mette a disposizione due sole operazioni: look() che restituisce lo stato corrente della lamadina e click() che ne cambia lo stato da accesa a spenta o da spenta a accesa. Una lampadina si rompe dopo un certo numero di click deciso dal fabbricante. La classe deve contenere:
- Le variabili d'istanza e i costruttori ritenuti opportuni.
- I metodi d'istanza necessari a implementare le
funzionalità descritte sopra.
Per testare la classe, scrivere un programma TestBulb che crea un oggetto della
classe Bulb che ammetta un
numero massimo di click deciso dall'utente e poi, in maniera
iterativa, offre all'utente la possibilità di invocare una
delle due funzionalità (visualizzando l'esito dell'operazione)
o di terminare l'esecuzione.
- [67] Scrivere la classe Switch
i cui oggetti rappresentano degli interruttori. Ogni interruttore è collegato a una lampadina e ne regola l'accensione e spegimento. La classe deve contenere tutte le variabili d'istanza i costruttori e i metodi ritenuti opportuni.
Per testare la classe, scrivere un programma TestSwitch che crea due interruttori (oggetti della classe Switch) entrambi collegati alla stessa lampadina (oggetto della
classe Bulb) e poi, in maniera
iterativa, offre all'utente la possibilità di agire su uno dei due interruttori (visualizzando l'esito dell'operazione)
o di terminare l'esecuzione.
|