Avviso per il progetto di Prova Finale
: I casi di test di JUnit che committate nel repository NON - e ripeto NON - devono contenere loop infiniti o input da parte dell'utente, ma devono essere eseguibili in maniera AUTOMATICA e terminare. Assicuratevene PRIMA di committare eseguendo una run completa di maven. Non rispettare questo requisito causa grossi problemi nella compilazione dei progetti su Hudson e di conseguenza anche la generazione dei report di Sonar.
JML: Astrazioni Procedurali e sui Dati
Astrazioni
Procedurali (completa)
Astrazioni
sui dati: Complex e
Matrix
Prova Finale: Materiale Aggiuntivo
Slide di riferimento
sulla serializzazione.
Configurazione di
rmiregistry e di un server
rmi in Eclipse.
Esempio
di gestione specifica di
sottotipi sfruttando il
polimorfismo invece del
downcasting (per esempio, eventi).
Esercitazione su programmazione di Rete
Slide
su programmazione di
rete
Soluzioni
degli esercizi.
Esercitazione su Multithreading
Slide
su thread e
concorrenza in Java
Soluzioni
degli esercizi.
Esercitazione su Design Pattern
Slide
con
esempi su design patterns
Codice
che implementa l'esempio
della calcolatrice
usando in maniera piu'
organica il pattern
mvc. L'esempio mostra
anche l'uso di factory
methods e del
singleton.
Esercitazione su UML
Descrizione
esercizi
Scarica
le soluzioni ai primi
due esercizi in formato pdf
oppure papyrus.
Quest'ultimo zip contiene
anche un file di profilo con
due stereotipi per annotare
le classi con i ruoli dei
design pattern che
implementano.
Esercitazione
sulle collection
Esercitazione Extra su Swing
Descrizione
esercizi
Scarica
il codice
dell'esercizio sulla
calcolatrice.
Scarica
il codice
dell'esercizio
aggiuntivo sulla
selezione di un ordine
di Pizza.
:
Le classi modello di
entrambi gli esercizi
non sono state
testate volutamente, e
alcune funzionalita'
non sono nemmeno
testabili. E' un buon
esercizio scrivere dei
casi di test per
queste classi,
modificandole in modo
da renderle completamente
testabili. Infine, un
altro buon esercizio
per capire se le cose
siano state fatte bene
e' pensare ad una
interfaccia testuale
da linea di comando
anziche' una
UI. Riuscite ad implementarla?
Esercitazione di Prova Finale 3
Scarica
la seconda parte delle
slide su Swing.
Scarica
una piccola demo su
swing.
:
Ho rimosso dalle slide gli esempi sulla
parte sui Listener, visto che il codice non era chiaro e pulito.
Viste le necessita' che avete espresso anche con il docente, ho preparato una esercitazione aggiuntiva
(che si terra' domani lunedi' 8 Aprile)
su swing che copre attraverso esempi concreti i contenuti
delle slide e un minimo di aspetti di progettazione che
pensavo di fare piu' avanti.
Esercitazioni di Prova Finale 1 e 2
Tutorial
su Javadoc.
Scarica
le slide su maven.
Scarica
le slide su version control.
Scarica
la prima parte delle
slide su Swing.
: Scarica
il codice sorgente
degli esempi
sulla parte di
documentazione
(piu' completa rispetto
alla versione vista ad
esercitazione). Provate
a scrivere dei casi di
test per il metodo
getRoots(int degree)
di Complex. Come
fareste?
Esercitazione 4
Nella terza esercitazione abbiamo discusso di testing e di test driven development.
Scarica le slide.
Esercitazione 3
Nella terza esercitazione abbiamo visto esercizi sull'ereditarieta'. Ho aggiunto alcune considerazioni piu' precise su alcuni aspetti rispetto alle slide presentate a esercitazione.
Scarica le slide.
Esercitazione 2
Nella seconda esercitazione abbiamo visto come si gestiscono i casi eccezionali in Complex e ComplexSet. Attenzione: nelle slide che ho presentato ad esercitazione c'era un refuso sull'utilizzo delle eccezioni unchecked. In questa versione e' stato corretto: grazie.
Scarica le slide.
Un esempio divertente di uso delle eccezioni.
Esercitazione 1
Nella prima esercitazione abbiamo visto come si implementano due semplici tipi di dato astratto, Complex e ComplexSet.
Complex
Un tipo di dato astratto abbastanza semplice che rappresenta numeri complessi. La scelta per la quale la rappresentazione non e' mutabile sara' piu' chiara man mano che andremo avanti nel corso.
ComplexSet
Rappresenta un insieme (con una dimensione massima prefissata) di numeri complessi, confrontati a meno di un determinato errore. In questo caso, lo stato interno cambia attraverso l'invocazione di due metodi, add(Complex) e remove(Complex).
Scarica il codice sorgente (parzialmente completo) dell'esercitazione. Il codice contiene un po' di metodi non implementati e di cose da fare aggiuntive su cui potete esercitarvi. Alcune le discutero' all'inizio della prossima esercitazione. Il design di queste due classi non e' perfetto a causa del fatto che alcuni concetti ancora non sono stati spiegati a lezione. Pian piano aggiungero' dettagli non appena gli argomenti saranno trattati.