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