Regole generali
Come indicato a lezione e nelle pagine del corso, per superare l'esame di "Laboratorio di
Programmazione ad Oggetti", "Laboratorio di
Informatica Applicata" e "Laboratorio di
Informatica per l'artigianato", è anche necessario sviluppare un progetto in Java.
Eccetto accordi presi singolarmente con il docente, a partire dall'appello di
novembre 2010, il progetto va scelto in questa pagina.
Note:
- Gli elaborati devono essere svolti singolarmente. Dall'anno accademico 2008/2009
non è più possibile presentare progetti sviluppati in gruppo.
- I progetti Java sono i medesimi sia per gli studenti che seguono il corso Laboratorio di
Programmazione ad Oggetti dalla piattaforma
online, che per quelli in presenza.
- Non è possibile partecipare al test informatizzato senza aver sviluppato
prima il progetto (ricordate che il corso contiene il sostantivo "Laboratorio" nel nome).
Il progetto Java va consegnato al docente o al tutor una settimana
prima (eccetto accordi contrari) della data dell'appello.
Tracce elaborati Java
CONSIDERAZIONI GENERALI
- Programmate ad Oggetti! Sfruttate le potenzialità offerte dal linguaggio
e dedicate una breve fase di analisi iniziale ad individuare sia quali oggetti implementare
sia la relazione che deve intercorrere tra gli stessi.
- Date nomi sensati a classi, variabili e metodi. Inoltre rispettate per quanto possibile
la convenzione terminologica Java.
- Ciascun progetto deve essere opportunamente commentato seguendo le indicazioni di
commento standard (javadoc). Ad esempio, nel caso di
metodi, indicate sempre nei commenti javadoc i parametri passati in
ingresso e restituiti in uscita. Inoltre a corredo del progetto bisogna fornire una relazione che
descriva le principali scelte progettuali. La relazione DEVE essere sintetica (massimo due pagine)
e non deve contenere la stampa integrale del codice (al più qualche riga se serve a spiegare
una scelta implementativa).
- Il codice DEVE essere opportunamente implementato e formattato seguendo modalità
standard uniformi.
Software di gestione per un gestore di Gas
Si vuole implementare un software di gestione per una società di
fornitura del gas. Il software dovrà sopportare comuni operazioni gestionali. In particolare:
Per la conservazione dei dati utilizzate files formattati nel formato da voi prescelto. L'interfaccia utente va fatta utilizzando la console.
[FACOLTATIVO/AVANZATO:] Utilizzare un database per gestire i dati (ad esempio MySQL).
[FACOLTATIVO/AVANZATO:] L'interfaccia utente potrebbe essere sviluppata utilizzando classi
swing.
[FACOLTATIVO/AVANZATO:] Creare un applicativo server che accetti in ingresso liste di letture e ne faccia l'inserimento sul
sistema. Potete ispirarvi a quanto indicato per il progetto "Mini server HTTP" a questa pagina.
Mini Scrabble
"Scrabble" è un gioco da tavolo in cui, su una scacchiera 15x15, vengono disposte a turno da
2-4 giocatori alcune tessere con una lettera dell'alfabeto in modo che vadano a comporre
una parola di senso compiuto (riscontrabile su di un vocabolario prescelto prima di iniziare
a giocare). A ciascuna lettera è associato un valore, più alto tanto meno usata è quella lettera
nella lingua in cui si sta giocando. È il fratello "più vecchio" del più famoso gioco "Scarabeo".
Trovate alcune infomazioni sul gioco su Wikipedia
(la versione inglese della pagina contiene
maggiori dettagli sulle regole di gioco).
Obiettivo del progetto è quello di sviluppare una versione semplificata del gioco Scrabble.
Rispetto al gioco originale, la scacchiera dovrà essere di 9x9 lettere.
Non è necessario implementare caselle "premium" (moltiplicatori del valore della lettera).
Il programma dovrà permettere di giocare all'utente contro il calcolatore.
- All'inizio del gioco,
sia il giocatore che il computer riceveranno 7 lettere a caso, estratte da un insieme di 120, assortite come descritto a questa
pagina. Sempre alla stessa pagina sono presenti i punteggi che
ciascuna lettera fa guadagnare.
- Il gioco viene iniziato "a caso" da uno dei due giocatori (utilizzate
il generatore dei numeri casuali per simulare il lancio di una moneta) che pone la prima parola, di almeno due lettere,
sulla casella centrale (E5).
A turno i due giocatori devono usare fino a tutte le loro sette lettere per costruire parole di senso
compiuto, che, sulla scacchiera, utilizzino almeno una delle lettere messe in precedenza. Il giocatore
acquista così un punteggio costituito dal valore delle lettere nelle parole che ha contribuito a comporre (tutte
devono essere nel vocabolario di riferimento).
- Dopo aver giocato, un giocatore riceve (fino ad esaurimento) nuove tessere che sostituiscono quelle
inserite sulla scacchiera.
- Se un giocatore non riesce a comporre alcuna parola, può decidere di cambiare fino a tutte e
7 le sue tessere e passare il turno senza fare punti.
- Il gioco termina quando sono finite le lettere dal "sacchetto" virtuale di 120 tessere e/o i giocatori passano il turno
senza maturare punti per 3 turni.
Numerate le colonne con le lettere dell'alfabeto e le righe con i numeri dal 1 al 9. La scacchiera può essere
visualizzata sulla console, in modo simile a questo:
+-----------------------------------+
1| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
2| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
3| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
4| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
5| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
6| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
7| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
8| | | | | | | | | |
|---+---+---+---+---+---+---+---+---|
9| | | | | | | | | |
+-----------------------------------+
A B C D E F G H I
Come vocabolario di riferimento potete utilizzate la lista
distribuita per il controllo ortografico con qualche programma (as esempio, con WinEdt).
Il programma utilizzerà la lista per costituire le parole da mettere sul tabellone quando è il turno del computer, ma anche per
verificare l'ammissibilità delle parole dell'utente.
Prima di iniziare questo progetto:
- Rivedete come gestire l'input da console.
- Studiate questo nuovo esempio,
EsempioScacchiera.java. Provate ad eseguire il programma dal
prompt dei comandi (in Windows XP, start -> Tutti i programmi -> Accessori -> Prompt dei comandi).
[FACOLTATIVO/AVANZATO:] L'interfaccia utente potrebbe essere sviluppata utilizzando classi
swing. Potete in questo caso utilizzare anche le caselle "premium".
[FACOLTATIVO/AVANZATO:] Utilizzare come lista di parole il dizionario italiano di Firefox.
Dovete in questo caso al caricamento declinare i verbi e generare i plurali (generate solo le parole singole e non quelle elise che accrescono in modo eccessivo la lista).
Sudoku
Il Sudoku, un gioco che recentemente ha riscosso una certa popolarità,
consiste in una matrice 9×9, ulteriormente suddivisa in 9 sottomatrici 3×3, in
cui devono essere posti i numeri da 1 a 9 in modo da non avere ripetizioni in una
stessa riga, colonna o sottomatrice 3×3. Il gioco inizia con alcuni numeri
opportunamente collocati nella griglia (il "suggerimento iniziale") e termina
quando la griglia è stata completamente riempita. Se il suggerimento iniziale è
ben fatto, il gioco ammette una sola soluzione. Una possibile griglia è la
seguente:
Il progetto consiste nello scrivere un programma che consenta all'utente di giocare una partita. Il giocatore ha la facoltà di:
- caricare un nuovo schema (vedi Nota 1)
- salvare lo schema corrente per riprendere la partita in un secondo momento (vedi Nota 1)
- eseguire un numero illimitato di undo per ogni partita. In altre
parole, è possibile annullare un numero arbitrario di mosse ritornando
alla situazione precedente (come avviene negli editor di testo con le
funzioni undo/redo)
- farsi suggerrire la prossima mossa dal computer (vedi Nota 2).
NOTA 1: Il file dello schema è un file di testo in cui il carattere
'@' rappresenta la casella vuota. Ad ogni riga dello schema corrisponde
una linea del file. Ad esempio, lo schema in figura è salvato come:
9@@1@@@@5
@@5@9@2@1
8@@@4@@@@
@@@@8@@@@
@@@7@@@@@
@@@@26@@9
2@@3@@@@6
@@@2@@9@@
@@19@457@
NOTA 2: Nel documento
"Metodi per risolvere i Sudoku",
linkato alla pagina del gioco di Wikipedia, è proposto un semplice
algoritmo per trovare la soluzione di uno schema (da utilizzare per
soddisfare il requisito 4), che fa uso di 6 regole. Il programma deve
implementarne almeno 2. NB: non usando tutte le regole, il programma
potrebbe non essere in grado di risolvere tutti gli schemi.
Rimane sottointeso che il programma segnala ogni mossa che sia vietata dalle regole del gioco.
[FACOLTATIVO/AVANZATO:] Implementare un'interfaccia grafica.
[FACOLTATIVO/AVANZATO:] Implementare tutte le 6 regole menzionate nel documento sopraccitato.
Server FTP
FTP
è un protocollo che consente di eseguire alcune operazioni (tipicamente
navigare tra le directories, copiare e cancellare files) su un file
system remoto. Il progetto consiste nello sviluppo di un semplice
server FTP che accetti i seguenti comandi:
- CDUP Va alla directory padre
- CWD <pathname> Cambia la directory corrente
- DELE <pathname> Cancella il file
- HELP Mostra l'help
- LIST <pathname> Mostra la lista dei files
- MKD <pathname> Crea la directory
- PASS <password> Specifica la password
- PORT
- PWD Stampa la directory corrente
- QUIT Termina la connessione
- RETR <pathname> Copia il file da remoto a locale
- RMD <pathname> Cancella la directory
- STOR <pathname> Copia il file da locale a remoto
- USER <username> Specifica il nome-utente
Per semplificare il progetto, il server accetta una sola connessione
alla volta e non autentica l'utente (ignora username e password).
Una tipica sessione -- in cui User è l'utente che digita i comandi dal
prompt, Client indica i messaggi generati dal programma client in
risposta ai comandi dell'utente, e Server indica i messaggi del
programma server generati in risposta ai messaggi del client -- è la
seguente:
- User:
ftp remotehost
- Server: 220
- User: inserisce il nome-utente
- Client: USER foo
- Server: 331 enter password
- User: inserisce la password
- Client: PASS bar
- Server: 230 user logged in
- User:
list
- Client: PORT 127,0,0,1,9,13
- Server: 200
- Client: LIST
- Server:
150 Opening ASCII mode data
- trasferimento dei dati
- Server: 226 Transfer complete
- User:
quit
- Client: QUIT
- Server: 221 Goodbye
Lo standard tecnico è contenuto in RFC 959.
Alcuni esempi di utilizzo di un client FTP sono qui.
Per implementare il programma, fate riferimento:
- a quanto indicato per il progetto "Mini server HTTP" a questa pagina.
- al tutorial sui
sockets (in inglese).
[FACOLTATIVO/AVANZATO:] Gestire più connessioni contemporaneamente facendo uso di threads.