Presentazione del corso.Mercoledì 5 marzo 2014 - Laboratorio 1
Sviluppo di Programmi certificati: precondizioni, postcondizioni, invarianti.
JAVA: funzioni come metodi statici.
Funzione per il calcolo della somma tra due numeri naturali.
Funzione che calcola il predecessore.
Terminazione.
Versione efficiente del calcolo della somma.
Struttura di un programma JAVA: il programma helloWorld.Venerdì 7 marzo 2014 - Lezione 2
Rappresentazione di interi con stringhe binarie.
Formalizzazione di una tecnica per dimostrare la correttezza di un programma iterativo.Martedì 11 marzo 2014 - Lezione 3 (Chierichetti)
Funzione per il calcolo della differenza, prodotto ed esponenziale.
Introduzione alle funzioni ricorsive.
Correttezza di una funzione ricorsiva.
Funzione differenza: versione di complessitą lineare e versione quadratica che itera il predecessore.Mercoledì 12 marzo 2014 - Laboratorio 2
Calcolo dei tempi di esecuzione di un programma.
Cenni al profiling del codice.
Moltiplicazione egiziana.
Errori di stack overflow (prodotto ricorsivo).Venerdì 14 marzo 2014 - Lezione 4
Introduzione agli array.
Trasformazione di numeri in base k (con cifre registrare in un array).
Somma lineare (nella taglia degli interi) e logaritmica (negli interi).
Funzioni ricorsive: l'esempio di Fibonacci;Martedì 18 marzo 2014 - Lezione 5
La pila di record di attivazione delle chiamate di funzione.
Sviluppo di programmi a partire dalle asserzioni: Fibonacci iterativo.
Funzione ricorsiva efficiente per la funzione di Fibonacci.
Trasformazione di un qualsiasi ciclo in funzioni ricorsive.
Dimostrazioni di correttezza per funzioni ricorsive per induzione.
Costrutto iterativo for.Mercoledì 19 marzo 2014 - Laboratorio 3 (Salvo)
Introduzione agli oggetti. Definizione di variabili String e array. Creazione di oggetti.
Heap e Stack.
Oggetti mutabili (array) e immutabili (stringhe).
Assegnazione tra oggetti: alias e side effects.
Un primo programma con array: minimo di un vettore.
Evidenze sperimentali di oggetti mutabili e immutabili.Venerdì 21 marzo 2014 - Lezione 6
Stampa di un vettore: versione iterativa e ricorsiva.
Evidenze sperimentali che una scansione ricorsiva di un array percorre il vettore "due volte":
in avanti (all'attivazione delle chiamate) e all'indietro (al rientro delle chiamate).
Array multidimensionali (matrici) in Java come array di array.
Esercizi: stampa di una matrice e allocazione del triangolo di Tartaglia.
Discussione conclusiva sull'astrazione procedurale.Martedì 25 marzo 2014 - Lezione 7
Astrazione per parametrizzazione. Generalitą di una funzione.
Esempio: stampa di un vettore. Versione che stampa tutto il vettore.
Versione parametrizzata rispetto a indici di inizio e fine per stampare una porzione di vettoe.
Versione parametrizzata rispetto a un passo.
Iterazione astratta. Ciclofor (x : a) C
.
System.out.printf("\n")
e portabilitą dei programmi.
Pillole di Storia 1: Obiettivi di Java: portabilitą degli eseguibili. Il Bytecode Java e la Java Virtual Machine.
Esempi conclusivi di sviluppo di programmi su array: coefficienti binomiali e baricentro.
Riflessioni su complessitą asintotica degli algoritmi ed efficienza concreta dei programmi.
Pillole di Storia 2: La programmazione a oggetti: dai tipi di dato astratto agli oggetti. SmallTalk.Mercoledì 26 marzo 2014 - Laboratorio 4
Programmazione a Oggetti: strutture dati + metodi (incapsulamento) + ereditarietą.
Metafora per capire gli oggetti: automa (struttura ignota) con interfaccia (pulsanti).
Esempio di specifica e implementazione di una classe: tipo Razionale.
Funzioni di rappresentazione e di astrazione. Invarianti di tipo di dato.
Esempio: versione mutabile e immutabile dei Razionali.
Esempi sulle stringhe. Il problema della verifica se due stringhe sono anagrammi.Venerdì 28 marzo 2014 - Lezione 8
Efficienza ed eleganza: Programmazione Dinamica. Esempi di Coefficienti Binomiali e Fibonacci.
Costruttori. Overloading dei costruttori.Martedì 1 aprile 2014 - Lezione 9
Metodi pubblici e privati. Esempi sui razionali. Uso direduce()
per mantenere l'invariante di tipo di dato.
Esercizio di programmazione ricorsiva: Baricentro con un'unica passata ricorsiva.
Introduzione a Ereditarietą e Sottotipaggio.Mercoledì 2 aprile 2014 - Laboratorio 5
Regola dell'assegnazione e passaggio di parametri.
Tipo statico (apparente) e tipo dinamico (attuale).
Controlli del Type Checker e nozione di Type Safety.
Meccanismo computazionale run-time: lookup dinamico dei metodi.
Metodi ereditati daObject
:String toString()
eboolean equals(Object)
.
Overriding: corretta ridefinizione dei metodi ereditati daObject
. Interferenze con l'overloading diequals
.
Fine tipoRaz
(razionali mutabili) eRazImm
(razionali immutabili).
Esempi di definizioni di Classi e Sottoclassi.Venerdì 4 aprile 2014 - Lezione 10
Punti e Figure.
Esempio sul lookup dinamico dei metodi: classiMartedì 8 aprile 2014 - Lezione PerdutaPunto
,PuntoColorato
,PuntoCartesiano
.
Specializzazione dei metodi via overriding. Write stupid methods!
Lezione Annullata causa altro impegno Aula V.Mercoledì 9 aprile 2014 - Laboratorio 6
Esempi di definizioni di Classi e Sottoclassi.Venerdì 11 aprile 2014 - Lezione 11
Vector, IntSet e Polinomi.
Introduzione alle Interfacce.Martedì 29 aprile 2014 - Lezione 12
Esercizi in vista dell'esonero: divisione intera.
Introduzione alle eccezioni: eccezioni come oggetti.Mercoledì 30 aprile 2014 - Laboratorio 7
Uso di eccezioni: sollevamento, cattura, trattamento.
Eccezioni in Java: dichiarazione (throws
), sollevamento esplicito (throw
).
Cattura di Eccezioni: bloccotry-catch
. Analisi sequenziale. Differenza con l'overloading (best matching).
Eccezioni checked e unchecked.
Esempi di definizione ed uso di eccezioni.Martedì 6 maggio 2014 - Lezione 13
Esempi di definizione ed uso di iteratori.
Strutture dati in Java: liste ed alberi.
Discussione sul polimorfismo: terminologia.Mercoledì 7 maggio 2014 - Laboratorio 8 (Salvo)
Polimorfismo indotto dal subtyping: esempio, ordinamento di un array di tipoComparable[]
.
Strutture dati: Liste diObject
: vantaggi e limiti.
Liste polimorfe, usando i Tipi Generici di Java.
Traduzione in Java di una definizione di tipo induttivo.
Discussione Interattiva sulla progettazione di un'applicazione per la gestione del gioco della Dama.Venerdì 9 maggio 2014 - Lezione 14
Ancora sui tipi generici: tipi generici e subtyping.Martedì 13 maggio 2014 - Lezione 15
Wildcards e limiti superiori e inferiori.
Attenzione: covarianza e controvarianza del subtyping.
Funzioni come parametro: come fare in Java: Interfacce Funzionali (aka Blocchi)
Funzionali sulle liste:map
ereduce
.
Funzioni come parametro: soluzione pił alla moda: Lambda Expressions.
Completamento del codice delle liste generiche.Mercoledì 14 maggio 2014 - Laboratorio 9
FunzionitoString
,equals
epowerset
(con uso dimap
ereduce
).
Alcuni problemi tecnici: instanceof su tipi generici (uso della wildcard) e cast necessari nelle liste.
Esercitazioni su input/output.Venerdì 16 maggio 2014 - Lezione 16 (Chierichetti)
Introduzione alle Collection Classes.Martedì 20 maggio 2014 - Lezione 17
Interfaccia Collection e diverse classi che implementano collezioni.
Vantaggi e svantaggi delle varie collezioni.
Lo strano caso della collezioneMercoledì 21 maggio 2014 - Laboratorio 10Stack
e della sua superclasseVector
.
Generazione di sottotipi per implementare una interfaccia. Esempio:Addable
.
Ridiscussione sul progetto.
Esercitazioni sulle Collection Classes.Venerdì 23 maggio 2014 - Lezione 18
Miscellanea: cenni ai package.Martedì 27 maggio 2014 - Lezione 19
Miscellanea: rivisitazione distatic
(campi, metodi, inner class) efinal
(campi, metodi, classi).
Miscellanea: iteratori definiti come inner class statiche e private. Motivazioni.
Un affascinante strumento per scrivere programmi che indagano il codice e la struttura delle classi: Reflection.
Miscellanea: extends tra interfacce e dafault methods.Mercoledì 28 maggio 2014 - Laboratorio 11 (Salvo)
Introduzione alle Interfacce grafiche.
Le librerie Swing e AWT: caratteristiche generali, pro e contro.
Oggetti grafici: Frame, bottoni, Textfields, Labels, finestre di dialogo etc.
Gerarchie di eventi e interfacce listener.
Esercitazioni su interfacce grafiche. Piccoli programmi interattivi.Venerdì 30 maggio 2014 - Lezione 20
Layouts. Listener.
Esercitazione: crivello di eratostene. Versione "tradizionale" con array di booleani.Martedì 3 giugno 2014 - Lezione 21
Crivello di Eratostene: versione "a oggetti", basato sull'idea di lista di primi.
Ancora sui generics: alberi binari generici.Mercoledì 4 giugno 2014 - Laboratorio 12 (Salvo)
Esercitazione di ricorsione: il problema della Torre di Hanoi.
Esercitazioni su interfacce grafiche (2).Venerdì 6 giugno 2014 - Lezione 22
Il problema della Torre di Hanoi (1): programma che visualizza le mosse graficamente.
Il problema della Torre di Hanoi (2): programma che permette all'utente di giocare con il mouse.
Chiusura sulle interfacce grafiche: cenni agli Applets.-- IvanoSalvo - 07 Mar 2014
Specifiche e Testing.
Introduzione a tecniche di Testing e Debugging: White Box e Black Box Testing.
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |