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).

    Testi consigliati:

    Altri riferimenti: