Linguaggi di programmazione + laboratorio (a.a. 2013-2014) - laurea INFCD – Bari Emanuele Covino – Programma definitivo Teoria Introduzione, macchine astratte (Gabbrielli, Martini – capitolo 1 e 13; Sethi - capitolo 2) Panoramica storica (GM 13 da leggere). Macchine astratte e interprete. Implementazione di un linguaggio. Compilatori e interpreti. Gerarchie di macchine astratte. Descrivere un linguaggio (Ausiello – capitolo 2; Gabbrielli, Martini - capitolo 2; Sethi – capitolo 10) Grammatiche libere. Derivazioni e linguaggi. Alberi di derivazione. La gerarchia di Chomsky. Vincoli sintattici contestuali. Compilatori. Semantica (par. 2.5 del Gabbrielli-Martini, I edizione). Pragmatica. Fondamenti (Gabbrielli, Martini – capitolo 5) Il problema della fermata. Espressività dei linguaggi di programmazione. Le funzioni sono più degli algoritmi. Nomi e ambiente (Gabbrielli, Martini - capitolo 6; 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 7; 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 8; 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 9; Sethi – capitolo 5; dispense sul sito) Sottoprogrammi: astrazione funzionale, passaggio dei parametri. Funzioni di ordine superiore. Eccezioni: implementazione. Eccezioni in C++. Esercizi. Strutturare i dati (Gabbrielli, Martini – capitolo 10) 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 (da leggere). Sicurezza. Dangling reference. Garbage collection. Esercizi. Paradigma object oriented (Gabbrielli, Martini – capitoli 11 e 12; 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. Paradigma funzionale (Gabbrielli, Martini – capitolo 13; dispense sul sito) Computazione senza stato: espressioni e funzioni, riduzione, ingredienti. Valutazione: valori, betaregola, strategie e confronto. Programmare in un linguaggio funzionale. La macchina SECD. MetaLanguage (dispense sul sito). Esercizi. Testi consigliati: Gabbrielli, Martini - Linguaggi di programmazione - McGraw-Hill. R. Sethi - Linguaggi di programmazione – Zanichelli. Ausiello, D’amore, Gambosi - Linguaggi, modelli, complessità – Utet. Laboratorio Linguaggio C++ (Deitel & Deitel prima edizione) Linguaggio C. Classi e astrazioni dati: Definizione delle strutture; Accedere ai membri; Implementare un astract data type TIME con una classe; Scope della classe e accesso ai membri; Separare l’interfaccia dall’implementazione; Controllare l’accesso ai membri; Funzioni di accesso e di utility; Inizializzare gli oggetti: costruttori; Distruttori ; Quando sono chiamati costruttori e distruttori; Usare dati membro e funzioni membro; Ritornare una reference a una dato membro privato; Assegnamento di default per copia. Classi: Oggetti const e funzioni membro const; Composizione: oggetti come membri di classi; Funzioni friend e classi friend ; Uso del puntatore this; Allocazione dinamica della memoria con new e delete; Membri static ; Data abstraction e information hiding; Esempio: dato astratto queue. Ereditarietà:classi base e classi derivate; Membri protetti; Cast di puntatori a classi base verso puntatori a classi derivate; Uso delle funzioni membro; Override dei membri della classe base in una classe derivata; Public, Protected e Private ; Classi base dirette e indirette; Usare costruttori e distruttori nelle classi derivate; Conversione di oggetti impliciti di classi derivate a oggetti di classi base; Composizione vs. Ereditarietà; Relazione “Uses A” e “Knows A”; Point, Circle, Cylinder. 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 Lippman, Lajoie, C++ corso di programmazione Qualsiasi manuale di C++ che trovate in biblioteca