Programmazione ii

A.A. 2021/2022
6
Crediti massimi
64
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento, che rappresenta un seguito naturale dell'insegnamento di "Programmazione", ha l'obiettivo di presentare alcune astrazioni e concetti utili al progetto, sviluppo e manutenzione di programmi di grandi dimensioni. L'attenzione è focalizzata sul paradigma orientato agli oggetti, con particolare enfasi riguardo al processo di specificazione, modellazione dei tipi di dato e progetto, e su alcuni dei principali design pattern.
Risultati apprendimento attesi
Lo studente padroneggia i concetti fondamentali della programmazione orientata agli oggetti e conosce alcuni dei design pattern più usati. Sa inoltre valutare il design del codice in base a diverse qualità (ad es., Riusabilità, Verificabilità, Evolvibilità, Manutenibilità) ed è capace, partendo da un semplice problema specificato in linguaggio naturale, di progettare un insieme di interfacce e classi adatto a risolvere il problema.
Programma e organizzazione didattica

Edizione unica

Periodo
Primo semestre
Programma
Gli argomenti principali che verranno trattati durante il corso sono:
- Encapsulation
- Information Hiding
- Type and Interfaces
- Object states
- Unit testing
- Mocking e Composition
- Law of Demeter
- Inheritance
- Abstract class
- Inversion of Control
- GUI, JavaFX
- Design Pattern: Composite, Decorator, Adapter, Command, Template, Observer, MV*
Prerequisiti
Saper scrivere e mettere a punto programmi che usano i costrutti fondamentali della programmazione imperativa; conoscere e sapere utilizzare proficuamente almeno un linguaggio di programmazione imperativo.

Il superamento dell'esame di Programmazione e' propedeutico all'insegnamento di Algoritmi e Strutture Dati.
Metodi didattici
La parte di teoria viene svolta mediante lezioni frontali. La parte di laboratorio alterna lezioni frontali a esercitazioni e attivita' pratiche svolte individualmente o in piccoli gruppi.
Materiale di riferimento
Il testo di riferimento è:

M.P.Robillard - Introduction to Software Design with Java, Springer 2019.

Per alcuni argomenti si utilizzano letture consigliate da:

J.Bloch - Effective Java - Addison-Wesley Professional, 2017.

Vengono inoltre fornite le slide presentate a lezione e i repository con il codice presentato e discusso a lezione o nei laboratori.

Il materiale è disponibile a partire dal sito del corso https://cbellettinip2.ariel.ctu.unimi.it/v5/home/Default.aspx
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di una prova di laboratorio e di una prova orale.
Nella prova di laboratorio, della durata di 4 ore, sono assegnati esercizi che richiedono di realizzare (oppure comprendere e modificare) programmi in Java che evidenzino le capacità acquisite riguardo alla strutturazione e progettazione di software anche tramite l'uso di design pattern.

L'esame si conclude con la prova orale, alla quale si accede dopo il superamento della prova di laboratorio, che verte sulla discussione della prova di laboratorio relativamente ad alcuni argomenti trattati nell'insegnamento.

Al termine della prova orale viene formulata la valutazione complessiva, espressa in trentesimi, tenendo conto dei seguenti parametri: grado di conoscenza degli argomenti, capacita' di applicare le conoscenze alla risoluzione di problemi concreti, capacita' di ragionamento critico, chiarezza espositiva e proprieta' di linguaggio.
INF/01 - INFORMATICA - CFU: 6
Laboratori: 32 ore
Lezioni: 32 ore
Turni:
Turno B
Docente: Monga Mattia
Docente/i
Ricevimento:
su appuntamento
ufficio 5006 Via Celoria 18 - Milano
Ricevimento:
Su appuntamento
Uff. 5004, Via Celoria 18, Milano