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