PROGRAMMAZIONE 2 - A

Corso di

LAUREA in INFORMATICA

Università di Pisa
Anno Accademico 2009-10
docente: prof. Marco Bellia


Programma del corso

Riferimenti bibliografici

Testi di consultazione


Modalita' di esame

calendario appelli:

AVVISO: Appello III in programma per il giorno 11.6.2010 è stato spostato a Mercoledì 16.6.2010 Aula C ora 15.00. Nella stessa aula e con stesso orario si svolgerà la prova scritta dell'appello III di programmazione II B e la prova scritta dell'appello straordinario di Metodologie di Programmazione,

calendario compitini:

           


Svolgimento del corso

Si altereneranno lezioni con esercitazioni in aula sugli argomenti trattati nelle settimane precedenti

settembre 21

presentazione del corso e introduzione ai linguaggi

settembre 23

macchine astratte, compilazione, interpretazione e run-time support

settembre 29

macchine astratte: relazione tra sintassi, semantica, esecutore (vedi sopra) + esercizio&soluzione

ottobre 1

Semantica Operazionale: Sintassi Astratta, Domini Sintattici, Domini Semantici in un Linguaggio Imperativo

ottobre 6

Semantica Operazionale: Funzioni semantiche per un Linguaggio Imperativo + esercizio

ottobre 8

Ocaml-1 : Un linguaggio per specifica e semantica eseguibile + esercizi - Files allegati: Domini Sintattici   Domini Semantici   Funzioni Semantiche

ottobre 13

Ocaml-2 : il nucleo imperativo, moduli e classi + esercizi: Moduli - Soluz. 1 2 3 Dati-1: descrittori, tipi, sistemi di tipi, tipi statici e dinamici.

ottobre 15

Dati-1: Sintassi (astratta - specifica), Semantica (algebrica), Implementazione. + esercizi: Implementazione di Pila non modificabile - Soluzione

ottobre 20 Dati-2: Sintassi (astratta - specifica), Semantica (algebrica), Implementazione: Liste e Heap
ottobre 22 Dati-3: Strutture modificabili: Sintassi (astratta - specifica), Semantica (algebrica), Implementazione. S-espressioni
ottobre 27 Strutture di controllo . Parte1: Controllo nella valutazione di espressioni - Semantica: domini sintattici e semantici di un linguaggio di espressioni pure. Dalla semantica alla realizzazione di un interprete iterativo: Operazioni primitive
ottobre 29 Strutture di controllo. Parte2: Dalla semantica alla realizzazione di un interprete iterativo: le strutture del Run Time Support - Stack continuazioni e Stack operandi - il ciclo di interpretazione
novembre 3 interruzione prove intermededie corsi semestralizzati
novembre 5

Strutture di controllo. Parte3: Controllo di sequenza e comandi - Semantica: domini sintattici e semantici di un linguaggio Imperativo con espressioni pure. Estendiamo l'interprete funzionale: Le nuove strutture del Run Time Support - Continuazioni e Store - Il ciclo di interpretazione.
Blocchi, Ambienti globali, locali, non locali. Parte1. Ambiente locale statico e dinamico: creazione, attivazione e deattivazione, distruzione. Relazione con la memoria: statica e dinamica. Linguaggio funzionale puro: Let - sintassi e semantica. Le strutture dell'interprete: stack di ambienti.

novembre 10 Programmazione in Java - dott. Michele Albano
novembre 12 Blocchi, Ambienti globali, locali, non locali. Parte2. Linguaggio funzionale puro: Interprete. Blochi in linguaggi imperativi: Let e blocchi - sintassi e semantica operazionale. Le strutture dell'interprete: record di attivazione - envstack, cstack, tempvalstack, tempdvalstack, storestack, labelstack. Le procedure dell'interprete: loop, itsem, itsemden, itsemcl, itsemdecl .
novembre 17 Programmazione in Java - dott. Michele Albano
novembre 19 Programmazione in Java - dott. Michele Albano
novembre 24 Programmazione in Java - dott. Michele Albano
novembre 26 Programmazione in Java - dott. Michele Albano
dicembre 1 Funzioni, Funzioni ricorsive, parametri: Semantica operazionale con scoping statico, e con scoping dinamico. Funzioni definite ricorsione: Estensioni della semantica. Interprete.
dicembre 3 Funzioni, Funzioni ricorsive, parametri: Interprete per scoping dinamico. Regole di scoping: confronti (storia e vantaggi dei due). Linguaggi che non richiedono regole di scoping: Java
Esercizio (di esame): Sintassi concreta, astratta, interpretazione e calcolo dei record di attivazione (testo-sol. parziale completa.pdf)
dicembre 5 Programmazione in Java - dott. Michele Albano
dicembre 10 Programmazione in Java - dott. Michele Albano
dicembre 15 Programmazione in Java - dott. Michele Albano
dicembre 18
febbraio 22 Procedure, Procedure e Funzioni mutuamente ricorsive, parametri: Strutture e domini sintattici. Regole di Scoping. Domini semantici. Semantica Operazionale (lucidi)
febbraio 23 Procedure, Procedure e Funzioni mutuamente ricorsive, parametri: Interprete e strutture RTS. Un linguaggio Imperativo, il suo interprete, un esempio di programma e la sua esecuzione.zip
marzo 1 Oggetti e Classi: Oggetti come ambienti permanenti (ambiente locale statico) ad accesso multiplo. Classi, costruttori e parametri per la creazione (inizializzazione) di istanze diverse. Oggetti, self reference e definizioni mutuamente ricorsive. Oggetti, tipi astratti e definizioni di strutture dati dinamiche. Ereditarietà. Relazioni con Java: analogie e differenze. Struttura di un linguaggio Object Oriented. La sintassi e i suoi domini. I domini semantici: La memoria Heap e le sue locazioni Pointer, Il dominio dei valori e i valori Obj e Class. Lucidi (1-16)
marzo 2
marzo 8

