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.