Programmazione ii

A.A. 2022/2023
6
Crediti massimi
64
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento ha l'obiettivo di ampliare le competenze di programmazione procedurale acquisite nell'insegnamento di "Programmazione", presentando alcune astrazioni e concetti utili alla progettazione, sviluppo e manutenzione di programmi di grandi dimensioni. L'attenzione è focalizzata sul paradigma di programmazione orientata agli oggetti, con enfasi sul processo di progettazione e modellazione dei dati. Potranno essere anche introdotti i concetti fondamentali relativi alla programmazione funzionale.
Risultati apprendimento attesi
Al termine dell'insegnamento lo studente sarà in grado di:
- illustrare i concetti fondamentali e le proprietà principali della programmazione orientata agli oggetti ed, eventualmente, della programmazione funzionale;
- comprendere e definire le specifiche di un programma, progettarlo ed implementarlo con le metodologie proprie della programmazione orientata agli oggetti ed, eventualmente, di quella funzionale.
Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Primo semestre

Programma
L'insegnamento tratta le tematiche di progettazione, realizzazione ed analisi del software secondo il paradigma di orientazione a oggetti. Inoltre, saranno presentati anche cenni di programmazione funzionale e ingegneria del software.

Gli argomenti principali trattati durante il corso sono:

- Principi di orientazione a oggetti:
-- Astrazione
-- Incapsulamento e Information Hiding
-- Ereditarietà e Composizione
-- Polimorfismo
- Principi di programmazione in Java:
-- Tipi di dati elementari
-- Costrutti di controllo
-- Funzioni e Metodi
-- Classi (concrete, astratte, interne)
-- Interfacce (e metodi di default)
- Cenni di ingegneria del software:
-- Debugging e Tecniche di verifica
-- Design patterns
- Cenni di programmazione funzionale
-- Immutabilità, funzioni Pure, funzioni First class e Higher-order
-- Lambda calculus
Prerequisiti
Il superamento dell'esame di Programmazione è propedeutico all'insegnamento di Programmazione II. In particolare, è richiesto che lo studente conosca e sappia utilizzare proficuamente almeno un linguaggio di programmazione imperativo e sia in grado di scrivere programmi che usano i costrutti fondamentali della programmazione imperativa.
Metodi didattici
L'insegnamento è suddiviso in una parte di teoria ed una di laboratorio. La parte di teoria viene svolta mediante lezioni frontali. La parte di laboratorio alterna lezioni frontali ed esercitazioni.
Materiale di riferimento
Il libro di testo dell''insegnamento è: "Program development in Java" di Barbara Liskov e John Guttag.
Ulteriore materiale di riferimento (slides, repository di esercizi) sarà reso disponibile sul sito Ariel ufficiale dell'insegnamento.
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame è costituito da un'unica prova scritta, della durata indicativa di 3 ore, con parti di teoria e di laboratorio.
La parte di teoria è costituita da una serie di domande aperte e chiuse e verte sugli argomenti trattati a lezione.
La parte di laboratorio è costituita da esercizi che richiedono di progettare e realizzare (oppure comprendere e modificare) programmi, secondo le specifiche assegnate.
Il peso delle due parti sarà indicativamente di 0.5/1 ciascuna, con possibili variazioni in base alla difficoltà degli singoli esercizi.

Durante la prova saranno consultabile le specifiche API ufficiali di Java.

L'esame intende valutare:
* la conoscenza degli argomenti trattati durante l'insegnamento.
* la capacità di applicare tale conoscenza a problemi concreti tramite la progettazione e lo sviluppo di codice.

I risultati saranno notificati attraverso SIFA.
INF/01 - INFORMATICA - CFU: 6
Laboratori: 32 ore
Lezioni: 32 ore
Turni:
Turno A
Docente: Ahmetovic Dragan
Turno B
Docente: Valtolina Stefano
Siti didattici
Docente/i
Ricevimento:
Su appuntamento
Dipartimento di Informatica, Stanza 7022
Ricevimento:
Su appuntamento
via Celoria 18, Terzo piano, Stanza 3006