Diario delle lezioni

  1. 4/3/13. Presentazione del corso. Svolto esercizio 27/3/08, #4. Distinzione tra eccezioni verificate e non. Richiami di aritmetica floating-point. Conversioni implicite tra tipi base. Il type checking.
  2. 7/3/13. Le relazioni di sottotipo e di assegnabilità. L'operatore instanceof. Regole dell'overriding. La classe Class. L'early binding. Assegnato esercizio 30/1/08, #4.
  3. 11/3/13. Il late binding. Esempi di binding dinamico. Svolto esercizio assegnato. Le classi wrapper e l'autoboxing. Assegnato esercizio 27/11/09, #2.
  4. 14/3/13. Uguaglianza tra oggetti e il metodo equals. Metodo equals ed ereditarietà.
  5. 18/3/13. Contratto di un metodo e l'approccio Design by Contract. Dichiarare un contratto con JavaDoc. Contratti ed ereditarietà: il principio di sostituzione di Liskov e la regola contro-variante. Svolto esercizio assegnato. Classi interne. Classi locali.
  6. 21/3/13. Classi anonime. Liste concatenate e iteratori. Il pattern ITERATOR. Assegnato esercizio 21/04/2008, #1 (Triangolo).
  7. 25/3/13. Contratto dell'interfaccia Iterator. Clonazione di oggetti. Regole della visibilità protected. Svolto esercizio assegnato. Assegnato esercizio 21/4/08, #4 (CrazyIterator).
  8. 3/4/13 (mercoledì). Lezione straordinaria in aula C05, ore 14:15-16:15. Confronto e ordinamento tra oggetti. Le interfacce Comparable e Comparator. Proprietà di un ordinamento. Metodi per l'ordinamento di array e liste. Svolto esercizio 18/6/12, #1 (Point). Assegnato esercizio 14/9/10, #1 (Time).
  9. 4/4/13. Interfacce grafiche. I pattern Observer, Strategy e Decorator. Il pattern architetturale Model-View-Controller. Svolti esercizi CrazyIterator e Time. Assegnato esercizio 27/4/06, #3 (BinaryTreePreIterator).
  10. 16/4/13 (martedì). Lezione straordinaria in aula C01, ore 8:40-10:40. Classi enumerate. Assegnato esercizio 19/6/09, #1 (Cardinal). Introduzione alle classi parametriche. Svolto esercizio assegnato.
  11. 18/4/13. Classi e metodi parametrici. Introduzione alla type inference. La versione parametrica di Iterator e Iterable. I pattern COMPOSITE, TEMPLATE METHOD e FACTORY METHOD.
  12. 22/4/13. Il ciclo for-each. La libreria Java Collection Framework. Le interfacce Collection, List, Queue, Set e SortedSet. Le classi LinkedList, ArrayList, HashSet e TreeSet. Coerenza tra equals e hashCode. Svolto esercizio assegnato (Cardinal).
  13. 29/4/13. Prova intercorso.
  14. 2/5/13. Parametri di tipo con limiti superiori. JCF: le mappe. Interfacce Map e SortedMap, classi HashMap e TreeMap. Esempi (isInjective). Svolto esercizio 3/9/12, #4 (Bijection). Assegnato esercizio 18/6/12, #3 (BoundedMap).
  15. 6/5/13. Discussione sulla prova intercorso. Il parametro di tipo jolly. Limiti superiori e inferiori per il tipo jolly.
  16. 9/5/13. Criteri per la scelta dell'interfaccia migliore di un metodo. Svolto esercizio assegnato.
  17. 13/5/13. Implementazione dei tipi parametrici: la cancellazione. Conseguenze della cancellazione sull'uso dei parametri di tipo. Svolto esercizio 19/2/09, #3 (interleave). Assegnati esercizi 7/2/11, #4 e 19/6/09, #4.
  18. 16/5/13. Aspetti significativi della classe Class. Svolto esercizio Le classi Method, Field e Constructor. Assegnato esercizio "reset" e "superclasse".
  19. 20/5/13. Introduzione al multi-threading in Java. Aspetti significativi della classe Thread. L'interfaccia Runnable. La disciplina delle interruzioni. Svolto esercizio "Interruptor". Assegnato esercizio 27/3/08, #3 (delayIterator).
  20. 23/5/13. Le annotazioni. Svolti esercizi "Mystery thread", "RunOnSet" e "delayIterator". Sincronizzazione tra thread. La parola chiave synchronized. Assegnato esercizio "concurrentFilter".
  21. 27/5/13. Scelta del tipo dichiarato di un riferimento. Le condition variable. Metodi wait, notify e notifyAll. Problema produttori-consumatori. Svolti esercizi "concurrentFilter" e "VoteBox". Assegnato esercizio "executeInParallel".
  22. 30/5/13. Code bloccanti. Introduzione al Java Memory Model (JMM).
  23. 3/6/13. Atomicita' e visibilita' secondo il JMM.
  24. 6/6/13. Riepilogo ed esercitazione: enumerazioni, scelta dell'interfaccia, multi-threading.