Programma di Linguaggi di Programmazione (III anno) a.a. 1997-98

Lo scopo del corso e' quello di fornire una panoramica dei linguaggi di programmazione ad alto livello, esaminando "i principi" su cui i vari linguaggi sono basati, e meccanismi e costrutti che essi mettono a disposizione. Lo studio dei vari linguaggi si svolgera' secondo un approccio comparativo e classificativo che fara' riferimento sia ad aspetti linguistici e di "potere espressivo", sia ad aspetti implementativi.

Prerequisiti

Si presuppone la conoscienza del Pascal. E' essenziale aver seguito il corso di Programmazione.

Programma

Le parti colorate hanno il seguente significato: parte che non e' oggetto di esame , parte che dovrebbe essere coperta dal corso di LP al II anno (vedi Elena Zucca)
  1. Introduzione: [Sethi, Ch 1], [Ghezzi, Jazayeri, Ch 1], [Moggi, note]
  2. Richiami di sintassi e semantica: [Sethi, Ch 2], [Moggi, note]
    • Notazione BNF, Grammatiche, Linguaggi, Ambiguita', Alberi astratti e sintattici
    • Semantica operazionale (SOS) e Semantica denotazionale
  3. Linguaggi imperativi (Pascal, C): [Sethi, Ch 3-5], [Moggi, note]
    • Programmazione strutturata
    • Tipi, rappresentazione dei dati e gestione della memoria
    • Analisi statica, type checking
    • Procedure, parametri, scoping, procedure ricorsive, aspetti implementativi (record di attivazione)
  4. Programmazione Funzionale (SML/NJ): [Sethi, Ch 8-9 e 14], [Gilmore, Harper] [Moggi, note ed esempi]
  5. Programmazione Logica (Swi-Prolog): [Sethi, Ch 11], [Palamidessi, note on line]
    • Termini, atomi, clausole, programmi
    • Semantica dichiarativa, interpretazioni e modelli di Herbrand
    • Semantica operazionale, sostituzioni, unificazione e MGU
    • Corrispondenza fra semantica operazionale e semantica dichiarativa (soundness e completeness)
    • Regole di selezione, SLD-resolution e SLD-tree
    • Strategia del Prolog: regola di selezione leftmost e visita dell'albero in deep-first
    • Algoritmo di Unificazione
    • Esempi di programmazione in Prolog
  6. Programmazione Logica aspetti piu' avanzanti (NON E' OGGETTO DI ESAME): [Palamidessi, note on line]
    • Negazione per fallimento, Aritmetica
    • Primitive non logiche: cut, assert e retract
    • Primitive meta. Metaprogrammazione in Prolog
    • Accenni a Constraint Logic Programming e Concurrent Constraint Programming
  7. Programmazione Object-Oriented (Java, C++): [Sethi, Ch 6-7], [Zucca, lucidi], [Java, documentazione on line]
    • Classi e oggetti:
      • Metodi e variabili di stato
      • Incapsulamento (protezione delle informazioni)
      • Creazione e distruzione di oggetti
      • Applicazione di metodi (messaggi)
      • Il concetto di self
    • Sottoclassi e inheritance
      • Definizione di sottoclassi (/estensioni/specializzazioni)
      • Inheritance
      • Regole di hiding nella definizione di una sottoclasse
      • Possibilita' di ridefinire metodi
    • Caratteristiche Object Oriented del C++ e Java

Testi di riferimento