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.