Linguaggi di programmazione + laboratorio (a.a. 2010-2011) - laurea INFCD – Bari
Emanuele Covino – Programma definitivo
Requisiti:
Corso di Programmazione (linguaggio C). Corso di Algoritmi e strutture dati (fondamenti del C++).
Teoria
Introduzione a un generico linguaggio (Gabbrielli, Martini – capitolo 1 e 13; Sethi - capitolo 2)
Panoramica storica (GM 13). Macchine astratte e interprete (GM 1). Implementazione di un linguaggio.
Gerarchie di macchine astratte.
Sintassi e semantica (Ausiello – capitolo 2; Gabbrielli, Martini - capitolo 2; Sethi – capitolo 10)
Grammatiche libere. Derivazioni e linguaggi. Alberi di derivazione. La gerachia di Chomsky. Vincoli
sintattici contestuali. Compilatori. Semantica. Pragmatica.
Nomi e ambiente (Gabbrielli, Martini - capitolo 4; Sethi - capitoli 3 e 4)
Nomi ed oggetti denotabili. Ambiente e blocchi: tipi ed operazioni sull’ambiente. Regole di scope:
scope statico, dinamico, problemi di scope. Esercizi.
Gestione della memoria (Gabbrielli, Martini – capitolo 5; Sethi - capitolo 4)
Tecniche di gestione della memoria. Gestione statica. Gestione dinamica tramite pila: blocchi in-line,
procedure, gestione della pila. Gestione dinamica tramite heap: blocchi di dimensione fissa e variabile.
Implementazione delle regole di scope: catena statica, display, lista di associazioni e CRT. Esercizi.
Strutturare il controllo (Gabbrielli, Martini – capitolo 6; Sethi - capitolo 2 e 3)
Espressioni: sintassi, semantica, valutazione. Comando: variabili, assegnamenti. Comandi per il
controllo di sequenza: comandi espliciti, condizionali, iterativi. Programmazione strutturata. Ricorsione:
ricorsione in coda. Esercizi.
Astrarre sul controllo (Gabbrielli, Martini – capitolo 7; Sethi – capitolo 5)
Sottoprogrammi: astrazione funzionale, passaggio dei parametri. Funzioni di ordine superiore; come
parametro, come risultato. Eccezioni: implementazione. Linker. Eccezioni in C++. Esercizi.
Strutturare i dati (Gabbrielli, Martini – capitolo 8)
Tipi di dato. Sistemi di tipi. Tipi scalari e composti. Equivalenza fra tipi: per nome, strutturale.
Compatibilità e conversione. Polimorfismo: overdoading, polimorfismo universale parametrico e di
sottotipo. Controllo e inferenza di tipo. Sicurezza. Dangling reference. Garbage collection. Esercizi.
Programmazione object oriented (Gabbrielli, Martini – capitoli 9 e 10; Sethi - capitolo 6)
Astrarre sui dati: tipi astratti, nascondere l’informazione. Limiti dei tipi di dato astratti. Concetti
fondamentali: oggetti, classi, incapsulamento, sottotipi, ereditarietà (singola e multipla), selezione
dinamica dei metodi. Aspetti implementativi: ereditarietà singola, classe base fragile. Esercizi.
Il paradigma funzionale (Gabbrielli, Martini – capitolo 11; Sethi; dispensa pagina del corso)
Computazioni senza stato: espressioni e funzioni, computazione come riduzione, ingredienti
fondamentali. Valutazione: valori, sostituzione senza cattura, strategie di valutazione: per valore, per
nome, lazy. Confronto fra strategie. Programmare in un linguaggio funzionale: ambiente locale, pattern
matching, tipi. Introduzione a ML: espressioni elementari, valori e tipi, identificatori, binding e
dichiarazioni, patterns, definire funzioni, polimorfismo e overloading; definire nuovi tipi. La macchina
SECD. Esercizi.
Testi consigliati:
 Gabbrielli, Martini - Linguaggi di programmazione - McGraw-Hill.
 R. Sethi - Linguaggi di programmazione – Zanichelli.
 Ausiello, D’amore, Gambosi - Linguaggi, modelli, complessità – Utet.
 Harper - Introduction to standard ML – http://www.di.uniba.it/~covino/
 Harper - Introduction to standard ML (revised) - http://www.cs.cmu.edu/~rwh/introsml/
 Downey, Elkner, Meyers - How to Think Like a Computer Scientist: Learning with Python Gree Tea Press - http://thinkpython.com e http://www.python.it
 Deitel, Deitel, Liperi, Wiedermann - Python how to program - Prentice Hall.
 altro materiale su Python - http://www.voidspace.org.uk/thestore.shtml.
Laboratorio
Linguaggio C++ (Deitel & Deitel – capitoli 9, 10, 12, 13)
Linguaggio C. Classi e astrazioni dati. Classi friend. Allocazione dinamica della memoria. Ereditarietà.
Polimorfismo. Eccezioni.
Testi consigliati
 Deitel, Deitel - C++ fondamenti di programmazione, II edizione – Apogeo
 Deitel, Deitel - C++ tecniche avanzate di programmazione - Apogeo (per le eccezioni)
 Oualline S.. C++, corso di programmazione. Jackson libri
 Qualsiasi manuale di C++ che trovate in biblioteca