Informazioni sul corso. Cenni sulla storia del linguaggio Java. La Java Virtual Machine (JVM), il compilatore Java e il linguaggio dei bytecodes.
Il primissimo programma Java: files, classi pubbliche (class
), metodi statici (static
), cenni sulla classeSystem
e il metodo di stampaprintln()
. I tipi primitivi, le stringhe (cenni sulla classeString
e i metodilength()
echarAt()
), le variabili e i principali operatori. Input tramite la classeScanner
(metodinext()
,nextLine()
,nextInt()
,nextDouble()
). Cenni sui packages e la direttivaimport
(i packagesjava.lang
ejava.util
). Esempio di un programma che legge in input una linea di testo e stampa il numero di vocali in essa contenute. Uso diif-else
efor
.
Esercizi Stringa_verticale, Parole_verticali e Vocali (nella prima parte delle dispense).
Laboratorio
Scrittura, compilazione ed esecuzione di un programma Java: il programma HelloWorld
in Java.
Esercitazione su stringhe, input, output, strutture di controllo base.
Svolgimento assistito degli esercizi visti a lezione:
Parole_verticali e
Vocali.
Piccole variazioni sul tema: conteggio delle occorrenze di ciascuna vocale, verifica se due stringhe sono una l'anagramma dell'altra.
Gli operatori aritmetici/logici/relazionali e il controllo del flusso (if-else
,for
,while
,do-while
,switch-case
e l'operatore condizionale( ? : )
) nel linguaggio Java sono direttamente derivati da quelli del linguaggio C. Metodi ricorsivi: esempio fattoriale. Alcuni metodi e campi della classeMath
(injava.lang
). La direttivaimport static
. Struttura di un programma Java: la direttivapackage
. Nomi semplici e nomi completi.
Discussione circa il ruolo dei linguaggi di programmazione nello sviluppo di sistemi software (complessi). Confronto tra la programmazione procedurale e la programmazione orientata agli oggetti: decomposizione in parti più semplici, separazione interfaccia-implementazione.
Definizione di una classe: campi, metodi e costruttori. signature di un metodo e overloading. Modificatori di accessopublic
,private
e accesso ristretto al package. Differenze tra metodi/campi della classe, cioè statici, (modificatorestatic
) e metodi/campi relativi agli oggetti. Creazione di oggetti: l'operatorenew
e i costruttori. Esempio: la classeStudente
.
Esercizi Frasi_palindrome, Date e Date+ (nella prima parte delle dispense).
Soluzioni degli esercizi Frasi_palindrome, Date e Date+ (dispense - prima parte).Mercoledì 23 marzo 2011
Esercizio Razionali (dispense - prima parte).
Laboratorio Svolgimento assistito degli esercizi proposti a lezione: Razionali.
Osservazioni su: rappresentazione canonica di un tipo di dato, invariante di tipo di dato, utilità del mascheramento della rappresentazione.
Classe di esempioCharRect
(dispense - prima parte). Le costanti e la parola chiavefinal
. Discussione sui tipi: tipi primitivi, tipi classe e tipi riferimento. Comportamento rispetto ad assegnamenti e confronti. Inizializzazioni e valori di default (null
). Classi nidificate statiche. Esempio relativo alla classeStudente
. Definizione di una classe che gestisce liste di interi e implementazione tramite liste (vedi esercizio Liste_di_interi). Discussione circa l'importanza di ben delineare le responsabilità di una classe e di favorire l'incapsulamento.
Esercizi Scacchiera, Piramidi e Pile_di_interi&stringhe (dispense - prima parte).
Soluzione esercizi Scacchiera e Pile_di_interi&stringhe. Il tipo array: dichiarazione di variabili e creazione di array. Relazione tra i tipi array, i tipi classe e i tipi riferimento. Array multidimensionali: array di array, matrici triangolari. Inizializzatori di array. Argomenti dalla linea di comando. Metodi con un numero variabile di parametri.
Esercizi Duplicati, Grafico_a_barre e Costellazioni_di_caratteri (dispense - seconda parte).
Laboratorio: Esercizi su array e matrici: 1. Duplicati, 2. Verifica di un quadrato magico; 3. Data una scacchiera e una casella (x,y), stampare una matrice in cui in ciascuna casella c'č il numero minimo di mosse che un cavallo impiegherebbe a raggiungerla da (x,y). [in corrispondenza della cella (x,y) c'č il numero 0].
Raffinamento della classeCharRect
: disaccoppiamento del mezzo di stampa dagli algoritmi di tessitura del rettangolo tramite l'astrazione di una interfaccia comune per i mezzi di stampa. Introduzione della classePrintMedium
.
Errori al runtime e le eccezioni (exceptions). Il percorso di una eccezione. Cattura delle eccezioni:try {...} catch () {...} finally {...}
. Lancio di eccezioni (throw
). Eccezioni controllate (checked) e non controllate (unchecked), dichiarazione di lancio eccezioni (throws
).
Esercizi Cascata e Digitando_interi (dispense - seconda parte).
Soluzioni esercizi Cascata e Digitando_interi. Tipi per dati persistenti. La classeFile
(injava.io
): i principali costruttori e metodi, abstract pathnames. Esempio d'uso della classeFile
. File ad accesso sequenziale (file di testo). Lettura tramite la classeScanner
. Eccezione controllata (checked exception):FileNotFoundException
. Scrittura tramite la classePrintStream
e la classeFileOutputStream
. Esempio: classe che gestisce un file di log.
Esercizi Conta_file e Log (dispense - seconda parte).
Laboratorio 1. Lettura da file: contare numero di parole, caratteri e righe di un file di testo. 2. Lettura da file: leggere da file una matrice opportunamente formattata e verificare se si tratta di un quadrato magico.
Estensione di una classe (parola chiaveextends
) e discussione in relazione ai concetti di specializzazione (o raffinamento), generalizzazione e interfaccia. Ereditarietà dei metodi e campi (pubblici). Ridefinizione (override) dei metodi ereditati. La parola chiavesuper
e suoi usi nei costruttori e nei metodi. I concetti di superclasse/sottoclasse e supertipo/sottotipo. Il polimorfismo: dynamic binding e static binding. Esempio di classe base, di classe estesa e di uso del polimorfismo. Gli upcast e i downcast e la relazione tipo-sottotipo per gli array.
Soluzione degli esercizi Conta_file e Log.
Esercizi Titoli_incorniciati e Titoli_verticali (dispense - terza parte).
Esempio di gerarchia di classi e suo utilizzo. Discussione circa i vantaggi offerti dall'ereditarietà e dal polimorfismo. Il modificatore di accessoprotected
.
La classeObject
. L'operatoreinstanceof
. Soluzione esercizio Titoli_incorniciati.
Esercizio Biblioteca (negli esercizi di preparazione alla prova intermedia).
Laboratorio Ereditarietà: Insiemi di anagrammi come sottoclasse di insiemi generici.
Esempi d'uso del tipoObject
: metodi "generici" per copiare array. Il metodocopyOf()
della classeArrays
(injava.util
). Il significato e la ridefinizione dei metodiequals()
etoString()
. Soluzione esercizio Biblioteca
Simulazione di prova intermedia:
Laboratorio: soluzioni esercizi prova intermedia.
Classi e metodi astratti (abstract
). Discussione circa i motivi che favoriscono l'uso di classi astratte. Esempio d'uso di classi astratte: gerarchieCharShape
ePrintMedium
(nella terza parte delle dispense).
Esercizi Strisce_verticali e Collisione2 (dispense - terza parte).
Discussione degli esercizi Strisce_verticali e Collisione2. Il design pattern Template. Esempio di uso di tale design pattern: classe che fornisce un "template" per semplici applicazioni con menu testuali.
Interfacce (interface
) e il concetto di contratto. Implementazione (implements
). Ereditarietà multipla. Esempio: l'interfacciaStrSet
.
Esercizio Menu (dispense - terza parte).
Laboratorio: preparazione progetto.
Discussione esercizio Menu. Esempio di ereditarietà multipla da classe e interfaccia. Esempio di interfaccia per insiemi di stringhe (modificabili) e implementazioni tramite array e liste. Esempio d'uso.
Esercizi Ricerca_prefissi e Code_oggetti (dispense - terza parte).
Discussione esercizi Ricerca_prefissi e Code_oggetti. Esempio di interfaccia per insiemi di stringhe ordinati e modificabili (unione di due interfacce) e implementazione tramite liste.
Conversione Boxing/Unboxing: i tipi riferimento corrispondenti ai tipi primitivi. Il tipoNumber
. Genericità: variabili di tipo. Metodi generici: esempi di metodi generici e confronto con le corrispondenti versioni non generiche che usanoObject
. Tipo inferito dal compilatore.
Esercizio Elementi_comuni (dispense - quarta parte).
Laboratorio: preparazione progetto.
Discussione esercizio Elementi_comuni. Metodi generici: esempi e restrizioni sull'uso delle variabili di tipo. Tipi generici: variabili di tipo e tipi parametrici. Relazioni di sottotipo tra tipi parametrici. Esempi. Interfacce generiche. Esempio: l'interfacciaComparable<T>
. Limitazioneextends
su una variabile di tipo.
Esercizi Minmax e Insiemi_generici (dispense - quarta parte).
Discussione esercizi Minmax e Insiemi_generici. Wildcards: esempi di uso per entrambe le limitazioniextends
esuper
. Relazioni di supertipo/sottotipo per i tipi wildcard e i tipi parametrici.
Esercizi Componenti_comuni e Unione (dispense - quarta parte).
Laboratorio: preparazione progetto.
Discussione esercizi Componenti_comuni e Unione. Le interfacceIterable<E>
eIterator<E>
. Esempio di implementazione dell'interfacciaIterable<E>
tramite classe nidificata statica. Il for-each: esempi con array e con oggetti che implementanoIterable<E>
. Classi locali e anonime: implementazione diIterator
tramite classe locale e anonima.
Esercizi Rimuovi_array e Max_ripetizioni (dispense - quarta parte).
Discussione esercizi Rimuovi_array e Max_ripetizioni. Le principali interfacce e classi del frameworkCollections
(injava.util
):Collection<E>
,Set<E>
,List<E>
,Queue<E>
,SortedSet<E>
,HashSet<E>
,TreeSet<E>
,ArrayList<E>
,LinkedList<E>
,Map<K,V>
eHashMap<K,V>
. Il metodohashCode()
diObject
in relazione alla ridefinizione diequals
e le implementazioni tramite tabelle hash. Esempio di uso delle mappe (Map<K,V>
) per implementare alberi generici.
Esercizi Conta_ripetizioni e Anagrammi_in_file (dispense - quarta parte).
Laboratorio: preparazione progetto.
Discussione esercizi Conta_ripetizioni e Anagrammi_in_file. Interfacce grafiche: le origini di AWT e Swing. Principi di base dell'architettura di Swing/AWT: albero delle componenti e design pattern model-view-controller (MVC). Gestione degli eventi: design pattern Observer, "ascoltatori di eventi" in Swing/AWT, esempio perJButton
(ActionEvent
,ActionListener
,addActionListener()
). Panoramica sui principali componenti di Swing.
Laboratorio: preparazione progetto.
Versione migliorata dell'applicazioneRate
con campi di testo formattati per valori numerici e con controllo in fase di editing. Discussione circa i vantaggi di individuare le parti del codice che possono essere riusate e di definirle in modo tale da favorire il riuso (ad es. definendole in classi a sè stanti). Definizione di una classeNumberField
che gestisce campi di testo formattati per valori numerici: la classeJFormattedTextField
, la definizione di un filtro per caratteri e la definizione ed uso di formattatori (NumberFormat
injava.text
,NumberFormatter
eDefaultFormatterFactory
injavax.swing.text
). I sorgenti commentati e la descrizione dell'applicazione sono nell'archivio JAR Rate.jar.
Esercizi di preparazione alla prova scritta:
Laboratorio: preparazione progetto.
Simulazione di prova scritta:
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |