Modulo di Laboratorio di Programmazione (CdL in Informatica) 
Corso di Informatica (CdL in Matematica) 
 
Alcuni appunti ed esercizi
Attenzione! Pagina in costruzione! (ultimo aggiornamento: ottobre 2019)
 
Si prega di segnalare eventuali errori o imprecisioni all'indirizzo 
di posta elettronica monica.nesi@univaq.it. 
Prima parte del corso
- Presentazione del corso.
 
  
- Algoritmi, programmi e linguaggi di programmazione.
Esempi: somma e moltiplicazione di due numeri tramite il pallottoliere.  
Concetto di macchina astratta. 
Moltiplicazione di due numeri tramite pseudo-codice.  
 
- 
Diagrammi di flusso. Esempi di algoritmi espressi tramite diagrammi di flusso.  
 
Esempi di algoritmi su dati 
monodimensionali e bidimensionali  
tramite diagrammi di flusso.  
 
- 
Introduzione alla programmazione strutturata ed orientata agli oggetti. 
  
Introduzione al linguaggio Java. Struttura di un programma Java. 
Input/Output. Astrazione sui dati in ingresso.  
(Note)
 
 
- 
Tipi di dato primitivi o di base: boolean, int, byte, short, long, float,
double, char. Dichiarazione di variabili, inizializzazione, assegnamento.
Promozione e cast. 
Espressioni ed operatori booleani (sintassi e semantica). 
Costanti letterali e simboliche.
Dichiarazione di costanti simboliche (esempio).
 
 
- 
Espressioni aritmetiche. Istruzione if/if-else. 
Sintassi (informale) e semantica tramite diagramma di flusso. 
Blocchi, dichiarazione di identificatori in un blocco, regole
di visibilità degli identificatori (scoping rules).
Istruzioni if/if-else annidate.
  
 
- 
Iterazione e ciclo (loop): istruzioni while, do-while, for.
Sintassi (informale) e semantica tramite diagramma di flusso.
Esempi.   
Cicli annidati. Istruzioni (ed operatori) di incremento e decremento. 
Riepilogo degli operatori aritmetici, logici e relazionali in Java.
Confronto tra while e for.  
 
 
- 
Struttura dati array in Java. Array monodimensionali: dichiarazione, creazione, 
inizializzazione, assegnamento su array. Valutazione di codice Java con array.  
Esercizi.  
 
- 
Stringhe in Java. Alcuni metodi utili della classe String
(length, equals, concat, charAt, substring).
Valutazione di codice Java con stringhe. 
Esercizi. 
 
- 
Array bidimensionali: dichiarazione, creazione, inizializzazione. 
Valutazione di codice Java con array bidimensionali. 
Esercizi.  
 
  
- 
Prima verifica parziale: una versione 
del compito. 
 
Soluzioni: 
  
Es.1 
  
1) i = 4, j = 10, k = 3, b = {true,false,true,true} 
 
2) i = 3, j = 7, k = 4, b = {false,false,true} 
 
Es.2 
 
1) i = 4, j = 6, k = 5, p = true, s = "awjzajta" 
  
2) i = 4, j = 5, k = 2, p = false, s = "g" 
 
Es.3 
 
i = 5, j = 3, q = true, s = "r2r7"  
 
Seconda parte del corso
- 
Programmazione strutturata e modulare: definizione di metodi in Java. 
 
Intestazione di un metodo.
Parametri formali ed attuali. Metodi statici, chiamata di metodo,
passaggio dei parametri, modalità di passaggio per valore
(call-by-value), istruzione return. Esempi. 
Note.
 
- 
Definizione di metodi statici iterativi con parametri di tipo array 
(esempi), 
con stringhe ed array 
(esempi), 
con array bidimensionali 
(esempi).   
Definizione di metodi iterativi che restituiscono array 
(esempi). 
 
 
-  
Introduzione alla ricorsione e definizione di metodi ricorsivi in Java. 
Valutazione di chiamate di metodi ricorsivi. 
  
Definizione di metodi statici ricorsivi su array monodimensionali e
bidimensionali (esempi), su stringhe e 
su array (esempi). 
 
Definizione di metodi ricorsivi che restituiscono array 
(esempi).  
 
- 
Seconda verifica parziale: una versione del secondo 
parziale del 2015 e alcune soluzioni proposte. 
Una versione del secondo parziale del 2018. 
 
 
Terza parte del corso
- 
Introduzione al concetto di classe, oggetto, variabile istanza.
Costruttori e metodi d'istanza e loro chiamate.
Parametri espliciti e parametro implicito (this).
Esempio.
 
-  
Definizione di classi, costruttori, metodi d'istanza ed oggetti.
Applicazione di metodi d'istanza.
Esempio.
 
- 
Definizione di classi con array di oggetti
(esempio).
 
- 
Introduzione al concetto di ereditarietà in Java.
Superclasse, sottoclasse, variabili istanza e metodi ereditati.
Il costrutto super. Sovrascrittura di metodi (overriding).
Esempi (incluso l'esempio sulle
polizze, non fatto a lezione).
 
- 
Ereditarietà, overloading e overriding.
Early binding (selezione anticipata o statica) e late binding (selezione
posticipata o dinamica).
Assegnamenti tra riferimenti ad oggetti, cast, instanceof
(esempio). 
Definizione di classi con array di oggetti
(esempio Agenzia Assicurativa,
non fatto a lezione).
 
- 
Definizione di classi, sottoclassi, overriding e riutilizzo del codice: 
  
classi BorsaStudio, AssegnoRicerca e CV  
(testo degli esercizi
e alcune soluzioni); 
 
classi Aereoporto, Passeggero, Volo e VoloNonDiretto 
(soluzioni); 
 
classi Film, FilmDvd e Videoteca 
(soluzioni di alcuni esercizi 
della prova scritta del 26/03/2007). 
 
- 
Eccezioni in Java: definizione, sollevamento (throw/throws) e cattura 
(try/catch). Valutazione di codice Java con eccezioni. Definizione di metodi 
che sollevano eccezioni. 
 
Prova scritta del 10/12/2003: il testo
del compito (classi Aereoporto, Passeggero, Volo, VoloNonDiretto con qualche 
eccezione). 
 
Prova scritta del 19/09/2003: il testo 
del compito.
 
Prova scritta del 18/07/2003: il testo
del compito + alcune soluzioni.  
 
Prova conclusiva scritta del 13/12/2002:
i testi dei compiti totali (versione1,  
versione2).  
 
Le soluzioni di alcuni esercizi sulle classi 
della prova scritta del 15/02/2016 sono disponibili  
qui.
 
Altri esercizi di esame con le eccezioni sono presenti nelle sezioni relative 
agli anni accademici 2003-04 e 
2004-05.