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)
-
Introduzione:
[Sethi, Ch 1],
[Ghezzi, Jazayeri, Ch 1],
[Moggi, note]
-
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
-
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)
-
Programmazione Funzionale (SML/NJ):
[Sethi, Ch 8-9 e 14],
[Gilmore, Harper]
[Moggi, note ed esempi]
- Lambda-calcolo, valutazione CBV e CBN, linguaggi funzionali
- Lambda-calcolo, sistemi di tipo, tipi come sottoinsiemi,
algoritmo di type-inference
- SML: tipi, espressioni, dichiarazioni, polimorfismo e tipi higher-order
- SML: datatypes, pattern matching, abstract datatypes
- SML: eccezioni, tipi reference e record
- Esempi di programmi SML: funzioni su liste (presi dalla libreria
standard), eccezioni, abstract datatypes,
- Esempi di stili di programmazione in SML:
lazy, imperativa, object-based e class-based
- SML modules: signatures, structures, functors e functor signatures
- Moduli e programmazione in the large, functors e metodologia top-down
- Abstract datatypes e abstraction, sharing constraints
- Esempi di programmazione mediante moduli
-
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
-
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
-
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
- [GJ] C. Ghezzi, M. Jazayeri, "Programming Language Concepts"
(terza edizione), Wiley & Sons, 1997.
La prima versione tradotta in italiano e' pubblicata dalla Franco
Angelo ed e' disponibile in biblioteca.
- [S] R. Sethi, "Programming Languages: Concepts and Constructs"
(seconda edizione), Addison-Wesley, 1996.
La prima versione tradotta in italiano e' pubblicata dalla Zanichelli.