| DOCENTE | Andrea Corradini <andrea@di.unipi.it> | 
| Orario | Lunedì 14-16, Aula C Martedì 9-11, Aula B Giovedì 11-13, Aula C | 
| Orario ricevimento | Cliccare qui | 
OCAML.
Java.
Eclipse.
Programming Languages.
| N. | DATA | TITOLO | RIFERIMENTI | ARGOMENTI | 
| 
	      1
	     |  17/02/2014
	     | Introduzione al corso | Lucidi: PR2B-2014-01-Introduzione.pdf, fino a pag. 21. | Informazioni logistiche, Materiale didattico, Modalità di esame, Contenuti del corso: 1) Metodologie di programmazione orientata agli oggetti, 2) Paradigmi di programmazione e loro implementazione. | 
| 
	      2
	     |  18/02/2014
	     | Programmazione, astrazioni e linguaggi | 
Lucidi: PR2B-2014-01-Introduzione.pdf, tutti Letture: Capitolo 1 di [PDJ] | Paradigmi di programmazione, Principi dell'object-oriented programming, Information hiding, Programming by contract, Meccanismi di astrazione, Astrazione per parametrizzazione e per specifica. | 
| 
	      3
	     |  20/02/2014
	     | 
Ripasso di OCaml:  compilazione, tipi non modificabili, generici | Lucidi: PR2B-2014-03-TipiOCaml.pdf, fino a pag. 43 (Generic BST) Letture: Capitoli 2-8 di [PLT] | 
Ripasso di OCaml; Programmare con i tipi di dato; Astrazione sui dati; Tipi di dato ricorsivi; Alberi binari; Compilazione e esecuzione di programmi in OCaml (ocamlc e ocamlrun); Alberi binari di ricerca;  Funzioni generiche; Alberi e Alberi binari di ricerca generici. | 
| 
	      4
	     |  24/02/2014
	     | Abstract Collections in OCaml; Verso i Tipi Mutabili | 
Lucidi: PR2B-2014-03-TipiOCaml.pdf, tutto Letture: Capitoli 13-14 di [PLT] | Programmazione di Abstract Data Types con Moduli in OCaml; Insiemi generici; Introduzione a record mutabili e aliasing. | 
| 
	      5
	     |  25/02/2014
	     | Tipi Mutabili; ASM per OCaml, Concetti basici di Java | 
Lucidi: PR2B-2014-04-TipiMutabili.pdf,  tutto Letture: Capitolo 15 di [PLT] | La Abstract Stack Machine per OCaml: workspace, stack e heap; Tipi primitivi e non in OCaml; Rappresentazione dell'aliasing. Da Value-Oriented Programming a Object Oriented Programming; Terminologia; Dichiatazione di Classi; Compilazione ed Esecuzione in Java; Creazione di oggetti; NULL; Costrutti di controllo. | 
| 
	      6
	     |  27/02/2014
	     | Esercitazione su OCaml | Sviluppo di implementazioni del tipo di dati generico a' set | 
Esercitazione svolta su computer portatili degli studenti. Si
consiglia di caricarli a sufficienza per mancanza di prese elettriche.
Istallare OCaml.
 | 
| 
	      7
	     |  3/03/2014
	     | 
Lezione tenuta dal Prof. Ferrari | 
Lucidi: 
PR2B-2014-05-versoJava.pdf,
   tutto  Letture: Capitolo 19-20-21 di [PLT] | Tipi primitivi in Java; Interfacce e relazione implements. Metodi e variabili statici (di classe); metodi e variabili di istanza; Realizzazione di tipi di dati ricorsi, di pattern matching e di funzioni higher-order à la OCaml in Java; Stringhe in Java. | 
| 
	      8
	     |  4/03/2014
	     | 
Lezione tenuta dal Prof. Ferrari | 
Lucidi:  Letture: Capitolo 23-24 di [PLT] | La ASM per Java; Allocazione di oggetti e di array nello heap; Esempi di valutazione di frammenti Java e di aliasing; Ereditarietà e subtyping; Principio di sostituzione; Costruttori e super; THIS; Casting; Metodi della classe Object; Tipo statico e dinamico di una espressione. | 
| 
	      9
	     |  6/03/2014
	     | Dynamic dispatch; Eccezioni in Java | 
