LINGUAGGI DI PROGRAMMAZIONE Canale unico
Docente coordinatore e verbalizzante: IVANO SALVO
Docenti
Obiettivi formativi
OBIETTIVI FORMATIVI
Generali:
Apprendimento del paradigma di programmazione a oggetti, uso degli strumenti concettuali offerti da questo paradigma nella soluzione di problemi di medie dimensioni.
Studio comparato di diversi paradigmi di programmazione (imperativo, funzionale e a oggetti) per sviluppare un senso critico nell'apprendimento e valutazione
dei linguaggi di programmazione.
Specifici:
a) Conoscenza e Comprensione:
Conoscenza di elementi base e medio-avanzati di programmazione in Linguaggio
C++. Basi del linguaggio di programmazione Haskell.
Principi generali della programmazione a oggetti e della programmazione funzionale.
b) Applicare Conoscenza e Comprensione:
Applicare la metodologia a oggetti alla progettazione di sistemi software di medie dimensioni. Applicare gli strumenti offerti dalla programmazione funzionale alla
soluzione di problemi, anche dovendo usare un linguaggio imperativo.
c) Capacità Critiche e di Giudizio:
Lo studio critico del paradigma di programmazione a oggetti,
le basi del paradigma funzionale, oltre ai confronti
con il paradigma imperativo già noto agli studenti,
unitamente a richiami sul funzionamento di altri linguaggi a Oggetti
(come Java e Smalltalk),
permettono di valutare ad esempio quale sia il linguaggio più adatto
per risolvere un certo problema o sviluppare un progetto software.
Inoltre, lo studente dovrebbe acquisire strumenti necessari per valutare
criticamente altri linguaggi di programmazione.
d) Capacità Comunicative
Lo studente è stimolato, sia durante il corso, sia nel colloquio d'esame a esporre in modo
chiaro e conciso, ma preciso sia il funzionamento che la struttura di piccoli progetti software.
e) Capacità di Apprendimento:
Lo studio comparato di diversi paradigmi di programmazione stimola la capacità di apprendimento di altri linguaggi di programmazione, dando allo studente gli strumenti per distinguere gli aspetti caratterizzanti di un linguaggio di programmazione (logica del core language, come ad esempio passaggio di parametri, sistema dei tipi, semantica dei comandi) da quelli più strettamente tecnici (come imparare a usare librerie e strumenti di sviluppo, come IDE e debugger).
Risultati di apprendimento attesi
Conoscenze e capacità di comprensione: caratteristiche della programmazione funzionale e object oriented, scrivere programmi Haskell/C++ corretti, astrazioni per costruire schemi di programmi;
Utilizzazione delle conoscenze e capacità di comprensione: applicare la logica funzionale alla soluzione dei problemi, anche quando si usa un linguaggio imperativo;
Capacità di trarre conclusioni: determinare il giusto linguaggio di programmazione per un progetto software; determinare problemi di un progetto software esistente;
Abilità comunicative: descrizione astratta ma precisa delle funzionalità di un artefatto software;
Capacità di apprendere: apprendere rapidamente nuovi linguaggi di programmazione, concentrandosi su questioni critiche chiave della semantica dei linguaggi di programmazione.
Prerequisiti
Viene supposto che gli studenti abbiano una buona conoscenza della programmazione C e
di algoritmi risolutivi di problemi classici,
come acquisita nei corsi di Laboratorio di Programmazione e Calcolo (primo anno)
e Informatica Generale (secondo anno).
Programma dell’insegnamento
Programma:
Parte I: Programmazione a Oggetti con C++
1. Introduzione alla programmazione a oggetti.
2. Obiettivi del linguaggio C++.
3. Definizioni di classi. Campi e metodi. Invocazioni di metodi.
4. Modificatori di visibilità. Interfaccia e implementazione.
5. Costruttori. Oggetti sullo stack e sullo heap. Distruttori.
6. Ereditarietà.
7. Binding dinamico dei metodi virtual.
8. Metodologie di programmazione a oggetti. Esempi.
9. Templates. Concetto e definizione. Classi generiche di strutture dati.
La Standard Template Library.
10. Verso una programmazione matura: le Eccezioni.
Parte II: Programmazione Funzionale con Haskell
11. Introduzione alla programmazione funzionale e al linguaggio Haskell.
12. Tipi polimorfi e lazy evaluation in Haskell.
Testi di riferimento
Sono suggeriti i seguenti libri:
Bruce Eckel: Thinking in C++ (2nd Edition), Prentice Hall, 2000.
Graham Hutton: Programming in Haskell, Cambridge University Press, 2007
Vengono inoltre pubblicati numerosi materiali dal docente, sotto forma di
codici di programmi esemplificativi degli argomenti trattati o soluzioni di
homework o progetti degli anni precedenti.
Vengono infine segnalate numerose risorse WEB sulla programmazione in C++ e Haskell.
Modalità di svolgimento
La modalità di svolgimento è tradizionale in aula con slides.
Possibilità di didattica blended, a seconda della situazione pandemica.
Frequenza
Seguire le lezioni è fortemente raccomandato.
Modalità di esame
L'esame mira a valutare l'apprendimento tramite la discussione orale
di alcuni Homework di programmazione in C++ e Haskell.
Viene sia testato il corretto funzionamento dei programmi,
sia analizzata la 'qualità' del codice scritto dallo studente.
Il colloquio comprende anche la discussione di come nel progetto
siano stati applicati i principi di programmazione discussi a lezione.
L'esame non prevede un voto, ma solo un giudizio di idoneità.
Esempi di domande
Discutere gli homework dati durante il corso.
Scrivere piccole classi C++ o piccoli programmi su liste in Haskell.
Programmazione delle attività didattiche
- Introduzione ai Linguaggi di Programmazione. Algoritmi e Programmi
- Programmazione Funzionale con Haskell
- Programmazione a Oggetti in C++
Obiettivi per lo sviluppo sostenibile - Agenda ONU 2030
- Anno accademico2026/2027
- Corso di studio a cui afferisce l’insegnamentoMatematica
- Codice insegnamentoAAF1267
- CurriculumGenerale
- Anno e semestre3º anno - 1º semestre
- TipologiaUlteriori attività formative (art.10, comma 5, lettera d)
- AmbitoAbilità informatiche e telematiche
- Presenza obbligatoriaNo
- Linguaita
- CFU3 CFU
- Durata complessiva36 ore
- Distribuzione delle ore36 training hours