Programmazione II - Corso B [PR2-B-14]


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

Informazioni utili e Avvisi


Modalità di esame

L'esame di PR2 è costituito da un progetto, uno scritto e un orale. Per poter sostenere l’orale è necessario aver superato lo scritto con votazione >= 18/30 e aver conseguito una valutazione positiva del progetto.
Il corso prevede due prove in itinere, rispettivamente a metà e alla fine del corso. Il superamento di queste due prove equivale al superamento dello scritto, per la sessione estiva (appelli di giugno e luglio).
In generale, lo scritto superato in un appello consente di sostenere l'orale solo in un appello della stessa sessione di esami.
Durante le prove non è consentito l'uso di libri o appunti.
Per partecipare alle prove scritte è necessario iscriversi attraverso la pagina Iscrizioni Esami del sito del Dipartimento dedicato alla didattica.

Progetti

Testi delle prove

Risultati delle prove d'esame


Materiale Didattico

Attenzione: Per accedere a parte del materiale didattico, si veda il corso Programmazione II su Moodle (https://elearning.di.unipi.it/moodle/). Per l'accesso usare le proprie credenziali di ateneo e la chiave che può essere richiesta al docente.

Testi di consultazione

Per la parte relativa ai paradimi di programmazione: Per la parte relativa alla programmazione concorrente:

Ulteriore materiale didattico è presente nella descrizione degli argomenti trattati a lezione

Risorse didattiche aggiuntive

OCAML.

  1. Il sito web ufficiale di OCAML OCAML Site. In questo sito si trova tutta la documentazione di OCAML, i manuale e la descrizione delle librerie standard.
  2. Il sito ufficiale per scaricare le versioni più recenti della distribuzione di OCaml OCaml Download
  3. Il sito web del libro Introduction to Objective CAML di Emmanuel Chailloux, Pascal Manoury and Bruno Pagano.
  4. Developing Applications with OCAML di Jason Hickey (versione preliminare)

Java.

  1. Per un testo su Java in italiano si segnala Programmazione in Java, 2a edizione, di Roberto Bruni, Andrea Corradini, Vincenzo Gervasi.
  2. Il sito web ufficiale di Java Java Site.
  3. Il sito ufficiale per scaricare le versioni più recenti della distribuzione di Java Dowload di Java per tutti i sistemi operativi,
  4. Java 7 API.
  5. Java Tutorial.
  6. Java Code Conventions.
  7. Java Language Specification.
  8. The Java Virtual Machine Specification.
  9. Un corso introduttivo su Java: LIP-07 [aprire, nel frame in basso a sinistra, i link "Lezioni I modulo" e "Lezioni II modulo"].
  10. Il sito ufficiale di Java Modeling Language JML. Java Modelling Language (JML) e' un linguaggio di specifica che permette di definire astrazioni procedurali sul modello di programmazione descritto nel corso. Attualmente JML e' disponibile solamente per Java 1.4.2. Le specifiche vengono aggiunte all'interno del codice sorgente Java, tramite commenti dotati di una speciale sintassi che precedono il metodo interessato. Questo significa che il codice JML non viene letto dal compilatore Java, ma solo dagli strumenti di JML.

Eclipse.

    Eclipse Home Page.

Programming Languages.

    DMOZ Programming Languages Project.
  1. Una visione di prospettiva sui linguaggi di scripting di John K. Ousterhout download.

Tabella delle lezioni

N.

DATA
Aula
Orario

TITOLO

RIFERIMENTI

ARGOMENTI

1

17/02/2014
Aula C
15-16

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
Aula B
9-11

Programmazione, astrazioni e linguaggi

Lucidi: PR2B-2014-01-Introduzione.pdf, tutti
PR2B-2014-02-ParadigmiAstrazione.pdf

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
Aula A1
11-13

Ripasso di OCaml: compilazione, tipi non modificabili, generici
Lezione tenuta dal Prof. Ferrari

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.
Esempi di programmazione in OCaml (zip file) TreesOcaml.zip

4

24/02/2014
Aula C
14-16

Abstract Collections in OCaml; Verso i Tipi Mutabili

Lucidi: PR2B-2014-03-TipiOCaml.pdf, tutto
PR2B-2014-04-TipiMutabili.pdf, fino a pag 10

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
Aula B
9-11

Tipi Mutabili; ASM per OCaml, Concetti basici di Java

Lucidi: PR2B-2014-04-TipiMutabili.pdf, tutto
PR2B-2014-04b-ASM-animazione.pdf
PR2B-2014-05-versoJava.pdf, fino a pag 22

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
Aula C
11-13

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.
File utili: MySet.ml, testMySet.ml

7

3/03/2014
Aula A
14-16

Lezione tenuta dal Prof. Ferrari
Overview di Java, per differenze rispetto a OCaml

Lucidi: PR2B-2014-05-versoJava.pdf, tutto
PR2B-2014-06-004-OCAMLvsJAVA.pdf, fino a pag 22

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
Aula A
9-11

Lezione tenuta dal Prof. Ferrari
La Abstract Stack Machine per Java

Lucidi:
PR2B-2014-07-005-JavaASM.pdf,

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
Aula C
11-13

Dynamic dispatch; Eccezioni in Java

Lucidi:
PR2B-2014-08-006-DynamicDispatch.pdf,
PR2B-2014-09-007-Eccezioni.pdf, fino a pag. 13.

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
Aula C
14-16

Eccezioni in Java

Lucidi:
PR2B-2014-09-007-Eccezioni.pdf.

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
Aula A
9-11

Lezione a corsi riuniti
Esercitazione su Java

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
Aula C
11-13

Animazione della Abstract Stack Machine: OCaml e Java
Specifica di Tipi di Dati Astratti in Java

Lucidi:
PR2B-2014-04b-ASM-animazione.pdf
PR2B-2014-10-007bis-EccezioniSimul.pdf
PR2B-2014-11-008-AstrazioniDatiSpecifica.pdf, slides 1-24 e 35-38.

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
Aula C
14-16

Specifica e Implementazione di Tipi di Dati Astratti in Java

Lucidi:
PR2B-2014-11-008-AstrazioniDatiSpecifica.pdf, tutto
PR2B-2014-12-09-AstrazioniDatiImplementazione.pdf
PR2B-2014-13-010-Reasoning.pdf, fino a pag. 4.

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
Aula B
9-11

Ragionare sui Tipi di Dati Astratti

Lucidi:
PR2B-2014-13-010-Reasoning.pdf

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
Aula C
11-13

Gerarchie di tipi in Java

Lucidi:
PR2B-2014-15-011-Gerarchie.pdf, PR2B-2014-16-012-Gerarchie2.pdf

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
Aula C
14-16

Java generics

Lucidi:
PR2B-2014-17-013-Generics.pdf

Letture: Generics in the Java Programming Language, di Gilad Bracha.

Classi e interfacce generiche in Java; Parametri di tipo; L'interfaccia Comparable; Vincoli di tipo (extends); Metodi generici; Compatibilità per assegnamento in Java; Compatibilità e principio di sostituzione; Tipi covarianti e contravarianti; Wildcards: ?, extends, super; Differenze tra wildcards e Object; Type erasure; Compilazione di Java Generics.

17

25/03/2014
Aula B
9-11

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
Aula C
11-13

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
Aula A, B
14.00 puntuali!!!

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.
Testo: ES2014-01.pdf.

  • La prova inizierà alle ore 14:00 precise
  • Per prendere parte alla prova è obbligatorio iscriversi alla pagina http://compass2.di.unipi.it/didattica/inf31/share/orario/Appelli/ almeno 24 ore prima
  • Gli studenti che si sono iscritti per l'appello straordinario si devono presentare in Aula B, e devono identificarsi presso il docente.
  • Non è consentito usare dispense, libri, appunti o computer durante la prova intermedia.

20

7/04/2014
Aula C
14-16

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
Aula B
9-11

Iteratori

Lucidi: PR2B-2014-19-CollezioniIteratori.pdf, tutto.
Iteratore su array: classi ArrayIterator.java e Test.java.
Letture: Capitolo 6 di [PDJ],
Tutorial su Java Collections Framework.pdf

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
Aula C
12-13

Correzione prima verifica

Correzione: ES2014-01-SOL.pdf.
File java:

Nota: La lezione inizierà alle ore 12 per sospensione dell'attività didattica per Assemblea Studentesca di Ateneo.

23

14/04/2014
Aula C
14-16

Macchine Astratte, Linguaggi, Interpretazione, Compilazione

Lucidi: PR2B-2014-20-MacchineAstratte.pdf
Letture: Capitolo 1 di [LPPP]

Macchine astratte; Interpretazione; Compilazione.

24

15/04/2014
Aula B-A
9-11

Interpreti, Compilatori e Semantica Operazionale

Lucidi: PR2B-2014-21-SemOp-Espressioni.pdf
Letture:

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
Aula C
11-13

Valutazione di Espressioni: Type Checking ed Eliminazione della Ricorsione

Lucidi: PR2B-2014-22-TypeChecking-Ricorsione.pdf
File OCaml (anche per esercizio in lucido 18, pag 9):

Risultati Prima Verifica Intermedia del 31 marzo 2014

26

28/04/2014
Aula A
14-16

Strutturare i dati nei linguaggi di programmazione I
Lezione tenuta dal Prof. Ferrari

Lucidi: PR2B-2014-23-Dati.pdf
Letture: Capitolo 8 di [LPPP]

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
Aula A
9-11

Strutturare i dati nei linguaggi di programmazione II
Lezione tenuta dal Prof. Ferrari

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
Aula C
14-16

Nomi, Bindings, Ambienti

Lucidi: PR2B-2014-24-Nomi.pdf
Letture: Capitolo 4 di [LPPP]

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
Aula A
9-10

Controllo di Sequenza: Espressioni e Comandi

Lucidi: PR2B-2014-25-ExpCom.pdf, fino a lucido n. 33.
Letture: Capitolo 6 di [LPPP]

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
Aula A
11-13

Controllo di Sequenza: Comandi
Gestione Record di Attivazione per Blocchi e Procedure

Lucidi: PR2B-2014-25-ExpCom.pdf, tutto
PR2B-2014-26-AR.pdf, fino a lucido 43
Letture: Capitolo 5 di [LPPP]

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
Aula C
14-16

Gestione Record di Attivazione per Blocchi e Procedure
Interprete operazionale di Let e funzioni nel linguaggio didattico

Lucidi: PR2B-2014-26-AR.pdf, tutto
PR2B-2014-27-FunDid.pdf, fino a lucido 8

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
Aula B
9-11

Interprete operazionale di Let e funzioni nel linguaggio didattico
Passaggio di parametri

Lucidi:PR2B-2014-27-FunDid.pdf, tutto
PR2B-2014-28-ParPass.pdf, fino a lucido 16
Letture: Capitolo 7 di [LPPP], prima parte

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
Aula C
11-13

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
Aula C
14-16

Passaggio di parametri
Supporto a runtime per classi e oggetti

Lucidi: PR2B-2014-28-ParPass.pdf, tutto
PR2B-2014-29-Objx.pdf, fino a lucido 38 Letture: Capitolo 10 di [LPPP]

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
Aula B
9-11

Supporto a runtime per classi e oggetti
Gestione della memoria

Lucidi:PR2B-2014-29-Objx.pdf, tutti.
PR2B-2014-30-GCv1.pdf, fino a lucido 16.
Letture: Capitolo 8, sezione 11 di [LPPP]

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
Aula C
11-13

Garbage collection
Confronto tra i supporti a run time di vari linguaggi

Lucidi:PR2B-2014-30-GCv1.pdf, tutti.
PR2B-2014-31-RTS.pdf.
Letture: Capitolo 13 di [LPPP]

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
Aula A
9-11

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
Aula B, C
14.00

Seconda verifica intermedia