Lucidi:  Letture: Capitolo 25 di [PLT] | Dynamic dispatch (o dynamic binding); Tabella dei metodi; Rappresentazione nella ASM delle tabelle dei metodi e della gerarchia delle classi; Animazione di esecuzione di un frammento Java nella ASM. Situazioni anomale in programmazione; Eccezioni in Java; Lanciare e catturare un'eccezione; Struttura di messaggi di errore; | 
| 
	      10
	     |  10/03/2014
	     | Eccezioni in Java | 
Lucidi:  Letture: Capitolo 28 di [PLT] (anche Capitolo 4 di [PDJ]) | Gestione delle eccezioni in Java; Comportamento default; Comando throw; Gerarchia di eccezioni; Clausola throws; Costrutto try-catch-finally; Eccezioni checked e unchecked. | 
| 
	      11
	     |  11/03/2014
	     | 
Lezione a corsi riuniti | File da scaricare: | Portare i propri computer, ben caricati. Istallare una distribuzione di Java (vedere i link di sopra). Per l'esercitazione si useranno i comandi javac (compilatore) e java (interprete), eseguiti da linea di comando. Per scrivere i programmi si può usare un qualunque editor di testo. | 
| 
	      12
	     |  13/03/2014
	     | 
Animazione della Abstract Stack Machine: OCaml e Java | 
Lucidi:  Letture: Capitoli 3 e 5 (fino pag. 83) di [PDJ] | Evoluzione della Abstract Stack Machine per valutazione di espressioni OCaml e esecuzione metodi Java con lancio di eccezione; Astrazione procedurale in Java (per parametrizzazione e specifica); Abstract Data Types (ADT): definizione; ADT come astrazione di dati per specifica; Struttura della specifica; Esempi: IntSet, Vector; Esempio di ADT specificato con assiomi/equazioni: Stack of Items. | 
| 
	      13
	     |  17/03/2014
	     | Specifica e Implementazione di Tipi di Dati Astratti in Java | 
Lucidi:  Letture: Capitolo 5 (fino pag. 111) di [PDJ] | Specifica di Tipi di Dati Astratti; Esempio: Polinomi (non modificabili). Implementazione di TDA: Scelta della rappresentazione; Tipi record in Java (Pair); Implementazione di IntSet con Vector; Impl. di Poly con array; Impl. di Poly con Vector di Pair. Ragionare su TDA: Modificabilità. | 
| 
	      14
	     |  18/03/2014
	     | Ragionare sui Tipi di Dati Astratti | 
Lucidi:  Letture: Capitolo 5 (tutto) di [PDJ] | Ragionare su TdA: Categorie di operazioni; Adeguatezza di astrazione; Proprietà di astrazione; Correttezza di implementazione; Funzione di Astrazione; Invariante di Rappresentazione; Metodi toString() e repOk(); Correttezza di implementazione: rispetto a Invariante di rep; rispetto a specifica dei metodi. | 
| 
	      15
	     |  20/03/2014
	     | Gerarchie di tipi in Java | 
Lucidi:  Letture: Capitolo 7 di [PDJ] | Gerarchie di tipo; Astrazione per specifica applicata ai tipi di dati; Esempi di specifica e implementazione di sottotipi, con superclasse concreta, astratta e interfaccia; Ereditarietà multipla e singola; Gerarchia di tipi per implementazioni multiple; Principio di sostituzione: regola della segnatura, del metodo e della proprieta'. | 
| 
	      16
	     |  24/03/2014
	     | Java generics | 
Lucidi:  Letture: Generics in the Java Programming Language, di Gilad Bracha. | 
	  Classi e interfacce generiche in Java; Parametri di tipo; L'interfaccia Comparable | 
| 
	      17
	     |  25/03/2014
	     | Esercitazione su implementazione di Tipi di Dati Astratti | File da scaricare: | Portare i propri computer, ben caricati. Istallare una distribuzione di Java (vedere i link di sopra). Per l'esercitazione si useranno i comandi javac (compilatore) e java (interprete), eseguiti da linea di comando. Per scrivere i programmi si può usare un qualunque editor di testo. | 
| 
	      18
	     |  27/03/2014
	     | Esercitazione su specifica e implementazione di Tipi di Dati Astratti, anche generici | File da scaricare: | AVVISO: Visite guidate al Museo degli Strumenti per il Calcolo | 
| 
	      19
	     |  31/03/2014
	     | Prima verifica intermedia Elenco iscritti alla prova con aula | 
