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