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: 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