PROGRAMMAZIONE 2 - A

Corso di

LAUREA in INFORMATICA

Università di Pisa
A.A. 2007-08-09-10-11
docente: prof. Marco Bellia


Programma del corso

Riferimenti bibliografici

         Strutture: lucidi e materiale in questa pagina

         Object-Oriente: B. Liskov (with J. Guttag), Program Development in Java: Abstraction, Specification and Object-Oriented design, Addison-Wesley, 2000

Testi di consultazione

         Strutture: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill, 2006


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

Aula E: prima prova intermedia a.a. 2009-10 - (template.pdf con la struttura di un record di attivazione*)

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

Oggetti e Classi - Struttura di un linguaggio Object Oriented: Funzioni ausiliarie per la costruzioni dei valori di Class e e la loro applicazione per il calcolo di valori Obj. Semantica Operazionale: Estendiamo la funzione Sem con le nuove espressioni (new, this e Field), Modifichiamo le funzioni Semb e Semdl. Lucidi (17-24)

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

Aula A,E (ore 14:00): seconda prova intermedia a.a. 2009-10 (template2.pdf con la struttura di un record di attivazione e ambiente con retention*)

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