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 classeSysteme il metodo di stampaprintln(). I tipi primitivi, le stringhe (cenni sulla classeStringe 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.langejava.util). Esempio di un programma che legge in input una linea di testo e stampa il numero di vocali in essa contenute. Uso diif-elseefor.
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-casee 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,privatee accesso ristretto al package. Differenze tra metodi/campi della classe, cioè statici, (modificatorestatic) e metodi/campi relativi agli oggetti. Creazione di oggetti: l'operatorenewe 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 classePrintStreame 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 chiavesupere 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: gerarchieCharShapeePrintMedium(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>. Limitazioneextendssu 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 limitazioniextendsesuper. 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 diIteratortramite 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()diObjectin relazione alla ridefinizione diequalse 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'applicazioneRatecon 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 classeNumberFieldche gestisce campi di testo formattati per valori numerici: la classeJFormattedTextField, la definizione di un filtro per caratteri e la definizione ed uso di formattatori (NumberFormatinjava.text,NumberFormattereDefaultFormatterFactoryinjavax.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 |
|