METODOLOGIE DI PROGRAMMAZIONE
cod. 16433

Anno accademico 2021/22
2° anno di corso - Secondo semestre
Docente
Enea ZAFFANELLA
Settore scientifico disciplinare
Informatica (INF/01)
Ambito
Formazione informatica di base
Tipologia attività formativa
Base
48 ore
di attività frontali
6 crediti
sede:
insegnamento
in ITALIANO

Obiettivi formativi

Con riferimento agli indicatori di Dublino:

Conoscenza e capacità di comprensione
La programmazione orientata agli oggetti si fonda su alcuni principi (incapsulamento, ereditarietà, polimorfismo, ecc.) che l'esperienza ha mostrato essere fondamentali per lo sviluppo di software chiaro, conciso, riutilizzabile e di facile manutenzione. I linguaggi di programmazione più diffusi rendono disponibili alcuni strumenti e tecniche che portano allo sviluppo di codice aderente ai principi suddetti. Il corso si propone di presentare le caratteristiche avanzate del linguaggio di programmazione C++, mostrando come un loro utilizzo corretto e consapevole porti al raggiungimento degli obiettivi preposti.

Capacità di applicare conoscenza e comprensione
Per ognuno dei concetti presentati è presentato un esempio minimale di applicazione, così da metterne in evidenza le caratteristiche essenziali.

Autonomia di giudizio
Lo studio di soluzioni alternative per lo stesso problema consentirà allo studente di valutarne pregi e difetti, evidenziando con spirito critico i contesti nei quali una particolare soluzione è preferibile alle altre.

Capacità di apprendimento
Lo studio e l'applicazione delle principali tecniche di programmazione su esempi semplici è propedeutico alla loro successiva applicazione in contesti più articolati, nei quali è necessario valutare l'interazione tra le varie componenti del sistema progettato.

Prerequisiti

Si assume la conoscenza del frammento imperativo del linguaggio C++.

Contenuti dell'insegnamento

Richiami sul linguaggio C++: tipi di dato; espressioni; istruzioni; funzioni; campo d'azione e ciclo di vita; funzioni sovraccaricate; classi.
Introduzione ai costrutti dello standard ISO C++ 2011.
Programmazione per contratto: pre-condizioni, post-condizioni ed invarianti di classe.
Inizializzazione, assegnamento e distruzione; copia e spostamento.
Eccezioni e gestione delle risorse; tecniche per la gestione dinamica della memoria.
Ereditarietà semplice: differenze tra contenimento, ereditarietà privata ed ereditarietà pubblica.
Polimorfismo dinamico: funzioni virtuali; il principio di sostituzione di Liskov.
Progetto di interfacce software: tipi concreti, tipi astratti, classi di interfaccia e classi implementative; ereditarietà multipla e virtuale.
Polimorfismo statico: template di funzione e template di classe.
La libreria standard STL: contenitori, iteratori ed algoritmi generici; oggetti funzione.
Ambiente di sviluppo: il compilatore g++; il debugger gdb; automazione del processo di compilazione: make; controllo delle versioni: git.
Documentazione di interfacce software: doxygen.

Programma esteso

Bibliografia

B. Stroustrup.
C++: Linguaggio, libreria standard, principi di programmazione,
quarta edizione, Pearson, 2015.

S. Lippman, J. Lajoie.
C++: Corso di programmazione,
terza edizione, Addison-Wesley, 2000.

B. Eckel.
Thinking in C++, Volumes 1 and 2,
seconda edizione, 2003.

Metodi didattici

Lezioni frontali ed esercitazioni.

Modalità verifica apprendimento

Nota: le modalità di esame potranno essere modificate in dipendenza dell'evolversi della situazione di emergenza sanitaria.
L'esame consiste in una prova scritta e un eventuale colloquio orale.
La prova scritta consiste in esercizi e domande aperte sul programma del corso; il colloquio orale comprende ulteriori domande sul programma del corso e/o la discussione della prova scritta. Il colloquio orale, quando previsto, deve essere sostenuto nello stesso appello della prova scritta.
Agli studenti con voto compreso tra 18 e 25 nella prova scritta verrà proposta la verbalizzazione (senza colloquio orale); al colloquio orale si accede in caso di prova scritta con voto maggiore di 25 oppure compreso tra 16 e 17.
E' prevista una prova intermedia con esercizi sugli argomenti svolti nella prima parte del corso: se superata, la prova intermedia consente l'esonero di una parte della prova scritta e il suo voto concorre a determinare il voto complessivo della prova scritta. La prova intermedia mantiene la sua validità per tutti gli appelli dell'anno accademico di riferimento.

Altre informazioni