Programmazione 2006/2007
Informatica Multimediale (aula Tessari), Verona
docente: Fausto Spoto fausto.spoto@univr.it
Testo di riferimento:
Giovanni Pighizzini, Mauro Ferrari:
Dai Fondamenti agli Oggetti: Corso di Programmazione Java, Pearson/Addison-Wesley
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.
Ogni anno ci sono due borse erasmus da 5 a 9 mesi ciascuna per l'Isola della Réunion (Oceano Indiano, Francia). Anche quest'anno andranno perse? Clicca qui per saperne di piú.
Lezione 1 (24 ottobre 2006, 14:30 - 16:30)
Computer e algoritmi
La macchina di Von Neumann
Compilazione ed esecuzione
Java bytecode e indipendenza dall'architettura del codice eseguibile
Variabili e tipo
Strutture di controllo degli algoritmi
Esempio di algoritmo: la soluzione delle equazioni di secondo grado
Lezione 2 (26 ottobre 2006, 9:30 - 11:30)
Esempi di algoritmo
L'algoritmo di Euclide
Algoritmi su sequence di numeri interi: massimo, minimo, media
Lezione 3 (27 ottobre 2006, 9:30 - 11:30)
Oggetti, classi, messaggi, segnature e prototipi
La prima classe Java: compilazione (javac) ed esecuzione
(java)
Classi ConsoleOutputManager e ConsoleInputManager
Direttiva di importazione import
Classe String
Lezione 4 (31 ottobre 2006, 14:30 - 16:30)
Esempi di programmi che manipolano stringhe
Esempi di uso delle classi: la classe Frazione
Dichiarazioni di variabili
Tipi primitivi e tipi riferimento
Lezione 5 (2 novembre 2006, 9:30 - 11:30)
Il condizionale if...else
Il tipo primitivo boolean
Annidamento dei condizionali: risoluzione dell'ambiguità dell'else
Operatori booleani o logici
Differenza fra l'operatore == e il metodo equals()
Esempi: Numerali.java,
Aggettivi.java,
Rima.java
Il ciclo do...while
Lezione 6 (3 novembre 2006, 9:30 - 11:30)
Il ciclo while
Esempi di cicli:
MassimoSequenza.java,
MangiaFrase.java,
MangiaFraseDestra.java,
ManguaFraseBassa.java,
RuotaFrase.java,
InvertiFrase.java
Lezione 7 (7 novembre 2006, 14:30 - 16:30)
Test di palindroma tramite inversione della frase:
PalindromaInverti.java
Sommatoria di frazioni: Sommatoria.java
Il ciclo for
Numeri corti e numeri lunghi: CortiLunghi.java
Lezione 8 (9 novembre 2006, 9:30 - 11:30)
Conta corti e lunghi: QuantiCortiLunghi.java
Disegni: Disegno1.java e
Disegno2.java
Controllo di e-pangramma: EPangramma.java
Il comando break: esempi di test di palindroma
Il metodo indexOf sulle stringhe
Lezione 9 (14 novembre 2006, 14:30 - 16:30)
Espressioni di base e composte, letterali
Precedenza e associatività degli operatori
Espressione di assegnamento
Forme abbreviate di assegnamento: pre e post incremento/decremento
Side-effect delle espressioni di assegnamento
Lezione 10 (16 novembre 2006, 9:30 - 11:30)
Cicli annidati: Pitagora.java,
TrovaEPangramma.java
Tipi primitivi numerici: byte, short, int,
float e double
Conversioni di tipo (verso l'alto) e cast (verso il basso)
Errori di approssimazione nelle conversioni e nei cast
Lezione 11 (17 novembre 2006, 9:30 - 11:30)
Addizione come concatenazione di stringhe
Promozioni implicite da tipi numerici a tipo String nella
concatenazione
Promozione implicita da tipo riferimento a tipo String
nella concatenazione, con chiamata del metodo toString()
Il tipo primitivo char: esempi d'uso
Lezione 12 (21 novembre 2006, 14:30 - 16:30)
Traduzione da stringa a intero: StringToInt.java
Traduzione da binario a decimale: BinarioDecimale.java
Metodi statici: classe java.lang.Math
Costanti statiche
Generazione di numeri a caso e approssimazione Montecarlo di pi greco:
Cerchio.java
Plottaggio del seno: Plot.java
Classi involucro
Inversione minuscole/maiuscole: InvertiMinMaiu.java
Lezione 13 (23 novembre 2006, 9:30 - 11:30)
Esempio: somma di numeri binari visti come stringhe:
SommaBinari.java
Array di oggetti: dichiarazione, creazione, lunghezza e
accesso agli elementi
Esercizi sugli array di oggetti
Lezione 14 (24 novembre 2006, 9:30 - 11:30)
Somma di frazioni in array:
SommaFrazioni.java
Creazione di una array di stringhe che contengono a ripetute:
ArrayA.java
Creazione di un array di fattoriali visti come stringhe in italiano:
ArrayFattoriale.java
Creazione di un array di Intero che rappresentano i numeri
di Fibonacci:
ArrayFibonacci.java
Condivisione fra elementi di un array
Assegnamento a una variabile di tipo array
e condivisione fra variabili di tipo array
Lezione 15 (28 novembre 2006, 14:30 - 16:30)
Array di tipi primitivi: non condivisione degli elementi
Assegnamento fra variabili di tipo array: copia del riferimento, non dell'array
Ordinamento per ricerca iterata del minimo: MinSort.java
Estensione di un array tramite creazione di un nuovo array più lungo
Lezione 16 (30 novembre 2006, 9:30 - 11:30)
Crivello di Eratostene per la determinazione dei numeri primi:
Eratostene.java
Array multidimensionali: creazione completa e incompleta
Condivisione fra le righe di un array multidimensionale
Esercizi sul tipaggio di espressioni che coinvolgono gli array
Fine del periodo uno
Primo compitino: il 14 dicembre alle 14:30 senza iscrizione
Lezione 17 (8 gennaio 2007, 9:30 - 11:30)
Implementazione delle classi
Campi, costruttori e metodi
Esempio della classe Frazione del libro
Accesso ai campi, notazione punto
Riferimento this all'oggetto che esegue il metodo
Concatenazione dei costruttori con la notazione this()
Lezione 18 (9 gennaio 2007, 8:30 - 10:30)
Miglioramento della classe Frazione del libro
Esempi di classi:
Salvadanaio.java,
Led.java e
Safe.java
Lezione 19 (11 gennaio 2007, 14:30 - 16:30)
La classe Semaforo.java
Campi e metodi statici
Introduzione alla classe Orario del libro
Lezione 20 (15 gennaio 2007, 9:30 - 11:30)
La classe Orario del libro
I funghi che sanno contarsi: Fungo.java
Package e modificatori di visibilità
La classe Incrementa.java
che utilizza le classi Led.java e
Cifra.java
da inserire all'interno della directory display
La classe MainStudente.java
che usa la classe Studente.java
da inserire nella directory universita
Lezione 21 (16 gennaio 2007, 8:30 - 10:30)
Documentazione JavaDoc
Il concetto di sottoclasse
Ereditarietà e ridefinizione di metodi
Chiamata polimorfa di metodo
Cast
Classi astratte
Lezione 22 (18 gennaio 2007, 14:30 - 16:30)
Esercizi sulla gerarchia delle classi
La classe Geometra.java
Lezione 23 (22 gennaio 2007, 9:30 - 11:30)
Definizione di una sottoclasse per estensione della superclasse
Legame fra costruttori: la notazione super()
Richiamo di metodi della superclasse: la notazione super.m()
Costruttore di default e super()
Esempio di definizione di sottoclassi: il caso di Quadrato
Esempio di costruzione di una gerarchia di classi:
felini/Felino.java,
felini/Tigre.java,
felini/Gatto.java,
felini/Siamese.java,
felini/Scozzese.java,
MainFelini.java.
Esempio di costruzione di una gerarchia di classi con una classe astratta:
monete/Moneta.java,
monete/Euro.java,
monete/Dollaro.java.
Lezione 24 (23 gennaio 2007, 8:30 - 10:30)
Esempio di costruzione di una gerarchia di classi con una classe astratta:
nazioni/Nazione.java,
nazioni/USA.java,
nazioni/EuroZona.java,
nazioni/Italia.java,
nazioni/Francia.java,
nazioni/Germania.java,
MainNazioni.java.
Esempio di costruzione di una gerarchia di classi e di ridefinizione di
metodi:
ticker/Ticker.java,
ticker/MyTicker.java,
ticker/AlarmedMyTicker.java,
MainTicker.java.
Lezione 25 (25 gennaio 2007, 14:30 - 16:30)
Overloading e scelta della segnatura a tempo di compilazione
Overriding e scelta dell'implementazione a tempo di esecuzione
Il metodo equals() di Object e sue ridefinizioni
Adombramento di variabili. Disambiguazione tramite this.v
e super.v
Lezione 26 (30 gennaio 2007, 8:30 - 10:30)
Passaggio dei parametri per valore: il caso dei tipi primitivi e quello
dei tipi riferimento
Il metodo clone() di Object
Stack di attivazione e heap
Ricorsione: il caso del fattoriale
Lezione 27 (1 febbraio 2007, 14:30 - 16:30)
Ricorsione su interi: il caso della successione di Fibonacci
Ricorsione su stringhe
Lezione 28 (5 febbraio 2007, 9:30 - 11:30)
Ricorsione su stringhe: la fusione di due stringhe
Ricorsione sugli array
Lezione 29 (6 febbraio 2007, 8:30 - 10:30)
Ricorsione: il caso della torre di Hanoi:
Hanoi.java
Strutture dati ricorsive: le liste
Ricorsione sulle liste: List.java
Lezione 30 (8 febbraio 2007, 14:30 - 16:30)
Esempio di utilizzo delle liste
Esempi di ricorsione sulle liste: clonaggio, clonaggio alternato,
fusione, concatenazione, inversione
Lezione 31 (12 febbraio 2007, 9:30 - 11:30)
Eccezioni
Costrutto try/catch
Propagazione delle eccezioni lungo la catena di chiamata dei metodi
Comando throw
Eccezioni controllate e non controllate
Dichiarazione throws
Lezione 32 (13 febbraio 2007, 8:30 - 10:30)
Eccezioni controllate per metodi che chiamano altri metodi
Eccezioni controllate e ridefinizione dei metodi
Esempio di uso delle eccezioni:
Pedina.java,
Pedone.java,
Alfiere.java,
Cavallo.java,
PosizioneIllegaleException.java,
MossaIllegaleException.java,
MainScacchi.java
Le classi di input e output standard da tastiera e video:
System.in e System.out
Fine del corso
Secondo compitino: l'8 marzo alle 14:30 senza iscrizione
Primo appello: il 22 marzo alle 14:30 con iscrizione
È possibile venire al secondo compitino, rifiutare il voto complessivo
dei compitini e presentarsi all'appello del 22 marzo.