martedì 24 aprile 2018

Lezione del 24/04/2018 (ER): Eccezioni

Eccezioni. Casi tipici nella programmazione Java. Eccezioni notevoli. Perché non restituire un valore d'errore. Vantaggi e svantaggi delle eccezioni. Cosa gestire e cosa non gestire con le eccezioni. Il blocco try-catch-finally. La politica catch-or-declare: gestire o ignorare le eccezioni. Creare eccezioni personalizzate. Le parole chiave throw e throws. La classe Throwable. La gerarchia delle eccezioni in Java. Le classi Exception e Error. Eccezioni checked e unchecked. Esercizi (da svolgere a casa): SequenzaAGradini, FloppyDisk, Dizionario e Mappa, Catena di volontari.

venerdì 13 aprile 2018

Lezione del 13/04/2018: esercizi di preparazione all'esonero

Lezione importante di preparazione all'esonero. L'esercizio EssereVivente, con eccezioni, classi e metodi astratti, polimorfismo, ecc. Implementazione di interfacce (esercizio Cercabile). Introduzione dell'interfaccia Set e sua implementazione HashSet. Importanza dell'implementazione di equals e hashCode (es. Tupla2) in relazione al funzionamento di List e Set. Metodo Objects.hash per calcolare l'hashCode degli oggetti di una classe. Classi interne e anonime, interfacce funzionali e lambda. Aggiungere la funzionalità di comparabilità durante l'implementazione di una classe (Comparable<T>) e dopo aver chiuso il codice di una classe (l'interfaccia funzionale Comparator<T>). Ordinamento mediante Comparator: Collections.sort(lista, comparator) e List.sort(comparator). Esempi di espressioni lambda. Utilizzare le espressioni lambda per implementare un comparator e per implementare funzioni arbitrarie (es. FunzioniSuInsieme).

mercoledì 11 aprile 2018

Lab dell'11/04/2018: iterabilità (Iterable e Iterator), comparabilità (Comparable vs. Comparator), classi interne, classi annidate, classi anonime, interfacce funzionali, lambda

Esercizi su classi interne: l'esempio della lista linkata di elementi interi implementati mediante classe statica annidata. Iterabilità: iteratore un testo per righe; iterare una lista linkata implementando l'interfaccia java.lang.Iterable e l'interfaccia java.util.Iterator mediante classe interna o classe anonima (sua definizione). Le interfacce Comparable e Comparator. Intefacce funzionali. Espressioni lambda.

martedì 10 aprile 2018

Lezione del 10/04/2018 (8.15-10.30+12.50-14.10): metodi e classi final; interfacce. Iterabilità mediante Iterator e Iterable.

Metodi e classi final. Interfacce in Java: dichiarazione, implementazione. Esempio: Iterabile. Differenza tra interfacce e classi astratte. Ereditarietà multipla: il problema del diamante. Interfacce notevoli. Esercizio: MyString con Iterator e Iterable. Interfacce notevoli. Classi interne e anonime.

venerdì 6 aprile 2018

Lezione del 06/04/2018: polimorfismo e classe Object

Polimorfismo: definizione, esempi e casistiche. Esempi: la classe Impiegato, ImpiegatoStipendiato e ImpiegatoACottimo. La parola chiave super per accedere a metodi e campi della superclasse. L'operatore instanceof. Downcasting e upcasting: differenze ed effetti sull'interfaccia pubblica. La classe universale Object e i suoi metodi principali: clone, equals, getClass, hashCode, toString. Sovrascrivere i metodi toString, equals e clone.


mercoledì 4 aprile 2018

Lab del 04/04/2018: espressioni matematiche, debugger in Eclipse, generazione javadoc, moduli Java 9, ArrayList e suoi metodi, Javafx e Jetris

Laboratorio molto denso: esercizio Espressioni Matematiche per verificare la conoscenza di ereditarietà e polimorfismo, con due soluzioni: mediante sottoclassi di EspressioneBinaria e mediante enumerazioni di EspressioneBinaria. Debugger in Eclipse.  enerazione automatica della documentazione javadoc. Brevissima introduzione ai moduli Java 9: module-info.java, parole chiave module, exports, requires, requires transitive. ArrayList e i suoi metodi, javafx e Jetris. Il costrutto "for each".


mercoledì 28 marzo 2018

Lab del 28/03/2018: esercizi sull'ereditarietà

Esercizi (dalle diapositive): BarraDiEnergia, ListaOrdinataDiInteri, Tetris.

Lezione del 27/03/2018: ereditarietà

Una lezione molto molto importante sull'ereditarietà: abbiamo introdotto il concetto di ereditarietà, di classi e metodi astratti, parole chiave this e super nei costruttori. Funzionamento dei costruttori nella gerarchia di ereditarietà. Differenza tra overriding e overloading. Visibilità di campi e metodi: pubblica, privata, protetta e di package. Introduzione a JUnit.


Lezione del 23/03/2018: prova!

Ci siamo messi alla prova!