Programmazione 2

A.A. 2020/2021
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
Metodi didattici:
Le lezioni si terranno sulla piattaforma Microsoft Teams (team code: q9s1umb) e potranno essere seguite sia in modalita' sincrona sulla base dell'orario delle lezioni, sia in modalita' asincrona, tramite le registrazioni delle lezioni che verranno rese disponibili agli studenti sulla medesima piattaforma e/o su sito Ariel.

Programma e materiale di riferimento:
Il programma e il materiale di riferimento non subiranno variazioni rispetto a quanto indicato nel manifesto degli studi.

Modalita' di verifica dell'apprendimento e criteri di valutazione:
L'esame si svolgera' in forma scritta al calcolatore, utilizzando la piattaforma Microsoft Teams o, laddove la regolamentazione lo consentisse, in presenza in laboratorio. Per le parti dell'esame che prevedono la scrittura di un progetto in java gli studenti potranno sottomettere il progetto via email ed esso sara' successivamente discusso utilizzando la piattaforma Microsoft Teams. L'obiettivo della prova d'esame e' la verifica del raggiungimento da parte degli studenti degli obiettivi formativi previsti dall'insegnamento.
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
Siti didattici
Docente/i