Laboratorio del corso di Programmazione

Insegnamento fondamentale del primo anno per il Corso di Laurea triennale in Informatica

Edizione 1 (A-L) - Turno A

Anno accademico 2010/11

Docente: A. Morpurgo - Tutor: Srdjan Matic (Sergio)


AVVISI

Account sulle macchine del laboratorio di via Comelico

Per poter utilizzare le macchine del laboratorio SILab di via Comelico in cui si svolgono le lezioni di laboratorio è necessario crearsi un account personale.
È stata predisposta in SILab (davanti all'ufficio) una postazione self-service per la creazione degli account. Occorre utilizzare la propria tessera universitaria magnetica e il proprio pin.
Si invita a compiere tale operazione prima dell'inizio del corso.
Chi non avesse ancora la tessera magnetica passi in sala macchine con il libretto universitario o altro documento che attesti l'iscrizione e chieda di Giuseppe Pignataro per farsi creare l'account da lui.

HowTo


Modalità d'esame

Preparazione alla prova pratica d'esame

L'esame consiste nella soluzione di 4 o 5 esercizi di programmazione in Java. Il primo è un esercizio molto semplice con funzione di filtro (cioè obbligatorio, se non viene fatto gli altri esercizi non verranno valutati); gli altri esercizi richiedono la progettazione e l'implementazione di semplici algoritmi, di classi o gerarchie di classi ed eventualmente l'uso di una classe Java non vista a lezione e quindi la consultazione della documentazione sulle API.
Qui trovate un esempio di prova d'esame.

Date appelli per l'esame in laboratorio

Febbraio / Marzo: 3.2.11 - 17.2.11 - 3.3.11 Giugno: 22.6.11. Luglio: 15.7.11. Settembre: 20.9.11. Viene applicata la regola del salto d'appello.

PROGRAMMA DEL CORSO

Obiettivi

Obiettivo del corso è avviare lo studente alla programmazione. Il linguaggio adottato è Java e il corso si svolge in laboratorio con l'utilizzo del JDK in ambiente GNU/Linux. Il corso si propone, attraverso lo sviluppo di semplici applicazioni basate sull'utilizzo e la combinazione di classi già esistenti e l'implementazione di classi e gerarchie di classi, di mettere gli studenti in grado di realizzare semplici applicazioni a partire da specifiche fornite.

Programma preliminare


MATERIALE DIDATTICO E BIBLIOGRAFIA

Libro di testo di riferimento

G. Pighizzini e M. Ferrari. Dai fondamenti agli oggetti. Corso di programmazione Java (terza edizione). Pearson Education, 2008.

Software

Viene utilizzato Java Developer Kit (compilatore e macchina virtuale per Java), disponibile sul sito dedicato a Java della Sun.
In particolare, occorre scaricare:
  1. La versione 6 di JDK
  2. La libreria prog del libro di testo
Il materiale si trova anche nel CD allegato al libro.

Argomenti trattati

LEZIONE ARGOMENTI TRATTATI DOCUMENTAZIONE / ESERCIZI
18.10.10
1. Presentazione del corso. Introduzione a GNU/Linux e all'uso del JDK.
Linux: la shell bash - comandi essenziali; il file system - struttura ad albero, root (/), path assoluti e relativi, home directory, directory corrente (.). File e loro formati, il formato testo. Un editor di testo per linux: gedit. Il Java Development Kit: javac e java, compilazione ed esecuzione da linea di comando.
Proposta di lavoro:
installare sul proprio pc linux, il JDK e la libreria prog-3ed.jar, ripassare i comandi della bash visti a lezione (pwd, ls, cd, cp, mv, mkdir, rm, rmdir, chmod, uso di ? e *), scrivere, compilare ed eseguire il programma visto a lezione.
Per un'introduzione a GNU/Linux si vedano gli Appunti a cura di M. Santini), in particolare le sezioni 1 e 2.

Java:
Esempio 1
25.10.10
2. Introduzione alla programmazione in Java
Shell bash: echo, cat, less. Struttura di un semplice programma Java. Classi, oggetti, metodi. Librerie. Il metodo main. Variabili e tipi. Stringhe e interi. Primi programmi java (Esempio 2, Esempio 3, Esempio 4)
Proposte di lavoro:
Es. 0: ripasso dei comandi della shell bash (per casa).
Es. 1: uso di String e int.
Es. 2: uso del tipo int, delle classi String e Frazione.
Es. 3: uso della classe Intero.
Es. 4: uso di String e Intero.
Documentazione della libreria API Java:
http://java.sun.com/javase/6/docs/api/
e della libreria prog del libro di testo:
http://homes.dico.unimi.it/~pighizzi/jb/librerie/doc/

Comandi shell
8.11.10
3. Strutture di controllo: l'if.
Correzione degli esercizi. Sequenze di escape. Il costrutto di selezione if (if, if - else, if - else if - else). Espressioni booleane.
Proposte di lavoro:
Es. 0: ripasso della bash
Esercizi: uso dell'IF
Es. 2: uso di IF da solo
Es. 3: uso di IF - ELSE IF - ELSE
Es. 4: uso di operatori logici
Es. 5: uso di espressioni logiche complesse
Lavoro per casa: finire gli esercizi qui sopra, fare gli esercizi del libro, fra qualche giorno rifare gli esercizi di oggi.
Soluzioni esercizi Lez. 2:
Es1 Es. 2 Es. 3 Es. 4
15.11.10
4. Le strutture di controllo.
For, while. Strutture di controllo annidate (if e for).
Proposte di lavoro:
Es. 1: selezione
Es. 2: iterazione
Esercizi 3, 4 e 5 di Esercizi: iterazione
Per casa:
Es. 2.9, 2.10, 3.13, 3.14, 3.15, 3.17, 3.21, 3.26 del libro di testo. Ripassare la sintassi dei comandi visti finora.
Soluzioni esercizi Lez. 3

Nota sull'uso delle graffe,
Nota sulla dichiarazione delle variabili
22.11.10
5. Strutture di controllo.
Proposte di lavoro:
Es. 1: selezione (evitare le ripetizioni di codice), Es. 2, Es. 3, Es. 4, Es. 5, Es. 6, Es. 7 (facoltativo),

Per casa:
esercizi su selezione e iterazione, esercizi sui cicli numerati, Es. del libro di testo.
 
25.11.10
6. Tipi primitivi e espressioni.
Il tipo char. Espressioni sui char. Conversioni implicite ed esplicite (casting) di tipo. Ridirezione dell'I/O (<input >output).
Proposte di lavoro:
Es. 1. Esercizi sui cicli. Esercizi sui caratteri. Tabella1. Tabella2. Tabella3.
Per casa: Esercizi sui cicli. indovinaNumero.txt .
Alcune soluzioni esercizi Lez. 4
Soluzione es. Rotazione
29.11.10
7. Array.
Metodi statici. Classi involucro. Array. L'array args del metodo main. Gestione dell'input. La classe StringTokenizer. Costrutto for-each. Un algoritmo di ordinamento sul posto (selezione diretta).
Proposte di lavoro:
Esercizi su input, array, conversioni di base
Dispensa sulla rappresentazione dei dati (Prof. Boldi)
Nota sull'uso dell'argomento args del main
9.12.10
8. I/O. Array e ArrayList
La classe Scanner e i suoi metodi nextInt(), nextDouble(), nextLine(), next(). La classe generica ArrayList e i metodi add, get, size, set, remove, toString. Classi involucro e auto-boxing e -unboxing. Uso del ciclo for esteso (for-each). I metodi toString e copyOf della classe Arrays. Array a piú dimensioni.
Proposte di lavoro:
Es. 5.3, 5.18, 5.19 (Nota), 5.24 (Nota), 5.25, 5.28 (senza usare la classe Sequenza), SommaMatrici.
 
13.12.10
9. Implementazione di classi.
Introduzione all'implementazione di classi. Progettazione dell'interfaccia pubblica e documentazione per javadoc. Implementazione e verifica di applicazioni da specifiche: campi, campi statici, costruttori, uso di this, metodi pubblici.
Proposte di lavoro:
Menu, ContoCorrente, LibrettoEsami, CampoMinato.
Soluzioni di Menu e ContoCorrente
20.12.10
10. Implementazione di classi: gerarchia e ereditarietà.
Implementazione di un'applicazione con piú classi: riferimenti interni ed esterni ad una classe, ereditarietà, overloading, overriding, il metodo equals, estensione di classi.
Proposte di lavoro:
Rettangoli (le istruzioni sono in rettangoli.txt)
Documentazione delle classi da implementare
10.1.11
11. Interfacce e introduzione alle Collections.
Dichiarazione di interfacce e realizzazione di classi che le implementano. Uso di Collections delle API Java (rivedere: tipi generici, interfacce, Cap. 5 e 6. Si consiglia inoltre la parte introduttiva di http://java.sun.com/docs/books/tutorial/collections/index.html sulle collections).
Proposte di lavoro:
DataSet, DataSetMisurabile, CestinoDellaSpesa (scaricare i file da Cestino della spesa e lavorare su quelli)
Documentazione delle classi da implementare
17.1.11
12. Collections.
Le interfacce Comparable e Iterable. I metodi add, contains, remove. Uso di classi astratte.
Proposte di lavoro:
rubricaTelefonica.txt (scaricare i file da Rubrica telefonica e lavorare su quelli)
Documentazione delle classi da implementare
RubricaTelefonica: soluzione completa
24.1.11
13. Ripasso.
Esercizi di ripasso e di preparazione all'esame
 

Esercizi supplementari
Proposte di lavoro:
Esercizio sull'uso corretto del metodo contains: Pagella.java (contiene testo esercizio), Valutazione.java (classe da completare).
Esercizio sull'uso corretto del metodo remove: Eratostene.java.
Esercizio sull'uso del metodo sort della classe Collections: pagella.
Sequenze di Kaprekar (una sola classe con metodi statici).
Torneo (gerarchia di classi con uso di Collection).

Nota sull'esecuzione automatica di test per controllare la correttezza dell'output.

Nota I file in formato PostScript possono essere visualizzati utilizzando i programmi Ghostscript, Ghostview e GSview, i file in formato PDF possono essere visualizzati utilizzando Acrobat Reader.

ORARI

Orario delle lezioni: lunedí h 8:30-12:30, primo semestre. Il corso prevede circa 48 ore di lezione.
Inizio lezioni: lunedí 18.10.09
Aula: laboratorio tau, SILab, via Comelico 39
Ricevimento:




per appuntamento (email: morpurgo@dsi.unimi.it),
ufficio S201, Dipartimento di Scienze dell'Informazione (DSI),
via Comelico 39/41 - 20135 Milano
NOTA Quando si scrive a un docente, usare preferibilemente l'indirizzo di posta di ateneo (della forma nome.cognome@studenti.unimi.it).
Indicare sempre il proprio nome e cognome e l'insegnamento (Laboratorio di programmazione).

A cura di A. Morpurgo. Ultimo aggiornamento: Ottobre 2010.

Copyright © 2009. Morpurgo. DSI, Università degli Studi di Milano.


WebCounter segnala  Hit Counter by Digits   accessi a questa pagina.