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 |
|
|