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.