Programmazione 2

A.A. 2021/2022
6
Crediti massimi
60
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di presentare i metodi della programmazione a oggetti utilizzando il linguaggio Java, per il quale sarà fornita una panoramica significativa della sua sintassi di base.
Risultati apprendimento attesi
Lo studente acquisirà la capacità di scrivere programmi in ambiente OOP.
Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Primo semestre
in relazione alle modalita' di erogazione delle attivita' formative per l'a.a. 2021/22, verranno date indicazioni piu' specifiche nei prossimi mesi, in base all'evoluzione della situazione sanitaria.
Programma
· Introduzione al corso, scopo e finalità
· Cos'è l'informatica [1.1]
· Dagli algoritmi ai programmi [1.2]
· Linguaggi di programmazione (macchina, assembly, alto livello)
· Classificazione dei linguaggi di alto livello
◦ imperativi
◦ funzionali
◦ logici
◦ a oggetti
· Ciclo di vita del software
· Crisi del software
· Programmazione strutturata [1.9]
· Concetti di variabile, tipo, assegnamento [1.10]
· Selezione (decidere se n è pari o dispari) [1.11]
· Iterazione (somma primi n numeri; cosa succede se n=0?; calcolo somma di seq.; calcolo media; calcolo media pari/dispari; calcolo MCD) [1.11]
· Altri esempi (x*y mediante somme iterate, x/y mediante sottrazioni iterate) [1.11]
· Introduzione alla programmazione a oggetti [1.12]
· Aspetti sintattici [1.13]
· BNF e carte sintattiche [1.13]
· Cenni della grammatica di Java [1.14]
· Primi esempi di programmi in Java [1.15]
· Invocazioni di metodi [2.1.1]
· Invocazione di costruttori [2.1.1]
· Classi per I/O [2.1.1, 2.1.2]
· Esempi [2.1.2]
· Prototipi, segnature, overloading [2.2]
· Classe String: costruttori e oggetti [2.3]
· Tipi di variabili: primitivi, riferimenti [2.4]
· Esempi (la classe Frazione) [3.1]
· Uso della classe Frazione [3.1]
· Principi di buona programmazione: commenti, indentazione, cenno a javadoc ([7.8])
· if [3.2]
· Il tipo boolean e operatori logici [3.3, 3.4]
· Cicli: while, do, for [3.5, 3.6]
· Esempi (fra cui: palindrome) [3.5, 3.6]
· Istruzioni break e continue [3.7]
· Cicli infiniti
· Espressioni: tipo, valore [4.1]
· Effetti collaterali [4.1]
· Lazy evaluation [4.1]
· Tipi numerici interi e operatori [4.3, 4.2]
· Tipi numerici floating point e operatori [4.4, 4.2]
· Conversioni di tipo e cast [4.5]
· Operatore +; il metodo toString [4.5]
· Tipo char; relazione con i tipi interi [4.6]
· Regole di precedenza
· Costanti
· Istruzione switch [4.8]
· Metodi statici [4.9]
· Classi involucro [4.10]
· Boxing e unboxing [4.10]
· Tipi enumerativi (cenni) e loro uso negli switch [4.7]
· Array con esempi [5.1]
· Cicli foreach per array [5.2]
· Cenni ad array a più dimensioni [5.6]
· Parametri del main [5.3]
· Esempi
· Sequenza e uso delle classi generiche [5.7]
· Classe Rettangolo [6.1]
· Classe Quadrato [6.3]
· Relazioni fra Quadrato e Rettangolo [6.4]
◦ Ereditarietà
◦ Rappresentazione UML
◦ Overriding
◦ Uso dei riferimenti
◦ Polimorfismo
◦ instanceof
· Esempio FigureAreaMax
· Classe Cerchio
· Introduzione alle classi astratte [6.5]
· Riepilogo: gerarchia delle classi, gerarchia dei tipi [6.6]
· Classe Object [6.6]
· Uso dei tipi riferimento (promozioni, cast) [6.7]
· Dynamic binding [6.8]
· Un esempio [6.9]
· Cenni ai package
· Gestione di file [6.10]
· Esempi [6.11]
· Interfacce [6.12]
· Interfacce e tipi [6.12]
· Implementazione di classi: la classe Frazione [7.1, 7.2]
· La classe Orario [7.4]
· Metodi e campi statici [7.5]
· Modificatore final (per gli attributi)
· Riepilogo sui membri delle classi [7.6]
· Garbage collection [7.6]
· Implementazione di un'interfaccia [7.7]
· Ereditarietà (la classe Quadrato) [8.1]
· Costruttori e ereditarietà [8.2]
· Estensioni di classi astratte
· Adombramento di variabili: uso di this
· Uso di super [8.3]
· Overloading di metodi e costruttori [8.4, 8.5]
· Modificatori di accesso [7.10, 8.13]
· Modificatore final per i metodi e le classi
· Il metodo equals [8.7]
· Esempi di classi e ereditarietà [8.9, 8.10, 8.11]
· Invocazione di costruttori e metodi [8.2]
· Passaggio di parametri [10.1]
◦ Per valore
◦ Cenni ad altri metodi
◦ Passaggio per riferimento
· Varargs
· Organizzazione della memoria [10.2]
· Stack e record di attivazione [10.2]
· Metodi ricorsivi [10.3]
· Notazione postfissa
· Introduzione alle eccezioni [11.1]
· Eccezioni [11.2]
· Notazione postfissa con eccezioni [11.4]
· Sollevare eccezioni [11.6]
· Eccezioni controllate e non controllate [11.8]
Prerequisiti
Capacità di programmazione di base (Programmazione 1)
Metodi didattici
Lezioni frontali + esercitazioni guidate + esercitazioni libere
Materiale di riferimento
G. Pighizzini, M. Ferrari: Dai fondamenti agli oggetti. Corso di programmazione JAVA, Addison-Wesley, Pearson Education Italia.
Modalità di verifica dell’apprendimento e criteri di valutazione
Progetto di gruppo + orale individuale, oppure progetto individuale in aula.
INF/01 - INFORMATICA - CFU: 6
Laboratori: 24 ore
Lezioni: 36 ore
Docente: Re' Matteo
Docente/i
Ricevimento:
Concordare via email e/o su piattaforma Microsoft Teams. Per specifici corsi fare riferimento al sito Ariel del corso.
Milano - via Celoria 18 (stanza 3010) e/o Ms Teams/Zoom