Corso di Laurea in Informatica Fondamenti di Programmazione Laboratorio di Programmazione Docente: G. Rossi
Programma del corso Anno accademico 2008-09
PARTE I
Fondamenti di programmazione
Problemi e algoritmi - La nozione di algoritmo. I diagrammi di flusso.
Risoluzione di problemi: esempi (in partic., ordinamento con selezione
del minimo [qui]).
Linguaggi di programmazione - Linguaggi a basso ed alto livello. Paradigmi di
programmazione (cenni). Descrizione della sintassi di un linguaggio (cenni
[qui]).
Diagrammi sintattici [qui]
e BNF [qui].
Sviluppo ed esecuzione programmi - Ambienti integrati di
sviluppo software. Compilazione
ed interpretazione. Struttura e funzionamento di un compilatore [2, cap.
1].
Variabili. Assegnamento. Espressioni: sintassi, valutazione (associativita'
e precedenza), tipo.
Tipi di dato - Tipi primitivi e definiti dall'utente. Tipi per enumerazione
in C++. La dichiarazione typedef. Utilita' dei tipi [5,
par. 8.1] [6, par. 4.1, 4.3]. Equivalenza di tipi.
Compatibilita' e conversione di tipo [5, par. 8.5,
8.6].
Nomi, ambienti e regole di "scope": struttura a blocchi, ambiente locale
e non-locale, variabili globali [5, par. 4.1, 4.2,
4.3 fino a p.78].
Programmazione strutturata [qui].
Strutture di controllo. Progetto "top-down" e sviluppo programmi "per raffinamenti
successivi".
Ricorsione - Definizioni e funzioni ricorsive [3,
par. 2.6, 2.7]. Esempi. Implementazione ricorsione (cenni)
[3, par. 6.7].
Gestione della memoria - Allocazione statica. Allocazione "automatica":
record d'attivazione, pila di sistema [3, par. 6.7].
Tempo di vita di una variabile.
Il linguaggio C++
Dichiarazione di variabile. Tipi semplici predefiniti. Struttura di un
semplice programma.
Input/output di base: nozione di stream, operatori >> e <<,
input/output a caratteri (funzioni get e put).
Assegnamento e statement composto. Espressioni.
Statement per il controllo di sequenza: if, switch, while,
do_while,
for,
break.
Tipi composti. Array (dichiarazione, selezione elementi, memorizzazione,
operazioni). Array bi-dimensionali. Matrici. Stringhe (realizzazione tramite
array, operazioni, funzioni di libreria). struct (dichiarazione,
selezione elementi, operazioni). Tabelle (realizzazione tramite array di
struct).
Dichiarazione e chiamata di funzione. Passaggio parametri: per valore,
per riferimento. Passaggio parametri di tipo array.Funzioni void.
Strutturazione di un programma e regole di "scope".
Input/output su file. Creazione ed apertura di uno stream. Lettura/scrittura
tramite >> e << e a caratteri.
Sviluppo di semplici programmi nel frammento imperativo del C++. Utilizzo
di funzioni di libreria.
PARTE II
Fondamenti di programmazione
Introduzione alla programmazione orientata agli oggetti. Classi,
oggetti ed "incapsulamento". "Information hiding". Ereditarieta' [4,
par. 2.3.2].
Tipi di dato astratti (ADT). ADT in C e C++ [4, p.
224, par. 12.1, 12,2].
Ciclo di sviluppo dei programmi [4, par. 1.2,
2.1.1].
"Programming-in-the-large" vs. "Programming-in-the-small" [6,
cap. 7 fino a p. 206].
La nozione di modulo. Forme di modularizzazione. La modularizzazione nella
fase di progettazione e di realizzazione [4,
par. 9.1, 9.3, 9.4, 9.5].
Classi e modularizzazione in C++. Programmi divisi in piu' file (cenni)
[4, par. 4.11].
Il linguaggio C++
Dichiarazione di classe. Creazione di oggetti. Accesso ai campi di un oggetto.
Funzioni proprie ed invocazione di funzioni.
Inizializzazione di oggetti: costruttori.
Esempio: classe Razionale.
Overloading di funzioni ed operatori. Ridefinizione operatori >>
e <<.
La classe string.
Puntatori ed allocazione dinamica della memoria (new). Operazioni
su puntatori. Puntatori ed array.
Esempio: classe int_vett. Ridefinizione operator[].
Ridefinizione assegnamento e costruttore di copia. Distruttori.
Parametri "const reference" e "reference return".
Gestione delle eccezioni. Motivazioni, meccanismi.
Classi parametriche: dichiarazione, istanziazione. Esempio: classe pila<t>.
Funzioni parametriche.
Ereditarietà: dichiarazione, ridefinizione funzioni e dati. Campi
protected.
Ereditarieta' multipla (cenni).
Sviluppo di semplici programmi in C++. Librerie standard del C++ (cenni).
Progettazione ed implementazione di un'applicazione in C++.
Materiale didattico
Testo consigliato (vedi sotto) + dispense
+ lucidi esercitazioni + materiale
vario per parti non coperte dai precedenti (vedi riferimenti nel programma
del corso).
[3] A.V.Aho, J.D.Ullman.
Fondamenti
di Informatica. Zanichelli, 1994.
[4] M.Cadoli,
M.Lenzerini, P.Naggar, A.Schaerf. Fondamenti della progettazione di
programmi. Principi, tecniche e loro applicazioni in C++, CittaStudiEdizioni
di UTET Libreria, 1997.
[5] M.Gabbrielli,
S.Martini. Linguaggi di programmazione. Principi e paradigmi. McGraw-Hill,
2006 [testo adottato nel corso di "Linguaggi di programmazione"]
[6] C.Ghezzi, M.Jazayeri.
Programming Language Concepts. J.Wiley & Sons, 1987.