31.05.2013 Views

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!