Insegnamento PROGRAMMAZIONE I

Nome del corso di laurea Programmazione e gestione di sistemi informatici
Codice insegnamento 20010206
Curriculum Comune a tutti i curricula
Docente responsabile Francesco Betti Sorbelli
Docenti
  • Francesco Betti Sorbelli
Ore
  • 42 Ore - Francesco Betti Sorbelli
CFU 6
Regolamento Coorte 2026
Erogato Erogato nel 2026/27
Erogato altro regolamento
Attività Base
Ambito Formazione informatica, matematica e statistica di base
Settore INFO-01/A
Anno 1
Periodo Primo Semestre
Tipo insegnamento Obbligatorio (Required)
Tipo attività Attività formativa monodisciplinare
Lingua insegnamento Italiano.
Contenuti Fondamenti della programmazione e del linguaggio C++. Tipi di dato, variabili, operatori, input/output e strutture di controllo. Funzioni, array, puntatori, riferimenti e strutture. Programmazione orientata agli oggetti: classi, incapsulamento, costruttori, memoria dinamica, ereditarietà e polimorfismo. Eccezioni, debugging e programmazione generica mediante template.
Testi di riferimento H. M. Deitel, P. J. Deitel, C++ Fondamenti di programmazione, seconda edizione. Slide, esercizi e materiali integrativi messi a disposizione dal docente sulla piattaforma UniStudium.
Obiettivi formativi Il corso introduce i principi fondamentali della programmazione e fornisce le competenze necessarie per progettare, implementare, verificare e correggere programmi in C++. Al termine del corso lo studente sarà in grado di analizzare semplici problemi, tradurli in algoritmi e implementarli utilizzando tipi di dato, strutture di controllo, funzioni, array, puntatori e riferimenti. Saprà definire strutture e classi, applicare i principi di incapsulamento, gestire la memoria dinamica e utilizzare i concetti fondamentali della programmazione orientata agli oggetti, quali ereditarietà e polimorfismo. Sarà inoltre in grado di leggere e tracciare l’esecuzione di codice C++, individuare errori e motivare le principali scelte implementative.
Prerequisiti Non sono richieste conoscenze pregresse di programmazione. Sono richieste conoscenze matematiche di base, capacità di ragionamento logico e familiarità con l’uso di un computer.
Metodi didattici Il corso comprende 42 ore di lezioni frontali. Le lezioni alternano la presentazione dei concetti teorici alla scrittura, analisi e discussione di programmi C++. Gli argomenti sono accompagnati da esempi, esercizi guidati e attività di tracciamento del codice. Al termine delle lezioni vengono proposti esercizi mirati, discussi successivamente in aula, per consolidare progressivamente sintassi, capacità di problem solving e debugging.
Altre informazioni Le slide, gli esercizi e le comunicazioni relative al corso sono disponibili sulla piattaforma UniStudium. La frequenza delle lezioni e lo svolgimento regolare degli esercizi sono fortemente consigliati.
Modalità di verifica dell'apprendimento L’esame consiste in una prova scritta individuale della durata massima di due ore e trenta minuti, senza consultazione di materiale. La prova comprende domande teoriche sui concetti del corso, esercizi di progettazione e implementazione di programmi in C++ su carta ed esercizi di tracciamento dell’esecuzione e determinazione dell’output. Può essere richiesto di definire funzioni, strutture e classi, gestire collezioni di oggetti e memoria dinamica e motivare le scelte progettuali. La valutazione considera la correttezza delle risposte e del codice, la capacità di applicare i concetti, la chiarezza della soluzione e l’uso appropriato della terminologia.
Programma esteso 1. Introduzione alla programmazione e al C++. Fasi di compilazione, linking ed esecuzione. Struttura di un programma.
2. Tipi primitivi, variabili, costanti, conversioni, casting e operatore sizeof.
3. Operatori aritmetici, relazionali, logici e bit a bit. Precedenza e associatività.
4. Input e output. Istruzioni condizionali if, if-else e switch.
5. Cicli while, do-while e for. Istruzioni break e continue.
6. Funzioni: dichiarazione, definizione, parametri, valori di ritorno, visibilità, overloading, parametri di default e ricorsione.
7. Array monodimensionali e multidimensionali. Stringhe C. Passaggio degli array alle funzioni.
8. Puntatori: indirizzi, dereferenziazione, nullptr, aritmetica dei puntatori, doppi puntatori e void*.
9. Riferimenti e passaggio dei parametri per valore, puntatore e riferimento. Uso di const.
10. Strutture, array di strutture e passaggio alle funzioni.
11. Classi e oggetti: campi, metodi, livelli di accesso, incapsulamento, costruttori e distruttori.
12. Oggetti e metodi const, costruttore di copia e membri static.
13. Organizzazione del codice in file header e sorgenti. Namespace e dichiarazioni extern.
14. Funzioni e classi friend. Sovraccarico degli operatori aritmetici, relazionali e di stream.
15. Allocazione dinamica mediante new, delete, new[] e delete[]. Stack e heap, shallow copy, deep copy e regola del tre.
16. Gestione degli errori mediante eccezioni. Tecniche e strumenti di debugging, assert e debugger.
17. Ereditarietà singola e multipla, livelli di accesso, costruttori e distruttori nelle gerarchie e diamond problem.
18. Polimorfismo, funzioni virtuali, override, classi astratte e distruttori virtuali.
19. Programmazione generica: template di funzione e di classe.
Obiettivi Agenda 2030 per lo sviluppo sostenibile Obiettivo 4 – Istruzione di qualità. Il corso contribuisce allo sviluppo di competenze digitali, logiche e di problem solving necessarie per la progettazione e realizzazione di software.