Studiare
In questa sezione è possibile reperire le informazioni riguardanti l'organizzazione pratica del corso, lo svolgimento delle attività didattiche, le opportunità formative e i contatti utili durante tutto il percorso di studi, fino al conseguimento del titolo finale.
Piano Didattico
Il piano didattico è l'elenco degli insegnamenti e delle altre attività formative che devono essere sostenute nel corso della propria carriera universitaria.
Selezionare il piano didattico in base all'anno accademico di iscrizione.
1° Anno
Insegnamenti | Crediti | TAF | SSD |
---|
2° Anno Attivato nell'A.A. 2024/2025
Insegnamenti | Crediti | TAF | SSD |
---|
3° Anno Sarà attivato nell'A.A. 2025/2026
Insegnamenti | Crediti | TAF | SSD |
---|
Insegnamenti | Crediti | TAF | SSD |
---|
Insegnamenti | Crediti | TAF | SSD |
---|
Insegnamenti | Crediti | TAF | SSD |
---|
Insegnamenti | Crediti | TAF | SSD |
---|
Legenda | Tipo Attività Formativa (TAF)
TAF (Tipologia Attività Formativa) Tutti gli insegnamenti e le attività sono classificate in diversi tipi di attività formativa, indicati da una lettera.
Programmazione con laboratorio (2023/2024)
Codice insegnamento
4S02751
Crediti
12
Lingua di erogazione
Italiano
Settore Scientifico Disciplinare (SSD)
INF/01 - INFORMATICA
Corsi Singoli
Autorizzato
L'insegnamento è organizzato come segue:
Teoria
Laboratorio
Obiettivi di apprendimento
L'insegnamento si propone fornire gli strumenti fondamentali per analizzare e risolvere problemi attraverso l'utilizzo di strumenti computazionali e, in particolare, lo sviluppo di programmi. Scopo del corso è l'apprendimento dei principi fondamentali della programmazione imperativa e ad oggetti, dei linguaggi di programmazione e l'acquisizione delle seguenti competenze: - comprensione e analisi dei problemi, la loro descrizione rigorosa per mezzo del linguaggio matematico e la definizione delle specifiche delle eventuali soluzioni; - progettazione delle soluzioni e confronto di possibili soluzioni secondo diverse metodologie; - codifica delle soluzioni per mezzo di linguaggi di programmazione sia imperativi che orientati agli oggetti; - sviluppo di soluzioni articolate per problemi di piccole e medie dimensioni per mezzo di opportuni ambienti software; - valutazione degli algoritmi, sia in termini di efficienza che di correttezza.
Prerequisiti e nozioni di base
Conoscenze e competenze matematiche e scientifiche della formazione fornita dalla scuola secondaria superiore.
In particolare:
- Insiemi, funzioni, relazioni e grafici
- Insiemi numerici e loro proprietà fondamentali.
- Geometria piana e rappresentazione cartesiana di elementi geometrici.
- Rappresentazione di dati, relazioni e funzioni.
Programma
INTRODUZIONE: aspetti generali.
- Problemi e soluzioni: caratterizzazione matematica, analisi di problemi descritti in linguaggio naturale e loro descrizione rigorosa nel linguaggio della matematica, specifica della soluzione.
- Modelli di computazione: modelli informali, macchina astratta, nozione di algoritmo.
- Linguaggi: introduzione ai linguaggi formali, compilatore e interprete.
- Linguaggi di programmazione: introduzione al linguaggio Java.
PARTE I - Problemi, algoritmi e programmi.
- Principi di programmazione strutturata: costanti, variabili, espressioni; istruzioni fondamentali: assegnamento, composizione sequenziale, condizionale e iterazione, raggruppamento; struttura di un semplice programma.
- I tipi di dati. Nozione generale di tipo; rappresentazione dei dati; caratterizzazione dei tipi di dati; tipi di dati astratti.
- I tipi di dati primitivi: caratteristiche, uso e problemi; tipi di dati numerici e non; tipi enumerativi.
- Tipi di dati strutturati: array (e record), file, puntatori, stringhe, definizione di tipo.
- I sotto-programmi: funzioni, procedure e metodi; struttura di un sottoprogramma; passaggio dei parametri; regole di località e di visibilità; ricorsione.
- Introduzione agli oggetti (in Java): oggetti e classi; componenti di classe e di istanza; costruttori, campi e metodi; modificatori principali.
- Strutture dati avanzate: rappresentazione di sequenze, vettori, matrici. caratterizzazione induttiva di tipi; definizione ricorsiva di strutture dati; realizzazione concreta in Java.
- Introduzione alla programmazione ad oggetti avanzata: estensione di classi; ereditarietà e polimorfismo; interfacce e classi astratte (introduzione).
PARTE II - Analisi degli algoritmi.
- Correttezza degli algoritmi: terminazione; proprietà logiche; correttezza parziale e totale rispetto alle specifiche.
- Efficienza degli algoritmi. Introduzione alla valutazione dell'efficienza degli algoritmi: prestazioni e complessità. Elementi di complessità: misure di tempo e spazio; costo computazionale in tempo e spazio; stime asintotiche del costo computazionale; caso peggiore e caso medio; costo ammortizzato.
- Casi di studio rilevanti Sequenze statiche e dinamiche: definizione astratta; implementazione; operazioni di base; Algoritmi di ricerca, ordinamento, concatenazione e fusione.
- Sequenze, Matrici e Vettori: implementazione, operazioni e algoritmi.
- Liste: definizione astratta e implementazione; operazioni di base; introduzione a Pile e Code.
- Alberi (introduzione): definizione astratta di alberi binari e implementazione; operazioni di base; alberi bilanciati e di ricerca.
- Cenni alla rappresentazione di grafi: definizione matematica; implementazione elementare.
LABORATORIO
Nel corso delle attività pratiche che si svolgono in Laboratorio vengono introdotte tutte le tecniche necessarie per applicare gli argomenti sviluppati nelle lezioni di teoria mediante l’utilizzo di linguaggi di programmazione. Si introducono i principi della programmazione imperativa.
Obiettivo primario dell’attività di Laboratorio è la costruzione della soluzione di un problema attraverso l’utilizzo di uno specifico linguaggio di programmazione. Si affrontano i passaggi che a partire dalla descrizione informale del problema conducono alla sua risoluzione attraverso la caratterizzazione del problema, la progettazione della soluzione e la sua codifica.
Particolare attenzione è dedicata all’uso di metodi e tecniche che consentono di migliorare la leggibilità, la manutenibilità e il riutilizzo del codice.
Bibliografia
Modalità didattiche
L’insegnamento consiste in lezioni ed esercitazioni in aula e in laboratorio con l’eventuale utilizzo di un calcolatore. Saranno inoltre assegnate attività da svolgere autonomamente fuori dell’orario delle lezioni.
Eventuali risorse aggiuntive sono rese disponibili nell’area riservata dell’insegnamento.
Modalità di verifica dell'apprendimento
L’esame è suddiviso in tre parti:
- prova scritta: domande ed esercizi;
- prova pratica: sviluppo di un progetto di laboratorio;
- colloquio finale: discussione degli elaborati e domande sul programma svolto durante le lezioni.
Le prove scritta e pratica possono essere sostituite in tutto o in parte dal superamento delle prove in itinere.
Criteri di valutazione
Le prove d’esame hanno lo scopo di verificare:
- la conoscenza generale dei costrutti fondamentali della programmazione imperativa e orientata agli oggetti;
- la capacità di utilizzare efficacemente e correttamente un linguaggio di programmazione;
- la capacità di gestire il processo di risoluzione di problemi: descrizione e caratterizzazione rigorosa di problemi, progettazione della rappresentazione dei dati, progettazione e sviluppo del codice risolutivo, analisi dell’efficienza e della correttezza della soluzione.
Criteri di composizione del voto finale
Il voto finale è ottenuto come media delle valutazioni delle tre prove previste: scritta, pratica e orale.
Nota importante. Per superare l’esame finale è necessario ottenere una valutazione positiva - almeno il 60% del punteggio - in ognuna delle tre prove indicate.
Lingua dell'esame
Italiano