Programmazione Java Avanzata Concetti di Java, parte 2 Ing. Giuseppe D'Aquì
Testi Consigliati Java ( R. Liguori, P. Liguori), O'Reilly Hops Tecniche Nuove (2008) Java Tutorials [http://download.oracle.com/javase/tutorial/java/] SVN Book [http://svnbook.red-bean.com/nightly/en/index.html] Git User Manual [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html]
Java Annotations Dalla versione 5.0 Java ha introdotto dei meccanismi per inserire metadati descrittivi nel codice stesso Questi metadati (dati a proposito dei dati) possono essere usati per rendere espliciti alcuni comportamenti Siccome sono immersi nel codice, esistono analizzatori in grado di adoperarli per semplificare il lavoro si sviluppo o potenziare il Design By Contract Es. @Override, @Deprecated Molti framework definiscono annotation proprie
Annotations predefinite @Override Dichiara che il metodo successivo deve prevalere sul metodo della superclasse @Deprecated Dichiara che il metodo successivo è deprecato @SuppressWarnings Dichiara che i warning di compilazione per il metodo successivo devono essere trascurati
Annotations predefinite 2 @SuppressWarnings Può avere uno di due argomenti: deprecation - rimuove i warning sulle funzioni deprecate unchecked - rimuove i warning sull'uso dei Generics
Java Reflection La Java Reflection Api è un insieme di classi e funzionalità che vengono usate per conoscere e manipolare gli oggetti e i metodi attualmente in esecuzione Per esempio è possibile aggiungere o eliminare metodi alle classi a run-time Es. obj.getclass() Può essere usato per rendere il codice illeggibile (spaghetticoding) Viene usato più proficuamente per realizzare funzioni di analisi del codice, usate dagli IDE e dai framework
Controllo di Versione Version Control System (VCS) Una branca del Software Change/Configuration System (SCM) Strumenti che permettono di verificare, per la modifica di un software: Cosa Quando Perché
Controllo di Versione: scopi Automatizzare la fase di build e shipping/deployment Collaborazione Rendere omogenei i processi di sviluppo di differenti team nella stessa azienda Documentare le modifiche Analizzare e correggere le regressioni
Controllo di Versione: concetti Ogni sviluppatore effettua una copia locale del codice (checkout), su cui effettua le modifiche Una volta terminato il lavoro, può verificare i punti cambiati tramite diff Se le modifiche vanno bene può spostarle su un repository (deposito del codice) tramite commit
Controllo di Versione: concetti 2 È possibile definire linee di sviluppo tramite un'operazione detta branching Se più sviluppatori stanno modificando la stessa parte del software, si devono integrare le tali modifiche con un merge
VCS Centralizzati Un unico repository I client hanno ciascuno una copia locale che sincronizzano con il server all'inizio e alla fine del lavoro Il server gestisce l'autenticazione e i permessi Repository Server RCS Client Client Client Copia Locale Copia Locale Copia Locale
VCS Centralizzati: Pro e Contro Pro: Il codice pulito rimane in un unico luogo, quindi il suo backup è più semplice Ogni sviluppatore ha responsabilità di integratore (ognuno può risolvere i propri problemi di integrazione) Contro: Non si possono salvare le modifiche non complete Ogni sviluppatore ha responsabilità di integratore (un commit di un codice non perfetto può causare danni a tutto il team)
Subversion Subversion (in breve SVN) è un progetto della Apache Software Foundation per il Controllo di Versione Centralizzato Sostituisce l'ormai obsoleto Concurrent Version System (CVS) Sebbene si stia diffondendo il modello distribuito, SVN esiste ancora in molte aziende Repository Open Source famosi: Sourceforge Google Code
Esercitazione http://sourceforge.net/projects/win32svn Subclipse TortoiseSVN gdata-api-client
VCS Distribuiti Ogni sviluppatore ha il proprio repository Ogni repository è indipendente Per convenzione si definisce un master repository nel quale viene inserito il codice funzionante e integrato DVCS Repo1 Master Repository DVCS DVCS Repo2 DVCS Repo3
VCS Distribuiti: Pro e Contro Pro: Non c'è bisogno di essere in sede Non c'è il rischio che un commit di un altro sviluppatore blocchi il nostro backup Contro: Ogni repository ha bisogno di essere conservato tramite backup L'integrazione delle varie linee di sviluppo deve essere coadiuvata da strumenti esterni di collaborazione (wiki, bug tracking, documentazione, etc) o da sviluppatori dedicati
Git È il più famoso DVCS Progettato per lo sviluppo del kernel Linux Facilita la creazione di branch e i successivi merge Per Eclipse: EGit Repository Open Source famosi: GitHub Gitorius Altri DVCS diffusi sono Mercurial, Bazaar
Eclipse Debug Java Debug serve per individuare una porzione di codice affetta da errori Eclipse possiede al suo interno strumenti per il debug di codice Java (e di altri linguaggi)
Eclipse Debug Java 2 Funzionalità principali: Breakpoint Step-by-step Visualizzazione variabili
Eclipse Refactoring Il Refactoring è una modifica al codice che non punta a modificare la funzionalità del software, ma la sua architettura interna Per esempio, l'azione di rinominare una classe o una funzione I principali refactorings sono stati analizzati da Martin Fowler nel libro omonimo
Eclipse Principali Refactoring Rename Move Encapsulate field Extract method Extract Class Pull up/push Down
Serializzazione La Serializzazione, in Java, è la trasformazione di un oggetto nella sua rappresentazione binaria Un oggetto serializzato può essere salvato su disco, su database, inviato via internet etc Gli oggetti, per essere serializzabili, devono implementare l'interfaccia Serializable
Serializzazione 2 Ogni oggetto serializzabile deve avere una variabile membro serialversionuid È una sorta di hash che serve a controllare che non vengano deserializzati oggetti di versioni diverse Si possono utilizzare gli oggetti ObjectInputStream e ObjectOutputStream