FONDAMENTI DI PROGRAMMAZIONE A - FONDAMENTI DI PROGRAMMAZIONE B
cod. 1000753

Anno accademico 2009/10
1° anno di corso - Primo semestre
Docente responsabile dell'insegnamento
ROSSI Gianfranco
insegnamento integrato
12 crediti
sede:
insegnamento
in - - -

Insegnamento strutturato nei seguenti moduli:

Obiettivi formativi

I due corsi ('integrati', con unico esame finale)  si  propongono di fornire le basi sia teoriche che pratiche della programmazione imperativa e di quella 'orientata agli oggetti', utilizzando come linguaggio di riferimento il linguaggio di programmazione C++. 

Prerequisiti

- - -

Contenuti dell'insegnamento

FONDAMENTI DI PROGRAMMAZIONE (A)<br />
Problemi e algoritmi - La nozione di algoritmo. I diagrammi di flusso. Risoluzione di semplici problemi. <br />
Linguaggi di programmazione - Linguaggi esistenti (cenni). Struttura generale di un programma. Convenzioni di programmazione. Ambienti integrati di sviluppo programmi (IDE). <br />
Variabili: caratteristiche, dichiarazione. Identificatori. Dichiarazione di costante. Assegnamento. Espressioni: sintassi, valutazione (associativita' e precedenza), tipo. <br />
Programmazione strutturata - Strutture di controllo. Teorema di Bohm-Jacopini. Statement goto. Progetto "top-down" e sviluppo programmi "per raffinamenti successivi". <br />
Nomi, ambienti e regole di "scope": struttura a blocchi, ambiente locale e non-locale, variabili globali. <br />
Ricorsione - Definizioni e funzioni ricorsive. Esempi. Implementazione ricorsione (cenni). <br />
<br />
IL LINGUAGGIO C++ (A)<br />
Dichiarazione di variabile. Tipi semplici primitivi: valori, costanti, operazioni. Dichiarazione di costante. <br />
Input/output di base. Operatori >> e <<. Input/output a caratteri (funzioni get e put). <br />
Assegnamento e statement composto. Espressioni. <br />
Statement per il controllo di sequenza: if, switch, while, do_while, for, break. Esempio. Verifica dell'input. <br />
Tipi composti. Array: dichiarazione, selezione elementi, memorizzazione, operazioni. Array bi-dimensionali. Matrici. Esempi operazioni su matrici e vettori (in partic., ordinamento per selezione. Stringhe: realizzazione tramite array, operazioni, funzioni di libreria. struct: dichiarazione, selezione elementi, operazioni. Tabelle: definizione, realizzazione tramite array di struct. <br />
Dichiarazione e chiamata di funzione. Passaggio parametri: per valore, per riferimento. Passaggio parametri di tipo array. Funzioni void. <br />
Strutturazione di un programma e regole di "scope". <br />
Puntatori ed allocazione dinamica della memoria (new). Operazioni su puntatori. Puntatori ed array. Liste concatenate. <br />
Input/output su file. Creazione ed apertura di uno stream. Lettura/scrittura tramite >> e << e a caratteri. <br />
Sviluppo di semplici programmi nel frammento imperativo del C++. Utilizzo di funzioni di libreria. <br />
<br />
FONDAMENTI DI PROGRAMMAZIONE (B)<br />
Linguaggi di programmazione - Linguaggi a basso ed alto livello. Paradigmi di programmazione (cenni). Descrizione della sintassi di un linguaggio. Diagrammi sintattici e BNF. <br />
Traduzione ed esecuzione programmi- Compilazione ed interpretazione. Struttura e funzionamento di un compilatore. <br />
Gestione della memoria - Allocazione statica. Allocazione "automatica": record d'attivazione, pila di sistema. Tempo di vita di una variabile. <br />
Introduzione alla programmazione orientata agli oggetti.  Classi, oggetti ed "incapsulamento". "Information hiding". Ereditarieta' . <br />
Tipi di dato - Utilita' dei tipi. Equivalenza di tipi. Compatibilita' e conversione di tipo. Tipi di dato astratti (ADT). ADT in C e C++ . <br />
Ciclo di sviluppo dei programmi. <br />
La nozione di modulo - "Programming-in-the-large" vs. "Programming-in-the-small" . Forme di modularizzazione. La modularizzazione nella fase di progettazione e di realizzazione. Classi e modularizzazione in C++. Programmi divisi in piu' file (cenni). <br />
  <br />
IL LINGUAGGIO C++ (B)<br />
Dichiarazione di classe. Creazione di oggetti. Accesso ai campi di un oggetto. <br />
Funzioni proprie ed invocazione di funzioni. <br />
Inizializzazione di oggetti: costruttori. <br />
Esempio: classe Razionale. <br />
Overloading di funzioni ed operatori. Ridefinizione operatori >> e <<. <br />
La classe string. <br />
Puntatori ed allocazione dinamica della memoria. Esempio: classe int_vett. Ridefinizione operator[]. <br />
Ridefinizione assegnamento e costruttore di copia. Distruttori. <br />
Parametri "const reference" e "reference return". <br />
Gestione delle eccezioni. Motivazioni, meccanismi. <br />
Classi parametriche (template): dichiarazione, istanziazione. Esempio: classe pila<t>. Funzioni parametriche. <br />
Ereditarietà: dichiarazione, ridefinizione funzioni e dati. Campi protected. Ereditarieta' multipla (cenni). <br />
Sviluppo di semplici programmi in C++. Librerie standard del C++ (cenni). <br />
Progettazione ed implementazione di un'applicazione in C++.

Programma esteso

- - -

Bibliografia

H.M. Deitel, P.J. Deitel. C++ Fondamenti di programmazione, Apogeo, 2003, 696 pp.<br />
[OPPURE] S. Lippman, J. Lajoie. C++: Corso di programmazione, 3a Ed., Addison-Wesley, 2000.

Metodi didattici

Metodo d'insegnamento:                          <br />
Lezioni frontali in aula (ca. 6 CFU), esercitazioni assistite in aula attrezzata (ca. 2 CFU), progettazione e sviluppo assistito di un'applicazione in linguaggio C++ (ca. 2 CFU).<br />
<br />
Metodo di valutazione: Esame scritto ed orale, piu' dimostrazione e discussione dell'applicazione sviluppata.

Modalità verifica apprendimento

- - -

Altre informazioni

- - -