<H1>Metodologie di Programmazione a.a. 2010-2011 <SMALL>(canale M-Z)</SMALL></H1> <H2>Diario delle lezioni e delle esercitazioni</H2> <DIV ALIGN="justify" style="margin-left:5%; margin-right:10%"> <B>Martedì 15 marzo 2011</B> <BLOCKQUOTE> Informazioni sul corso. Cenni sulla storia del linguaggio Java. La <em>Java Virtual Machine</em> (JVM), il compilatore Java e il linguaggio dei <em>bytecodes</em>. <br> Il primissimo programma Java: files, classi pubbliche (<code><b>class</b></code>), metodi statici (<code><b>static</b></code>), cenni sulla classe <code>System</code> e il metodo di stampa <code>println()</code>. I tipi primitivi, le stringhe (cenni sulla classe <code>String</code> e i metodi <code>length()</code> e <code>charAt()</code>), le variabili e i principali operatori. Input tramite la classe <code>Scanner</code> (metodi <code>next()</code>, <code>nextLine()</code>, <code>nextInt()</code>, <code>nextDouble()</code>). Cenni sui <em>packages</em> e la direttiva <code><b>import</b></code> (i packages <code>java.lang</code> e <code>java.util</code>). Esempio di un programma che legge in input una linea di testo e stampa il numero di vocali in essa contenute. Uso di <code><b>if</b>-<b>else</b></code> e <code><b>for</b></code>. <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Stringa_verticale">Stringa_verticale</a>, <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Parole_verticali">Parole_verticali</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Vocali">Vocali</a> (nella prima parte delle dispense). </BLOCKQUOTE> <BR> <B>Mercoledì 16 marzo 2011</B> <BLOCKQUOTE> <B>Laboratorio</B> Scrittura, compilazione ed esecuzione di un programma Java: il programma <code>HelloWorld</code> in Java. Esercitazione su stringhe, input, output, strutture di controllo base. Svolgimento assistito degli esercizi visti a lezione: <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Parole_verticali">Parole_verticali</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Vocali">Vocali</a>. Piccole variazioni sul tema: conteggio delle occorrenze di ciascuna vocale, verifica se due stringhe sono una l'anagramma dell'altra. </BLOCKQUOTE> <BR> <B>Venerdì 18 marzo 2011</B> <BLOCKQUOTE> Gli operatori aritmetici/logici/relazionali e il controllo del flusso (<code>if-else</code>, <code>for</code>, <code>while</code>, <code>do-while</code>, <code>switch-case</code> e l'operatore condizionale <code>( ? : )</code>) nel linguaggio Java sono direttamente derivati da quelli del linguaggio C. Metodi ricorsivi: esempio fattoriale. Alcuni metodi e campi della classe <code>Math</code> (in <code>java.lang</code>). La direttiva <code><b>import static</b></code>. Struttura di un programma Java: la direttiva <code>package</code>. Nomi semplici e nomi completi. <br> 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. <br> Definizione di una classe: campi, metodi e costruttori. <em>signature</em> di un metodo e <em>overloading</em>. Modificatori di accesso <code><b>public</b></code>, <code><b>private</b></code> e accesso ristretto al package. Differenze tra metodi/campi della classe, cioè statici, (modificatore <code><b>static</b></code>) e metodi/campi relativi agli oggetti. Creazione di oggetti: l'operatore <code><b>new</b></code> e i costruttori. Esempio: la classe <code>Studente</code>. <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Frasi_palindrome">Frasi_palindrome</a>, <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Date">Date</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Date+">Date+</a> (nella prima parte delle dispense). </BLOCKQUOTE> <BR> <B>Martedì 22 marzo 2011</B> <BLOCKQUOTE> Soluzioni degli esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Frasi_palindrome">Frasi_palindrome</a>, <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Date">Date</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Date+">Date+</a> (dispense - prima parte). <BR> <B>Esercizio</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Razionali">Razionali</a> (dispense - prima parte). </BLOCKQUOTE> <B>Mercoledì 23 marzo 2011</B> <BLOCKQUOTE> <B>Laboratorio</B> Svolgimento assistito degli esercizi proposti a lezione: <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Razionali">Razionali</a>.<br> Osservazioni su: rappresentazione canonica di un tipo di dato, invariante di tipo di dato, utilità del mascheramento della rappresentazione. </BLOCKQUOTE> <BR> <B>Giovedì 24 marzo 2011</B> <BLOCKQUOTE> Classe di esempio <code>CharRect</code> (dispense - prima parte). Le costanti e la parola chiave <code><b>final</b></code>. Discussione sui tipi: tipi primitivi, <em>tipi classe</em> e <em>tipi riferimento</em>. Comportamento rispetto ad assegnamenti e confronti. Inizializzazioni e valori di default (<code><b>null</b></code>). Classi <em>nidificate statiche</em>. Esempio relativo alla classe <code>Studente</code>. Definizione di una classe che gestisce liste di interi e implementazione tramite liste (vedi esercizio <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Liste_di_interi">Liste_di_interi</a>). Discussione circa l'importanza di ben delineare le responsabilità di una classe e di favorire l'incapsulamento. <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Scacchiera">Scacchiera</a>, <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Piramidi">Piramidi</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Pile_di_interi&stringhe">Pile_di_interi&stringhe</a> (dispense - prima parte). </BLOCKQUOTE> <BR> <B>Martedì 29 marzo 2011</B> <BLOCKQUOTE> Soluzione esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Scacchiera">Scacchiera</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_1.html#Pile_di_interi&stringhe">Pile_di_interi&stringhe</a>. Il <em>tipo array</em>: dichiarazione di variabili e creazione di array. Relazione tra i tipi array, i tipi classe e i tipi riferimento. Array multidimensionali: <em>array di array</em>, matrici triangolari. Inizializzatori di array. Argomenti dalla linea di comando. Metodi con un numero variabile di parametri. <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Duplicati">Duplicati</a>, <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Grafico_a_barre">Grafico_a_barre</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Costellazioni_di_caratteri">Costellazioni_di_caratteri</a> (dispense - seconda parte). </BLOCKQUOTE> <BR> <B>Mercoledì 30 marzo 2011</B> <BLOCKQUOTE> <b>Laboratorio:</b> Esercizi su array e matrici: 1. <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Duplicati">Duplicati</a>, 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]. </BLOCKQUOTE> <BR> <B>Giovedì 31 marzo 2011</B> <BLOCKQUOTE> <br> Raffinamento della classe <code>CharRect</code>: <em>disaccoppiamento</em> del mezzo di stampa dagli algoritmi di tessitura del rettangolo tramite l'<em>astrazione</em> di una interfaccia comune per i mezzi di stampa. Introduzione della classe <code>PrintMedium</code>. <br> Errori al runtime e le <em>eccezioni</em> (<em>exceptions</em>). Il percorso di una eccezione. Cattura delle eccezioni: <code><b>try</b> {...} <b>catch</b> () {...} <b>finally</b> {...}</code>. Lancio di eccezioni (<code><b>throw</b></code>). Eccezioni controllate (<em>checked</em>) e non controllate (<em>unchecked</em>), dichiarazione di lancio eccezioni (<code><b>throws</b></code>). <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Cascata">Cascata</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Digitando_interi">Digitando_interi</a> (dispense - seconda parte). </BLOCKQUOTE> <BR> <B>Martedì 5 aprile 2011</B> <BLOCKQUOTE> Soluzioni esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Cascata">Cascata</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Digitando_interi">Digitando_interi</a>. Tipi per dati persistenti. La classe <code>File</code> (in <code>java.io</code>): i principali costruttori e metodi, <em>abstract pathnames</em>. Esempio d'uso della classe <code>File</code>. File ad accesso sequenziale (file di testo). Lettura tramite la classe <code>Scanner</code>. Eccezione controllata (<em>checked exception</em>): <code>FileNotFoundException</code>. Scrittura tramite la classe <code>PrintStream</code> e la classe <code>FileOutputStream</code>. Esempio: classe che gestisce un file di log. <br> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Conta_file">Conta_file</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Log">Log</a> (dispense - seconda parte). </BLOCKQUOTE> <BR> <B>Mercoledì 6 aprile 2011</B> <BLOCKQUOTE> <B>Laboratorio</B> 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. </BLOCKQUOTE> <BR> <B>Venerdì 8 aprile 2011</B> <BLOCKQUOTE> Estensione di una classe (parola chiave <code><b>extends</b></code>) e discussione in relazione ai concetti di specializzazione (o raffinamento), generalizzazione e interfaccia. Ereditarietà dei metodi e campi (pubblici). Ridefinizione (<em>override</em>) dei metodi ereditati. La parola chiave <code><b>super</b></code> e suoi usi nei costruttori e nei metodi. I concetti di superclasse/sottoclasse e supertipo/sottotipo. Il <em>polimorfismo</em>: <em>dynamic binding</em> e <em>static binding</em>. Esempio di classe base, di classe estesa e di uso del polimorfismo. Gli <em>upcast</em> e i <em>downcast</em> e la relazione tipo-sottotipo per gli array. <br> Soluzione degli esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Conta_file">Conta_file</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_2.html#Log">Log</a>. <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Titoli_incorniciati">Titoli_incorniciati</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Titoli_verticali">Titoli_verticali</a> (dispense - terza parte). </BLOCKQUOTE> <BR> <B>Martedì 12 aprile 2011</B> <BLOCKQUOTE> Esempio di gerarchia di classi e suo utilizzo. Discussione circa i vantaggi offerti dall'ereditarietà e dal polimorfismo. Il modificatore di accesso <code><b>protected</b></code>. <br> La classe <code>Object</code>. L'operatore <code><b>instanceof</b></code>. Soluzione esercizio <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Titoli_incorniciati">Titoli_incorniciati</a>. <BR> <B>Esercizio</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziPPI.html#Biblioteca">Biblioteca</a> (negli <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziPPI.html">esercizi</a> di preparazione alla prova intermedia). </BLOCKQUOTE> <BR> <B>Mercoledì 13 aprile 2011</B> <BLOCKQUOTE> <B>Laboratorio</B> Ereditarietà: <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziPPI.html#Insiemi_di_anagrammi"> Insiemi di anagrammi </a> come sottoclasse di insiemi generici. </BLOCKQUOTE> <br> </BLOCKQUOTE> <br> <B>Venerdì 15 aprile 2011</B> <BLOCKQUOTE> Esempi d'uso del tipo <code>Object</code>: metodi "generici" per copiare array. Il metodo <code>copyOf()</code> della classe <code>Arrays</code> (in <code>java.util</code>). Il significato e la ridefinizione dei metodi <code>equals()</code> e <code>toString()</code>. Soluzione esercizio <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziPPI.html#Biblioteca">Biblioteca</a> <BR> <!-- <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Titoli_Object">Titoli_<code>Object</code></a> (dispense - terza parte) e gli <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziPPI.html">esercizi di preparazione alla prova intermedia</a>. --> </BLOCKQUOTE> <BR> <B>Martedì 19 aprile 2011</B> <BLOCKQUOTE> Simulazione di prova intermedia: <!-- <a href="http://twiki.di.uniroma1.it/twiki/view/Metod_prog/EO/MPeserciziEsami">esercizi</a>. --> </BLOCKQUOTE> <BR> <B>Mercoledì 4 maggio 2011</B> <BLOCKQUOTE> <B>Laboratorio</B>: soluzioni esercizi prova intermedia. </BLOCKQUOTE> <BR> <B>Venerdì 6 maggio 2011</B> <BLOCKQUOTE> Classi e metodi astratti (<code><b>abstract</b></code>). Discussione circa i motivi che favoriscono l'uso di classi astratte. Esempio d'uso di classi astratte: gerarchie <code>CharShape</code> e <code>PrintMedium</code> (nella terza parte delle dispense). <BR> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Strisce_verticali">Strisce_verticali</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Collisione2">Collisione2</a> (dispense - terza parte). </BLOCKQUOTE> <BR> <B>martedì 10 maggio 2011</B> <BLOCKQUOTE> Discussione degli esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Strisce_verticali">Strisce_verticali</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Collisione2">Collisione2</a>. Il design pattern <em>Template</em>. Esempio di uso di tale design pattern: classe che fornisce un "template" per semplici applicazioni con menu testuali. <br> Interfacce (<code><b>interface</b></code>) e il concetto di <em>contratto</em>. Implementazione (<code><b>implements</b></code>). Ereditarietà multipla. Esempio: l'interfaccia <code>StrSet</code>. <BR> <B>Esercizio</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Menu">Menu</a> (dispense - terza parte). </BLOCKQUOTE> <BR> <B>Mercoledì 11 maggio 2011</B> <BLOCKQUOTE> Laboratorio: preparazione progetto. </BLOCKQUOTE> <BR> <B>Venerdì 13 maggio 2011</B> <BLOCKQUOTE> Discussione esercizio <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Menu">Menu</a>. 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.<br> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Ricerca_prefissi">Ricerca_prefissi</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Code_oggetti">Code_oggetti</a> (dispense - terza parte). </BLOCKQUOTE> <BR> <B>Martedì 17 maggio 2011</B> <BLOCKQUOTE> Discussione esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Ricerca_prefissi">Ricerca_prefissi</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_3.html#Code_oggetti">Code_oggetti</a>. Esempio di interfaccia per insiemi di stringhe ordinati e modificabili (unione di due interfacce) e implementazione tramite liste. <br> Conversione <em>Boxing/Unboxing</em>: i tipi riferimento corrispondenti ai tipi primitivi. Il tipo <code>Number</code>. <em>Genericità</em>: variabili di tipo. Metodi generici: esempi di metodi generici e confronto con le corrispondenti versioni non generiche che usano <code>Object</code>. Tipo inferito dal compilatore. <br> <B>Esercizio</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Elementi_comuni">Elementi_comuni</a> (dispense - quarta parte). </BLOCKQUOTE> <BR> <B>Mercoledì 18 maggio 2011</B> <BLOCKQUOTE> Laboratorio: preparazione progetto. </BLOCKQUOTE> <BR> <B>Venerdì 20 maggio 2011</B> <BLOCKQUOTE> Discussione esercizio <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Elementi_comuni">Elementi_comuni</a>. 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 <code>Comparable<T></code>. Limitazione <code><b>extends</b></code> su una variabile di tipo. <br> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Minmax">Minmax</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Insiemi_generici">Insiemi_generici</a> (dispense - quarta parte). </BLOCKQUOTE> <BR> <B>Martedì 24 maggio 2011</B> <BLOCKQUOTE> Discussione esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Minmax">Minmax</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Insiemi_generici">Insiemi_generici</a>. <em>Wildcards</em>: esempi di uso per entrambe le limitazioni <code><b>extends</b></code> e <code><b>super</b></code>. Relazioni di supertipo/sottotipo per i <em>tipi wildcard</em> e i tipi parametrici. <br> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Componenti_comuni">Componenti_comuni</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Unione">Unione</a> (dispense - quarta parte). </BLOCKQUOTE> <BR> <B>Mercoledì 25 maggio 2011</B> <BLOCKQUOTE> Laboratorio: preparazione progetto. </BLOCKQUOTE> <BR> <B>Venerdì 27 maggio 2011</B> <BLOCKQUOTE> Discussione esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Componenti_comuni">Componenti_comuni</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Unione">Unione</a>. Le interfacce <code>Iterable<E></code> e <code>Iterator<E></code>. Esempio di implementazione dell'interfaccia <code>Iterable<E></code> tramite classe nidificata statica. Il <em>for-each</em>: esempi con array e con oggetti che implementano <code>Iterable<E></code>. <em>Classi locali e anonime</em>: implementazione di <code>Iterator</code> tramite classe locale e anonima. <br> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Rimuovi_array">Rimuovi_array</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Max_ripetizioni">Max_ripetizioni</a> (dispense - quarta parte). </BLOCKQUOTE> <BR> <B>Martedì 31 maggio 2011</B> <BLOCKQUOTE> Discussione esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Rimuovi_array">Rimuovi_array</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Max_ripetizioni">Max_ripetizioni</a>. Le principali interfacce e classi del framework <code><em>Collections</em></code> (in <code>java.util</code>): <code>Collection<E></code>, <code>Set<E></code>, <code>List<E></code>, <code>Queue<E></code>, <code>SortedSet<E></code>, <code>HashSet<E></code>, <code>TreeSet<E></code>, <code>ArrayList<E></code>, <code>LinkedList<E></code>, <code>Map<K,V></code> e <code>HashMap<K,V></code>. Il metodo <code>hashCode()</code> di <code>Object</code> in relazione alla ridefinizione di <code>equals</code> e le implementazioni tramite tabelle hash. Esempio di uso delle mappe (<code>Map<K,V></code>) per implementare alberi generici. <br> <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Conta_ripetizioni">Conta_ripetizioni</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Anagrammi_in_file">Anagrammi_in_file</a> (dispense - quarta parte). </BLOCKQUOTE> <BR> <B>Mercoledì 1 giugno 2011</B> <BLOCKQUOTE> Laboratorio: preparazione progetto. </BLOCKQUOTE> <BR> <B>Venerdì 3 giugno 2011</B> <BLOCKQUOTE> Discussione esercizi <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Conta_ripetizioni">Conta_ripetizioni</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/da_C_a_Java_4.html#Anagrammi_in_file">Anagrammi_in_file</a>. Interfacce grafiche: le origini di <em>AWT</em> e <em>Swing</em>. Principi di base dell'architettura di Swing/AWT: albero delle componenti e design pattern <em>model-view-controller</em> (<em>MVC</em>). Gestione degli eventi: design pattern <em>Observer</em>, "ascoltatori di eventi" in Swing/AWT, esempio per <code>JButton</code> (<code>ActionEvent</code>, <code>ActionListener</code>, <code>addActionListener()</code>). Panoramica sui principali componenti di Swing. <br> <!-- <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziSP.html">esercizi sulla seconda parte del corso</a>. -> </BLOCKQUOTE> <BR> <B>Martedì 7 giugno 2011</B> <BLOCKQUOTE> L'<em>Event Dispatch Thread</em> (<em>EDT</em>) e il fatto che Swing non è <em>thread safe</em>: schema per garantire che i componenti di Swing siano manipolati solamente nell'EDT. <br> Esempio d'uso di componenti di Swing. Implementazione di una piccola applicazione <code>Rate</code> (con interfaccia grafica) per il calcolo del tasso d'interesse annuale, preso in input il capitale, l'ammontare della rata, il numero di rate e la periodicità delle rate. Separazione tra la gestione della GUI e le operazioni sui dati. In questa versione preliminare i campi di testo non sono formattati e non ci sono controlli durante l'editing. I sorgenti commentati e la descrizione dell'applicazione sono nell'archivio JAR <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/Rate_draft.jar">Rate_draft.jar</a>. <br> <!-- <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziSP.html">esercizi sulla seconda parte del corso</a>. --> </BLOCKQUOTE> <BR> <B>Mercoledì 8 giugno 2011</B> <BLOCKQUOTE> Laboratorio: preparazione progetto. </BLOCKQUOTE> <BR> <B>Venerdì 10 giugno 2011</B> <BLOCKQUOTE> Versione migliorata dell'applicazione <code>Rate</code> 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 <code>NumberField</code> che gestisce campi di testo formattati per valori numerici: la classe <code>JFormattedTextField</code>, la definizione di un filtro per caratteri e la definizione ed uso di formattatori (<code>NumberFormat</code> in <code>java.text</code>, <code>NumberFormatter</code> e <code>DefaultFormatterFactory</code> in <code>javax.swing.text</code>). I sorgenti commentati e la descrizione dell'applicazione sono nell'archivio JAR <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPprogramma/Rate.jar">Rate.jar</a>. <br> <!-- <B>Esercizi</B> <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziSP.html">esercizi sulla seconda parte del corso</a>. --> </BLOCKQUOTE> <BR> <B>Martedì 14 giugno 2011</B> <BLOCKQUOTE> Esercizi di preparazione alla prova scritta: <!-- <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziSP.html#PrefixFree">PrefixFree</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/MPeserciziSP.html#Dipendenze">Dipendenze</a>. --> </BLOCKQUOTE> <BR> <B>Mercoledì 15 giugno 2011</B> <BLOCKQUOTE> Laboratorio: preparazione progetto. </BLOCKQUOTE> <BR> <B>Venerdì 17 giugno 2011</B> <BLOCKQUOTE> Simulazione di prova scritta: <!-- <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/simulazioneGiu2011.html">esercizi</a> e <a href="http://twiki.di.uniroma1.it/pub/Metod_prog/EO/MPeserciziEsami/simulazioneGiu2011sol.html">soluzioni</a>. --> </BLOCKQUOTE> </DIV>
This topic: Metod_prog/EO
>
WebHome
>
MPdiario
Topic revision: r108 - 2015-06-18 - RiccardoSilvestri
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback