Docente: Prof.
G.F. Rossi
PARADIGMI DI PROGRAMMAZIONE: imperativo, funzionale, logico, orientato agli ogetti
PARTE I - PROGRAMMAZIONE DICHIARATIVA
Il linguaggio Prolog [1]. Sintassi: termini, clausole, programma.
Semantica dichiarativa informale. Interpretazione procedurale - Unificazione
e sostituzione - Semantica operazionale. Derivazione. Albero di derivazione
SLD. Insieme di successo - Non-determinismo e strategie di ricerca. Backtracking.
Incompletezza - Rappresentazione e manipolazione liste - Definizioni ricorsive
- Rappresentazione e manipolazione numeri - Variabili e assegnamento -
Dichiarativo vs. procedurale - Predicati built-in. Controllo backtrackig
("cut"). Negazione per fallimento (cenni). Input-output. Stringhe. Manipolazione
di termini (cenni). Modifica dinamica del programma (cenni) - Sviluppo
ed esecuzione programmi in SICStus Prolog - Le basi logiche del Prolog.
Logica dei predicati in forma di clausola. Dimostrazione automatica di
teoremi. Principio di Risoluzione (cenni). Clausole di Horn. Risoluzione
SLD vs. Risoluzione generale. Dalla Programmazione Logica al Prolog - Semantica
dichiarativa (a modelli). Interpretazione e modello (cenni). Modelli di
Herbrand (cenni). Correttezza e completezza (cenni).
PARTE II - PROGRAMMAZIONE "OBJECT-ORIENTED"
Il linguaggio C++ [2]. Dal C al C++ - Tipi di dato semplici-
Dichiarazione di variabili - Assegnamento ed espressioni - Struttura di
un programma - Principali strutture di controllo: if, while, for, do-while,
switch - Tipi strutturati: array e struct. Funzioni. Chiamata e passaggio
parametri. Funzioni ricorsive - Puntatori ed array - Classi e oggetti.
Campi privati e pubblici. Costruttori. Funzioni proprie ed invocazione
di funzioni. "Information hiding" ed "incapsulamento". - Input/output su
stream - Overloading di funzioni ed operatori. Passaggio parametri per
riferimento. Overloading dell'assegnamento - Classi parametriche - Puntatori
e allocazione dinamica della memoria (operatore new). Liste concatenate
- Ereditarietà. Dichiarazione di classe derivata. Tipi di derivazione
Costruttori di classi derivate. Derivazione di classi parametriche - Regole
di "scope" e tempo di vita di un oggetto (cenni). Distruttore di una classe
- Gestione delle eccezioni - Sviluppo di programmi in C++.
Testi consigliati:
[1] L. CONSOLE, E. LAMMA, P. MELLO: Programmazione logica e Prolog (II edizione), UTET Libreria, 1997.
[2] J.P. COHOON, J.W. DAVIDSON: C++ Program Design - An Introduction to Programming and Object-Oriented Design (2nd Edition), McGRAW-HILL, 1999.
Altri testi (per consultazione)
S. SETHI: Linguaggi di programmazione. McGRAW-HILL
ITALIA, 1994.
Prerequisiti:
Le tecniche di programmazione e i concetti sviluppati nel primo modulo
del corso di FONDAMENTI DI INFORMATICA. In particolare si assume una buona
conoscenza degli elementi di base del linguaggio C e della programmazione
in C