Programmazione 2005/2006
Informatica Multimediale e Informatica Q-Z (aula Tessari), Verona
docente: Fausto Spoto fausto.spoto@univr.it
Testo di riferimento:
James Cohoon, Jack Davidson:
Java - Guida alla Programmazione, McGraw-Hill
Prima prova parziale del 14/12/2005
e sua soluzione.
Seconda prova parziale del 20/03/2006
e sua soluzione.
Esame del 30/03/2006
e sua soluzione.
Lezione 1 (25 ottobre 2005)
Struttura del calcolatore: celle di memoria
Linguaggi macchina e linguaggi ad alto livello
Compilazione
Breve storia dei linguaggi di programmazione
Java e bytecode
Il primo programma Java
Output testuale tramite System.out.println
Dichiarazione di una variabile intera
Lezione 2 (27 ottobre 2005)
Dichiarazione di variabile in genere
Variabili e costanti, modificatore final
Tipi int, float e double
Esempi di programmi non interattivi
Assegnamento
Precedenze fra gli operatori aritmetici, parentesi
Tipo delle espressioni aritmetiche
Promozione di tipo e cast
Input da tastiera
Esempio di un programma interattivo
Dichiarazione senza inizializzazione
Lezione 3 (28 ottobre 2005)
Pre e post-incremento/decremento di variabili intere
Oggetti: di tipo stringa o creati tramite una new
Rappresentazione grafica di una variabile legata a un oggetto
Assegnamento: i tipi primitivi si copiano, gli oggetti si condividono
Significato di final per le variabili legate agli oggetti
Servizi o metodi forniti dagli oggetti
Alcuni metodi delle stringhe: charAt, substring,
append
Significato di + fra stringhe: ricorso implicito ad
append
Lezione 4 (3 novembre 2005)
Dichiarazione di classi
Campi con modificatore private
Costruttore che inizializza tutti i campi
Modifica dei campi: diretta (vietata) e con metodi modificatori o scrittori
Accesso ai campi: diretto (vietato) o con metodi accessori o di lettura
Definizione generale di metodi
Metodo toString e suo uso implicito in System.out.println
Lezione 5 (4 novembre 2005)
Esercizi su classi e metodi
Tipo primitivo boolean
Operatori logici e valutazione a corto circuito
Riferimento null e NullPointerException
Classi di sistema JFrame, Color e Graphics
Lezione 6 (8 novembre 2005)
Espressioni logiche o booleane
Condizionali: if, if/else e if/else if
Condizionali: switch e uso del break
L'espressione condizionale: _?_:_
Esempi: classe Led e classe
Cifra
Esercizio: aggiungete a Cifra un metodo public boolean incrementa(). Soluzione (da ridenominare in Cifra.java prima della compilazione). Main di prova
Lezione 7 (10 novembre 2005)
Esercizio: Semaforo.java
Esercizio: Rima.java
Campi costanti di classe final static
Esercizio: Rettangolo.java
e main di prova (da ridenominare in Main.java prima della compilazione)
Lezione 8 (11 novembre 2005)
Esercizi su classi e condizionali: Carta.java, Mano.java e Main di prova
Introduzione al ciclo while
Lezione 9 (14 novembre 2005)
Esercizi sul ciclo while:
Calcolo della media fra i numeri immessi: Media.java
Fusione di due stringhe: Merge.java
Verifica di palindromicità:
prima e seconda
soluzione senza il booleano di appoggio
Lezione 10 (16 novembre 2005)
Il ciclo do...while
Cicli annidati
Stampa della tabellina pitagorica: Tabella.java
Disegno di un quadrato: Quadrato.java e main di prova
Pallino rimbalzante in una finestra: Pallino.java e Rimbalzino.java
Lezione 11 (17 novembre 2005)
Il ciclo for: inizializzazione, condizione di terminazione e progresso
Equivalenza tra for e while
Esempio: tabella pitagorica fatta con il for:
TabellaFor.java
Accesso a un file di archivio: stampa il numero di
righe, parole e caratteri: Words.java
Esempio: inversione di una stringa: Inverti.java
Generazione di numeri casuali double:
Casuale.java e
Cerchio.java
Lezione 12 (21 novembre 2005)
Istruzioni break e continue dentro ai cicli
L'istruzione return: errori tipici e suo presenza obbligatoria nei metodi non void: Return.java
Campi static e non static: numero, inizializzazione e accesso
Metodi static e non static: chiamata, riferimento this e NullPointerException
Lezione 13 (23 novembre 2005)
Esempi di accesso ai campi: Prove.java
Esempi di chiamata di metodi Prove.java
Passaggio dei parametri per valore: modifica dei campi
degli oggetti passati ai metodi:
Parametri.java e
Modifica.java
Ambiguità nella chiamata dei metodi:
Parametri.java e
Calls.java
Lezione 14 (28 novembre 2005)
Sottoclassi e notazione extends
Accessibilità protected
Costruttori legati con super()
Chiamata ai metodi della superclasse con super.metodo()
Esempio: figure geometriche:
Figura.java,
Cerchio.java,
Rettangolo.java,
Quadrato.java e
main di prova.
Esempio: felini:
Felino.java,
Tigre.java,
Gatto.java,
Siamese.java,
Scozzese.java e
main di prova.
Fine del primo bimestre
Lezione 15 (16 gennaio 2006)
Richiamo della nozione di sottoclasse
Ereditarietà di campi e metodi
Specializzazione di metodi
Chiamata virtuale con late-binding
Esempio: Led.java,
GraphicalLed.java,
ColoredGraphicalLed.java,
MainColoredGraphicalLed.java
Lezione 16 (17 gennaio 2006)
Modificatore di visibilità protected
Package e import
Esempi di sottoclassi: Ticker.java,
MyTicker.java,
AlarmedMyTicker.java,
MainTicker.java.
Lezione 17 (23 gennaio 2006)
Classi e metodi abstract
Classi e metodi final
Esempio delle note musicali:
Documentazione JavaDoc. Tag @author,
@param e @return
Esempio delle monete e delle nazioni:
Esempio dei semafori:
Lezione 18 (24 gennaio 2006)
Sovraccarico dei campi ereditati
Cast
Metodi equals() e clone() ereditati
da java.lang.Object
Interfacce
Riepilogo sui modificatori di visibilità
Lezione 19 (26 gennaio 2006)
Dichiarazione di un array
Inizializzazione di un array
Campo length di un array e metodi ereditati
da java.lang.Object
Copia superficiale e in profondità di un array
Esempi di algoritmi su array: minimo, media, inizializzazione a fattoriale
o a numeri di Fibonacci
Lezione 20 (30 gennaio 2006)
Ricerca lineare e binaria sugli array
Test di ordinamento per gli array
Ordinamento per bolle e per ricerca iterata del minimo
Ordina.java
Superclasse astratta degli insiemi
Insieme.java, da copiare
dentro una directory di nome insiemi
Lezione 21 (31 gennaio 2006)
Insiemi realizzati con un array:
InsiemeArray.java, da copiare
dentro la directory insiemi e
MainInsiemi.java, da copiare
all'esterno della directory insiemi
Array multidimensionali
Matrici e operazioni su matrici:
Matrice.java e
MainMatrici.java
Lezione 22 (2 febbraio 2006)
Insiemi realizzati con un array che raddoppia di dimensione
quando è pieno:
InsiemeArrayDicotomia.java, da copiare dentro la directory insiemi
Implementazione del gioco Life
(qui
trovate regole e curiosità):
Lezione 23 (6 febbraio 2006)
Le eccezioni
L'istruzione throw
La struttura try...catch
Controllo in sequenza dei catch
Dichiarazione throws nell'intestazione dei metodi
La clausola finally
Lezione 24 (7 febbraio 2006)
Esempio della scacchiera e delle pedine:
testo del problema,
Pedina.java,
Pedone.java,
Alfiere.java e
Cavallo.java.
Esempio della torre di Hanoi: in una directory di nome hanoi
copiate Anello.java,
Torre.java e
MossaIllegaleException.java. All'esterno della directory copiate il main Hanoi.java.
Lezione 25 (9 febbraio 2006)
Ricaduta delle eccezioni lungo la catena di chiamata dei metodi
Stack e record di attivazione
Ricorsione: casi base e casi ricorsivi
Esempi del fattoriale e della sequenza di Fibonacci
Esempio di ricorsione non ben fondata
Lezione 26 (13 febbraio 2006)
Calcolo ricorsivo del massimo comun divisore
Calcolo ricorsivo del test di palindroma
Quicksort
Soluzione ricorsiva della torre di Hanoi: Hanoi.java
Lezione 27 (14 febbraio 2006)
Permutazioni di una stringa: PermuteString.java, PermuteEmptyString.java, PermuteNonEmptyString.java e MainPermute.java
Mergesort: Mergesort.java
Iteratori su interi: in una directory iterator copiate
Iterator.java,
Naturals.java,
NaturalsFrom.java,
NaturalsUpTo.java e
OnlyEven.java.
Lezione 28 (20 febbraio 2006)
Iteratori OnlyOdd.java, NotMultipleOf.java e Primes.java
Liste e metodi su liste: length(), contains(), kth(), setKth(), append(): L.java
Lezione 29 (21 febbraio 2006)
Metodi su liste: clone(), toString(), reverse() senza e con accumulatore, equals() e increasing(): L.java
Lezione 30 (23 febbraio 2006)
Alberi binari
Metodi su alberi binari: increment(), add(),
height(), clone() e creazione casuale.
Lezione 31 (27 febbraio 2006)
Metodi su alberi binari: getMin(), contains(),
moveMin() e leaves().
La classe degli alberi binari: T.java
Lezione 32 (28 febbraio 2006)
Simulazione di compitino: Testo
Soluzione del primo esercizio: L.java
Soluzione del secondo esercizio:
Formula.java,
And.java,
Or.java,
Not.java,
Variable.java,
e main di prova.
Il terzo esercizio stampa: Sono qua. Mi vedi?
Fine del corso
Secondo compitino: 20 marzo ore 9-11
Primo appello: 30 marzo ore 15-17
Chi accetta il voto dei compitini (cioè la media dei due compitini) è invitato a iscriversi all'appello del 30 marzo per sola verbalizzazione.