La prova di verifica verterà su specifica, implementazione e
dimostrazione di correttezza di Tipi di Dati Astratti in Java. | 
 
 | 
| 
	      20
	     |  7/04/2014
	     | Collezioni, Java Collection Framework e Iteratori | Lucidi: PR2B-2014-19-CollezioniIteratori.pdf, fino a pag. 30. | Collezioni: motivazioni; il Java Collections Framework; Interfacce Collection, List, Set, Queue, Map; Classi ArrayList, Vector,LinkedList; Classi di utilità Arrays e Collections; Iteratori: motivazioni; Interfaccia Iterator: specifica e uso; il comando for-each; Modifiche concorrenti; Esempi di specifica di iteratori. | 
| 
	      21
	     |  8/04/2014
	     | Iteratori | 
Lucidi: PR2B-2014-19-CollezioniIteratori.pdf, tutto. | Esempi di uso di iteratori; Implementazione di iteratori; Classi interne statiche e non; Funzione di astrazione e invariante di rappresentazione per classi che definiscono iteratori. Esercizio: sviluppo di un iteratore per Array. | 
| 
	      22
	     |  10/04/2014
	     | Correzione prima verifica | 
Correzione: ES2014-01-SOL.pdf. | Nota: La lezione inizierà alle ore 12 per sospensione dell'attività didattica per Assemblea Studentesca di Ateneo. | 
| 
	      23
	     |  14/04/2014
	     | Macchine Astratte, Linguaggi, Interpretazione, Compilazione | 
Lucidi: PR2B-2014-20-MacchineAstratte.pdf
 | Macchine astratte; Interpretazione; Compilazione. | 
| 
	      24
	     |  15/04/2014
	     | Interpreti, Compilatori e Semantica Operazionale | 
Lucidi: PR2B-2014-21-SemOp-Espressioni.pdf
 
 | Per altra documentazione, si veda il corso Programmazione II su Moodle (https://elearning.di.unipi.it/moodle/). Per l'accesso si chieda la chiave al docente. | 
| 
	      25
	     |  17/04/2014
	     | Valutazione di Espressioni: Type Checking ed Eliminazione della Ricorsione | 
Lucidi: PR2B-2014-22-TypeChecking-Ricorsione.pdf
 
 | |
| 
	      26
	     |  28/04/2014
	     | 
Strutturare i dati nei linguaggi di programmazione I | 
Lucidi: PR2B-2014-23-Dati.pdf
 | Tipi di Dati; Type Checking statico e dinamico; Inferenza di tipo; Polimorfismo; Descrittori di dato; Termini e Pattern Matching; Tipi Scalari; Tipi Composti; Puntatori | 
| 
	      27
	     |  29/04/2014
	     | 
Strutturare i dati nei linguaggi di programmazione II | 
 | Tipi di dati di Sistema; Pila limitata non modificabile: specifica, semantica (tipo di dato algebrico) e implementazione (con array); Lista di interi: specifica, implementazione a heap; Pila limiatata modificabile: specifica, semantica (con riperimenti a pile non modificabili) e implementazione (con array); Programmi come dati; Meccanismi per definizione di nuovi tipi. | 
| 
	      28
	     |  5/05/2014
	     | Nomi, Bindings, Ambienti | 
Lucidi: PR2B-2014-24-Nomi.pdf
 | Nomi nei linguaggi di programmazione; Oggetti denotabili; Bindings; Ambiente; Ambiente locale, non locale e globale; Scope o portata di un binding; Scoping statico o dinamico; Specifica, semantica e implementazione di ambienti polimorfi in OCaml. | 
| 
	      29
	     |  6/05/2014
	     | Controllo di Sequenza: Espressioni e Comandi | 
Lucidi: PR2B-2014-25-ExpCom.pdf, fino a lucido n. 33.
 | Espressioni semplici con operazioni primitive; Operatori come funzioni parziali;Operatori non stretti; Valutazione: regola interna e regola esterna; Frammento funzionale: sintassi di espressioni, valori esprimibili, ambienti, type checking, semantica e implementazione dei singoli operatori, semantica delle espressioni. Frammento imperativo: sintassi di espressioni e comandi; valori esprimibili, denotabili e memorizzabili; specifica e implementazione della memoria; domini di valori e casting; semantica delle espressioni con ambiente e memoria. | 
| 
	      30
	     |  8/05/2014
	     | 
Controllo di Sequenza: Comandi | 
Lucidi: PR2B-2014-25-ExpCom.pdf, tutto
 | Semantica operazionale e interprete OCaml di semplici comandi: assegnamento, condizionale, while, sequenza di comandi. Macro, macroespansione; Subroutine statiche Fortran; Copy rule statica e dinamica; Record di attivazione; Stack di RdA; Call/return di sottoprogramma; Blocchi; Funzioni e procedure; Cenni su passaggio di parametri per valore e per riferimento); Gestione di RdA con scoping statico; Costruzione della catena statica a runtime. | 
