Nuova ricerca

Giacomo CABRI

Professore Ordinario
Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica

Insegnamento: Paradigmi e linguaggi di programmazione

Informatica (Offerta formativa 2021)

Obiettivi formativi

Gli obiettivi dell'insegnamento sono:
- Presentare e confrontare i vari paradigmi di programmazione
- Presentare alcuni linguaggi di programmazione come esempi
- Introdurre concetti di programmazione concorrente e parallela

Al termine dell’insegnamento lo studente dovrebbe essere in grado di:
- utilizzare diversi paradigmi per scrivere un programma software;
- scrivere codice concorrente e parallelo.

Prerequisiti

Saper programmare in un qualsiasi linguaggio di programmazione.
(opzionale) Avere basi di sistemi operativi
Aver superato l'esame di Programmazione a oggetti (propedeutico).

Programma del corso

Paradigmi di programmazione
- Concetti generali dei linguaggi e paradigma imperativo [6 ore]
- Paradigma funzionale (ed esempi) [14 ore]
- Paradigma logico (ed esempi) [8 ore]
- Paradigma parallelo (ed esempi) [20 ore]

Metodi didattici

Lezioni frontali tramite slide sulla teoria ed esercitazioni in aula di applicazione della teoria.
La frequenza non è obbligatoria.
L'insegnamento e' in italiano
Gli studenti non frequentanti possono accedere alle slide delle lezioni e al materiale delle esercitazioni.


Testi di riferimento

Slide presentate a lezione messe a disposizione all'inizio dell'insegnamento.

Libri consigliati:
* Maurizio Gabbrielli, Simone Martini, Linguaggi di programmazione - Principi e paradigmi, mcgraw-hill
* Maurizio Gabbrielli, Simone Martini, Programming Languages: Principles and Paradigms, Springer
* Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft, Java 8 in Action, Manning
* A. Grama, G. Karypis, V. Kumar, A. Gupta: An introduction to Parallel Computing, Addison-Wesley
* Mattson, Sanders, Massingill, Patterns for Parallel Programming


Verifica dell'apprendimento

La verifica viene attuata tramite una prova scritta di 1 ora e 30 minuti e una eventuale prova orale di circa 15 minuti.

La prova scritta è obbligatoria e prevede esercizi sui vari paradigmi, in particolare:
- esercizi di comprensione di pezzi di codice;
- esercizi di sviluppo di semplici programmi;
- domande sulla parte teorica.
Ogni esercizio avrà un punteggio specificato nella traccia.
Durante la prova scritta non e' possibile consultare il materiale.

L'esito sufficiente della prova sarà un voto tra 15 e 30:
- chi ha preso un voto tra 15 e 17 deve sostenere un orale per arrivare al massimo al 18;
- chi ha preso 30 può verbalizzare o può sostenere una prova orale per avere la lode;
- chi ha preso un voto tra 18 e 30 può verbalizzare o può sostenere una prova orale per incrementare il voto (+/- 3 punti).
L'esito della prova scritta verra' pubblicato su ESSE3 entro circa 7-10 giorni dalla prova.

La prova scritta può essere sostituita da un progetto, seguito da una prova orale. Il progetto è finalizzato a chi intende svolgere la tesi in uno degli argomenti dell'insegnamento. La prova orale è sugli argomenti teorici (durata media di 30 minutes).

Risultati attesi

Conoscenza e comprensione
Alla fine dell’insegnamento, lo studente conosce diversi paradigmi e linguaggi per sviluppare sistemi software.

Capacità di applicare conoscenza e comprensione
Alla fine dell’insegnamento, lo studente sa sviluppare applicazioni software scegliendo i più appropriati paradigmi e linguaggi di programmazione

Autonomia di giudizio
Alla fine dell’insegnamento, lo studente:
- ha la capacità di giudicare le tecnologie e gli strumenti informatici più adatti a ogni contesto, valutando le possibili alternative;

Abilità comunicative
Alla fine dell’insegnamento, lo studente:
- ha la capacità di spiegare le scelte tecnologiche.


Capacità di apprendimento
Alla fine dell’insegnamento, lo studente:
- ha la capacità di valutare la propria preparazione in relazione allo stato dell'arte delle tecnologie informatiche;
- ha la capacità di individuare le competenze mancanti per affrontare il lavoro che gli viene proposto;
- ha la capacità di fare formazione continua per colmare le lacune e mantenersi aggiornato;

- ha la capacità di sfruttare le fonti appropriate;

- ha la capacità di affrontare problemi sempre nuovi con un approccio scientifico e metodologico.