Oggetti e Classi - Struttura di un linguaggio Object Oriented: Un esempio con ereditarietà. Eliminazione della ricorsione (Lucidi 25-28) - facoltativo: estendiamo l'interprete (29-36). Esercizio: Implementazione delle funzioni semantiche e Applicazione all'esecuzione di un programma. .zip
Trasmissione dei parametri: La tecnica base con solo ambiente, e legami identificatori-denotazioni (costante, riferimento, procedura, funzione, oggetto). Altre tecniche: passaggio per nome nei linguaggi funzionali e in quelli imperativi. Lucidi (1-12)

marzo 15 Trasmissione dei parametri: Altre tecniche: passaggio per nome - Semantica Operazionale (domini e funzioni semantiche). Trasmissione in Lisp: tecnica del Funarg e Chiusure (funzionali). Passaggio per Valore: ruolo della memoria e update locazione valore memorizzabile. Una (differente) Semantica Operazionale nella trasmissione per valore (domini e funzioni semantiche). Trasmissione Value-Result. Lucidi (13-23)
Esercizio: Trasmissione Value-Result - Semantica Operazionale (domini e funzioni semantiche).
marzo 22 Ambienti Rivisitati: Tecniche di implementazione a catena di ambienti locali. Catena statica e catena dinamica. Valori funzionale e Retention di ambienti. Una struttura a cinque componenti <namestack,evalstack,tagstack,slinkstack,currentenv> per l'ambiente e implementazione delle operazioni applyenv, bind e bindlist. Modifiche sull'interprete iterativo (linguaggio funzionale). Lucidi (1-18)
Esercizio: Un programma funzionale che richiede retention dell'ambiente (programma: sintassi concreta e astratta ) e la nuova struttura di record di attivazione prodotta dalla sua esecuzione (sequenza di records di attivazione)
aprile 13

Esercizi: Ambiente statico e Ambiente dinamico. Scoping statico e Scoping dinamico. Java: Ambiente statico e scoping statico. Lisp: Ambiente dinamico e scoping dinamico. Haskell, OCaml: Ambiente dinamico, scoping statico.
Scoping Statico: sostituzione degli identificatori con coppie di interi (n,m) specificanti num. n di slink e valore m del displacement.
Scoping Dinamico: Generalità (deep e shallow binding, problemi sulla correttezza e sull'ottimizzazione)
Lucidi (19-30)

aprile 19

Metodologie di Programmazione - Astrazioni: Generalizzazione e Trasparenza. Le diverse forme di astrazione presenti in Java. Astrazioni procedurali in Java: Specifica e implementazione. Dalla Specifica all'implementazione attraverso la metodologia D&A (decomponi e astrai). Specifica in Java: Overview per classi e Header+Requires+Modifies+Effects per metodi. Lucidi

aprile 26

Metodologie di Programmazione: Definizione di nuovi tipi di dati. Dati strutturati e non. Dati concreti e Astrazioni di dato. Records in Java: Il tipo cocreto coppia e il tipo astratto coppia Lucidi (1-9)

maggio 3

Metodologie di Programmazione: Astrazioni di dati. Specifica, presentazione, rappresentazione e implementazione. Una metodologia. La funzioni AF e l'invariante I. Esempi: IntSet, PolyInt, IntStack. IntSet: tre stai concreti per rappresentare e le funzioni AF ed I corrispondenti. Derivare l'implementazione dalla specifica, e dalla scelta dello stato di rappresentazione. Lucidi (10-22)

maggio 10

Metodologie di Programmazione: Astrazioni di dati. Ragionare sulle astrazioni di dati e provare I, provare AF, metodi additionals equals, clone e toString per valori mutable e per valori immutable. Benevolent side effects. Lucidi (22-33)

maggio 17

Metodologie di Programmazione: Esercizio StringIntFun
Interfacce, Classi locali, inner e nested nella definizione degli iteratori: vedi esercizio e cap. 6 - testo di B. Liskov)

maggio 25

* è possibile fare uso dei templates in luogo dei fogli protocollo. In questo caso consiglio di presentarsi con almeno 6/7 copie della pagina scaricata.


Notizie Essenziali

Orario delle lezioni
Orario di ricevimento
Materiale (lucidi, esercizi)


Esami

  Verifiche 2010:

verifica1
Testo
esito
Soluzione (ex1-2)
verifica2
 
esito
 

appello III: testo esito - Orali (iscrizione non richiesta) prima data utile: giovedì ore 15.30 in aula Seminari Ovest (Dipartimento)

appello V: testo esito - Orali (iscrizione richiesta) vedi esito

appello VI: testo esito