| 
	      31
	     |  12/05/2014
	     | 
Gestione Record di Attivazione per Blocchi e Procedure | 
Lucidi: PR2B-2014-26-AR.pdf, tutto | Funzioni come parametri e come risultato di funzione; Chiusura; Funzioni con Stato; Scoping dinamico; Eliminazione dei nomi da record di attivazione; Traduzione con indirizzo base + offset. Estensione di linguaggio didattico funzionale con Let, astrazione e applicazione di funzione; Semantica e interprete operazionale del Let. | 
| 
	      32
	     |  13/05/2014
	     | 
Interprete operazionale di Let e funzioni nel linguaggio didattico  | 
Lucidi:PR2B-2014-27-FunDid.pdf, tutto | Semantica operazionale e Interprete per Astrazione Funzionale e Applicazione di Funzione, con scoping statico e dinamico; Definizioni ricorsive; Scoping statico: Necessità di diversa definizione dell'ambiente non locale nella chiusura; Il costrutto Rec e costruzione di astrazione funzionale come punto fisso; Excursus: Definizioni Ricorsive come Punti Fissi di Funzionali; Costruzione iterativa del punto fisso per approssimazioni successive. Meccanismo di Passaggio di Parametri; Parametri formali e attuali; Modalità di passaggio ottenute con binding di formali a attuali nell'ambiente: per Costante, Riferimento, Oggetto, Funzione, Procedura; Parametri con valori default e varargs; Passaggio per valore. | 
| 
	      33
	     |  15/05/2014
	     | Esercitazione su OCaml e interprete operazione del linguaggio didattico | File da scaricare: | Esercitazione svolta su computer portatili degli studenti. Si consiglia di caricarli a sufficienza per mancanza di prese elettriche. | 
| 
	      34
	     |  19/05/2014
	     | 
Passaggio di parametri | 
Lucidi: PR2B-2014-28-ParPass.pdf, tutto | Passaggio di parametri per valore-risultato, e confronto con passaggio per riferimento; Passaggio per nome. Da strutture dati dinamiche e procedure a classi e oggetti; Paradigma OO: oggetti, ereditarietà, polimorfismo e dynamic binding; Implementazione di classi e oggetti; Liste di tabelle di metodi; vtables in c e JAVA; Compilazione separata di classi in Java; Constant pool per risoluzione di riferimenti a tempo di loading; Istruzioni per invocazione di metodi in bytecode; Ereditarietà multipla. | 
| 
	      35
	     |  20/05/2014
	     | 
Supporto a runtime per classi e oggetti | 
Lucidi:PR2B-2014-29-Objx.pdf, tutti.  | Class loading in Java; Stack inspection per sicurezza; Controllo degli accessi; Codice trusted e untrusted; Meccanismo di privilegi/permissions. Gestione della memoria: heap vs. stack; Heap con blocchi di dimensione fissa/variabile; Lista libera; Frammentazione; Identificazione del garbage. | 
| 
	      36
	     |  22/05/2014
	     | 
Garbage collection | 
Lucidi:PR2B-2014-30-GCv1.pdf, tutti.  | Algoritmi di Garbage Collection; Reference Counting; Mark-Sweep; Copying collection; Approcci basati su generazioni. Confronto tra supporto a runtime di vari linguaggi: Fortran, Algol, Pascal, C, Java, C#, ML, LISP. | 
| 
	      37
	     |  27/05/2014
	     | Esercitazione a classi riunite | File da scaricare: | Esercitazione svolta su computer portatili degli studenti. Si consiglia di caricarli a sufficienza per mancanza di prese elettriche. | 
| 
	      38
	     |  30/05/2014
	     | Seconda verifica intermedia | 
 | 
 
 |