Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ESERCIZI E PROGETTI DI PROGRAMMAZIONE E–47<br />
eventi <strong>di</strong> pressione del pulsante del mouse, dovete tenere traccia del fatto che sia già stata registrata<br />
la posizione del centro del cerchio in un evento precedente.<br />
Progetti <strong>di</strong> <strong>programmazione</strong><br />
Progetto 9.1. Progettate un’interfaccia MoveableShape che possa essere utilizzata come meccanismo<br />
generale per l’animazione <strong>di</strong> una forma geometrica. Una tale forma mobile deve avere due<br />
meto<strong>di</strong>: move e draw. Scrivete una generica classe AnimationPanel che <strong>di</strong>segni e sposti qualsiasi<br />
oggetto <strong>di</strong> tipo MoveableShape (oppure un vettore <strong>di</strong> oggetti <strong>di</strong> tipo MoveableShape, se avete<br />
stu<strong>di</strong>ato il Capitolo 7). Progettate poi le sagome mobili <strong>di</strong> un rettangolo e <strong>di</strong> un’automobile.<br />
Progetto 9.2. Avete il compito <strong>di</strong> progettare un programma generico che sia in grado <strong>di</strong> gestire<br />
giochi da tavolo con due giocatori. Il programma dovrebbe essere suffi cientemente fl essibile da<br />
poter gestire giochi come il tic-tac-toe, gli scacchi o il Gioco <strong>di</strong> Nim visto nel Progetto 6.2.<br />
Progettate un’interfaccia Game che descriva un gioco da tavolo, pensando a ciò che deve<br />
fare il vostro programma. Ad esempio, deve chiedere al primo giocatore <strong>di</strong> fare una mossa, cioè<br />
<strong>di</strong> fornire in ingresso una stringa che rispetti un formato specifi co <strong>di</strong> ciascun gioco, che per gli<br />
scacchi potrebbe essere Be3. Il programma non ha alcuna conoscenza dei singoli giochi, per cui<br />
l’interfaccia Game deve avere un metodo come<br />
boolean isValidMove(String move)<br />
Dopo che una mossa è stata ritenuta valida, deve essere eseguita: l’interfaccia ha quin<strong>di</strong> bisogno<br />
<strong>di</strong> un altro metodo, che possiamo chiamare executeMove. Il programma deve poi verifi care se il<br />
gioco è terminato e, in caso contrario, deve elaborare la mossa dell’altro giocatore. Dovete anche<br />
fornire un meccanismo che consenta la visualizzazione dello stato della tavola da gioco.<br />
Progettate l’interfaccia Game e fornitene due realizzazioni, che potrebbero essere Nim e Chess<br />
(oppure TicTacToe se siete meno ambiziosi). La classe GamePlayer dovrebbe essere in grado <strong>di</strong><br />
gestire un riferimento <strong>di</strong> tipo Game senza sapere quale gioco si sta giocando, elaborando le mosse<br />
<strong>di</strong> entrambi i giocatori. Scrivete poi due programmi che <strong>di</strong>fferiscano solamente per la fase <strong>di</strong><br />
inizializzazione del riferimento <strong>di</strong> tipo Game.<br />
Capitolo 10<br />
<strong>Esercizi</strong> <strong>di</strong> <strong>programmazione</strong><br />
* <strong>Esercizi</strong>o P10.1. Migliorate il metodo addInterest della classe SavingsAccount in modo che<br />
calcoli gli interessi in base al saldo minimo che è stato raggiunto nel periodo intercorso dalla sua<br />
ultima invocazione. Suggerimento: dovete mo<strong>di</strong>fi care anche il metodo withdraw e dovete aggiungere<br />
una variabile <strong>di</strong> esemplare che memorizzi il saldo minimo.<br />
** <strong>Esercizi</strong>o P10.2. Aggiungete la classe TimeDepositAccount alla gerarchia dei conti bancari. Tale<br />
“conto <strong>di</strong> deposito vincolato” è identico a un conto <strong>di</strong> risparmio, a parte il fatto che si promette<br />
<strong>di</strong> lasciare il denaro nel conto per un prefi ssato numero <strong>di</strong> mesi ed è prevista una penale <strong>di</strong> $ 20<br />
in caso <strong>di</strong> prelievo prematuro. Nella costruzione <strong>di</strong> un conto si specifi cano il tasso <strong>di</strong> interesse e il<br />
numero <strong>di</strong> mesi in cui agisce il vincolo. Nel metodo addInterest decrementate il conteggio dei<br />
mesi. Se il conteggio è positivo nel corso <strong>di</strong> un prelievo, addebitate la penale.<br />
* <strong>Esercizi</strong>o P10.3. Aggiungete alla gerarchia <strong>di</strong> domande vista in Consigli pratici 10.1 la classe<br />
NumericQuestion. Se la <strong>di</strong>fferenza tra la risposta e il valore previsto non è maggiore <strong>di</strong> 0.01, accettate<br />
la risposta come corretta.<br />
Cay Horstmann: Concetti <strong>di</strong> informatica e fondamenti <strong>di</strong> Java 5 a ed. - Copyright 2010 <strong>Apogeo</strong> srl