Corso di Laurea in Informatica
Fondamenti di Programmazione
Laboratorio di Programmazione
Docente: G. Rossi
Collaboratore didattico: T. Zolo
Programma del corso
Anno accademico 2007-08
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]).
I linguaggi di programmazione. Linguaggi a basso ed alto livello. Compilazione
ed interpretazione. Paradigmi di programmazione (cenni).
Ambienti di programmazione. Strumenti di sviluppo software (in partic.,
linker [qui]).
Descrizione della sintassi di un linguaggio (cenni [qui]).
Diagrammi sintattici [qui]
e BNF [qui].
Struttura e funzionamento di un compilatore [2, cap.
1].
Variabili. Assegnamento. Espressioni: sintassi, valutazione (associativita'
e precedenza), tipo.
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].
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].
Programmazione strutturata [qui].
Strutture di controllo. Progetto "top-down" e sviluppo programmi "per raffinamenti
successivi" (cfr. [1a, par. 4.9]).
Ricorsione. Definizioni e funzioni ricorsive [3,
par. 2.6, 2.7]. Esempi (in partic., ordinamento basato su "merge-sort"
[qui] (cfr. anche
[4, par. 19.3])). Implementazione ricorsione (cenni)
[3, par. 6.7].
Gestione della memoria. Allocazione statica. Allocazione "automatica":
record d'attivazione, pila di sistema [3, par. 6.7]
(cfr. anche [1a, par.6.11]). 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] (cfr. anche [1a, par. 12.7]).
Tipi di dato astratti (ADT). ADT in C e C++ [4, p.
224, par. 12.1, 12,2] (cfr. anche [1a, par. 10.8]).
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] (cfr.
anche [1a, par. 3.8, 3.9, 3.11, 9.4, 10.3]).
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[] (cfr.
[1a, par.11.8]).
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).
Testo consigliato:
Altri riferimenti:
-
[2] A.V.Aho, R.Sethi,
J.D.Ullman. Compilers: Principles, Techniques, and Tools. Addison-Wesley,
1988.
-
[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.
-
[7] B.Eckel.
Thinking
in C++, 2nd Edition oppure P.Marotta.
C++:
una panoramica sul linguaggio, Seconda Edizione [testi on-line
sul linguaggio C++: per eventuali parti del programma
relative al C++ non coperte dagli altri testi]
Prerequisiti:
Nozioni di base su: struttura del calcolatore (ad es., [3,
par. 4.3]), memoria principale (ad es., [3, par. 4.4]),
rappresentazione numeri interi e reali (ad es., [3,
par. 4.11, 4.12]).
Vai alla pagina
principale del corso