METODOLOGIE DI PROGRAMMAZIONE
cod. 16433

Anno accademico 2024/25
2° anno di corso - Primo semestre
Docente
Enea ZAFFANELLA
Settore scientifico disciplinare
Informatica (INF/01)
Ambito
Discipline informatiche
Tipologia attività formativa
Caratterizzante
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

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 26 nella prova scritta verrà proposta la verbalizzazione (senza colloquio orale); al colloquio orale si accede in caso di prova scritta con voto maggiore di 26 oppure compreso tra 16 e 17.

Altre informazioni

Obiettivi agenda 2030 per lo sviluppo sostenibile