Corso di Laurea in Informatica
Fondamenti di Programmazione
Laboratorio di Programmazione
Docente: G. Rossi
Collaboratore didattico: T. Zolo
Programma del corso
Anno accademico 2006-07
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. Linguaggio macchina e Assembly [3,
par. 4.6, 4,7]. Compilazione ed interpretazione. Paradigmi di programmazione
(cenni).
Ambienti di programmazione. Strumenti di sviluppo software (in partic.,
linker [qui], debugger
[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, "scope" statico vs. dinamico (cenni) [5,
par. 4.1, 4.2, 4.3 fino a p.78].
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 un oggetto.
Tipi di dato. Tipi primitivi e definiti dall'utente, semplici e composti.
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].
Il linguaggio C++
Dichiarazione di variabile. Tipi semplici predefiniti. Struttura di un
semplice programma.
Input/output di base: formattato, a caratteri. La libreria iostream.
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. Stringhe (realizzazione tramite array,
operazioni, funzioni di libreria). struct (dichiarazione, selezione
elementi, operazioni).
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 di uno stream. Lettura/scrittura
formattata e a caratteri.
Sviluppo di semplici programmi nel frammento imperativo del C++. Utilizzo
di funzioni di libreria.
PARTE II
Fondamenti di programmazione
Programmazione orientata agli oggetti. Oggetti, classi 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, pag.
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. Interfaccia ed implementazione.
Forme di modularizzazione [4, par. 9.1, 9.3]. Progettazione
"object-oriented" (cenni). Classi e modularizzazione in C++ (cenni)
[4, par. 3.7, 4.11, 9.5] (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. Puntatori ed array.
Esempio: classe int_vett. Ridefinizione operator[] (cfr.
[1a, par.11.8]).
Ridefinizione assegnamento e costruttore di copia. Distruttori.
Gestione delle eccezioni. Motivazioni, meccanismi.
Classi parametriche: dichiarazione, istanziazione. Esempio: classe vett<t>.
Ereditarietà: dichiarazione, ridefinizione funzioni e dati. Campi
protected.
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]). Terminologia di base su alberi e pile (ad es., [3,
par. 5.2, 6.6]).
Vai alla pagina
principale del corso