Metodologie di Programmazione a.a. 2010-2011 (canale M-Z)

Diario delle lezioni e delle esercitazioni

Martedì 15 marzo 2011
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 classe System e il metodo di stampa println(). I tipi primitivi, le stringhe (cenni sulla classe String e i metodi length() e charAt()), le variabili e i principali operatori. Input tramite la classe Scanner (metodi next(), nextLine(), nextInt(), nextDouble()). Cenni sui packages e la direttiva import (i packages java.lang e java.util). Esempio di un programma che legge in input una linea di testo e stampa il numero di vocali in essa contenute. Uso di if-else e for.
Esercizi   Stringa_verticale, Parole_verticali e Vocali (nella prima parte delle dispense).

Mercoledì 16 marzo 2011
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.

Venerdì 18 marzo 2011
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 classe Math (in java.lang). La direttiva import static. Struttura di un programma Java: la direttiva package. 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 accesso public, private e accesso ristretto al package. Differenze tra metodi/campi della classe, cioè statici, (modificatore static) e metodi/campi relativi agli oggetti. Creazione di oggetti: l'operatore new e i costruttori. Esempio: la classe Studente.
Esercizi    Frasi_palindrome, Date e Date+ (nella prima parte delle dispense).

Martedì 22 marzo 2011
Soluzioni degli esercizi Frasi_palindrome, Date e Date+ (dispense - prima parte).
Esercizio    Razionali (dispense - prima parte).
Mercoledì 23 marzo 2011
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.

Giovedì 24 marzo 2011
Classe di esempio CharRect (dispense - prima parte). Le costanti e la parola chiave final. 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 classe Studente. 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).

Martedì 29 marzo 2011
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).

Mercoledì 30 marzo 2011
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].


Giovedì 31 marzo 2011

Raffinamento della classe CharRect: 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 classe PrintMedium.
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).

Martedì 5 aprile 2011
Soluzioni esercizi Cascata e Digitando_interi. Tipi per dati persistenti. La classe File (in java.io): i principali costruttori e metodi, abstract pathnames. Esempio d'uso della classe File. File ad accesso sequenziale (file di testo). Lettura tramite la classe Scanner. Eccezione controllata (checked exception): FileNotFoundException. Scrittura tramite la classe PrintStream e la classe FileOutputStream. Esempio: classe che gestisce un file di log.
Esercizi    Conta_file e Log (dispense - seconda parte).

Mercoledì 6 aprile 2011
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.


Venerdì 8 aprile 2011
Estensione di una classe (parola chiave extends) 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 chiave super 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).

Martedì 12 aprile 2011
Esempio di gerarchia di classi e suo utilizzo. Discussione circa i vantaggi offerti dall'ereditarietà e dal polimorfismo. Il modificatore di accesso protected.
La classe Object. L'operatore instanceof. Soluzione esercizio Titoli_incorniciati.
Esercizio    Biblioteca (negli esercizi di preparazione alla prova intermedia).

Mercoledì 13 aprile 2011
Laboratorio Ereditarietà: Insiemi di anagrammi come sottoclasse di insiemi generici.


Venerdì 15 aprile 2011
Esempi d'uso del tipo Object: metodi "generici" per copiare array. Il metodo copyOf() della classe Arrays (in java.util). Il significato e la ridefinizione dei metodi equals() e toString(). Soluzione esercizio Biblioteca

Martedì 19 aprile 2011
Simulazione di prova intermedia:

Mercoledì 4 maggio 2011
Laboratorio: soluzioni esercizi prova intermedia.

Venerdì 6 maggio 2011
Classi e metodi astratti (abstract). Discussione circa i motivi che favoriscono l'uso di classi astratte. Esempio d'uso di classi astratte: gerarchie CharShape e PrintMedium (nella terza parte delle dispense).
Esercizi    Strisce_verticali e Collisione2 (dispense - terza parte).

martedì 10 maggio 2011
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'interfaccia StrSet.
Esercizio    Menu (dispense - terza parte).

Mercoledì 11 maggio 2011
Laboratorio: preparazione progetto.

Venerdì 13 maggio 2011
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).

Martedì 17 maggio 2011
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 tipo Number. Genericità: variabili di tipo. Metodi generici: esempi di metodi generici e confronto con le corrispondenti versioni non generiche che usano Object. Tipo inferito dal compilatore.
Esercizio    Elementi_comuni (dispense - quarta parte).

Mercoledì 18 maggio 2011
Laboratorio: preparazione progetto.

Venerdì 20 maggio 2011
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'interfaccia Comparable<T>. Limitazione extends su una variabile di tipo.
Esercizi    Minmax e Insiemi_generici (dispense - quarta parte).

Martedì 24 maggio 2011
Discussione esercizi Minmax e Insiemi_generici. Wildcards: esempi di uso per entrambe le limitazioni extends e super. Relazioni di supertipo/sottotipo per i tipi wildcard e i tipi parametrici.
Esercizi    Componenti_comuni e Unione (dispense - quarta parte).

Mercoledì 25 maggio 2011
Laboratorio: preparazione progetto.

Venerdì 27 maggio 2011
Discussione esercizi Componenti_comuni e Unione. Le interfacce Iterable<E> e Iterator<E>. Esempio di implementazione dell'interfaccia Iterable<E> tramite classe nidificata statica. Il for-each: esempi con array e con oggetti che implementano Iterable<E>. Classi locali e anonime: implementazione di Iterator tramite classe locale e anonima.
Esercizi    Rimuovi_array e Max_ripetizioni (dispense - quarta parte).

Martedì 31 maggio 2011
Discussione esercizi Rimuovi_array e Max_ripetizioni. Le principali interfacce e classi del framework Collections (in java.util): Collection<E>, Set<E>, List<E>, Queue<E>, SortedSet<E>, HashSet<E>, TreeSet<E>, ArrayList<E>, LinkedList<E>, Map<K,V> e HashMap<K,V>. Il metodo hashCode() di Object in relazione alla ridefinizione di equals 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).

Mercoledì 1 giugno 2011
Laboratorio: preparazione progetto.

Venerdì 3 giugno 2011
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 per JButton (ActionEvent, ActionListener, addActionListener()). Panoramica sui principali componenti di Swing.

Mercoledì 8 giugno 2011
Laboratorio: preparazione progetto.

Venerdì 10 giugno 2011
Versione migliorata dell'applicazione Rate 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 classe NumberField che gestisce campi di testo formattati per valori numerici: la classe JFormattedTextField, la definizione di un filtro per caratteri e la definizione ed uso di formattatori (NumberFormat in java.text, NumberFormatter e DefaultFormatterFactory in javax.swing.text). I sorgenti commentati e la descrizione dell'applicazione sono nell'archivio JAR Rate.jar.

Martedì 14 giugno 2011
Esercizi di preparazione alla prova scritta:

Mercoledì 15 giugno 2011
Laboratorio: preparazione progetto.

Venerdì 17 giugno 2011
Simulazione di prova scritta:
Edit | Attach | Watch | Print version | History: r108 < r107 < r106 < r105 < r104 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r108 - 2015-06-18 - RiccardoSilvestri






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback