MokaHints
La classe non è acqua..
di
Andrea Trentini
Cosa è bene mettere in ogni classe realizzata


Ogni classe che uno sviluppatore produce dovrebbe contenere una serie di "attributi" (anche nel senso di metodi ;-) che fanno comodo in fase di sviluppo. 
Problema
Quando creo una classe ex novo vorrei mettergli dentro un po' di "roba" in modo tale da potermi aiutare nel suo utilizzo e nel debugging successivo.
Domanda: che servizi standard mi deve offrire una classe? (indipendentemente dai servizi offerti dalla sua semantica) Per intenderci: se dovessi costruirmi un file "scheletro" di classe da usare ogni volta che ne invento una, quali metodi/attributi ci metto dentro?

Vi racconto quelli che metto io, a voi le aggiunte.

toString()
Utilissimo metterlo (cioè "override"arlo), dato che quello di default stampa <nomeclasse>@<hascode> e per cui non è che dia proprio una grande quantità di informazioni.
Di solito è bene fargli stampare almeno i valori degli attributi più importanti (se non tutti) in una forma leggibile ma compatta (altrimenti avete delle "print di debug" chilometriche).
Inoltre è comunque bene chiamare (e quindi stampare) il toString() della superclasse chiamando super.toString() in qualche punto "opportuno" (a voi la scelta).

main() di testing
Metto sempre un main di testing in ogni classe (anche se non è la classe principale del prodotto).
In tale main metto almeno una istanziazione della classe stessa e qualche chiamata di metodo (per stressare/testare la classe appunto).
Il contenuto del main di testing dovrebbe essere il più possibile INDIPENDENTE dall'esistenza di altre classi, anche se non sempre è possibile. Il senso è quello di testare una classe senza introdurre (potenzialmente) errori dovuti ad altri file sorgente.

JavaDoc
Guai a non mettere la javadoc (i commenti speciali "/**    */") per le classi, gli attributi (anche quelli privati) e i metodi. Questo per abituarvi a pensare e ad esporre al "pubblico ludibrio" le vostre pensate ;-)
Ma anche perchè ci potete mettere dentro dei "tag" (non html) per farvi ricordare parti non terminate e cose del genere...
Io ad esempio metto:

/**
[TODO!!! ritorna un "dummy", mettere implementazione vera!!!]
*/

public int metodo(){
return 6;
}

...per ricordarmi (in fase di lettura della documentazione) che mancano dei pezzi (ora implementati alla buona per fare delle prove).
Inoltre  quando avrò tempo (cioè mai ;-), cercherò di implementare un generatore di "[TODO] list" simile al generatore della "deprecated list" già presente in javadoc... chi vuol contribuire... ;-)

Eccezioni
Non nel senso di "eccezioni alle regole", ma nel senso di cosa mettere nei "catch"...
try{
 ...
}
catch(QualcheEccezione e){
  // meglio questo !
  e.printStackTrace();
  // o almeno...
  System.out.println(e);
}
Non lasciate MAI vuoti i corpi dei "catch", altrimenti potreste avere degli errori a runtime e non ve ne accorgereste nemmeno!

MokaByte Web  1999 - www.mokabyte.it

MokaByte ricerca nuovi collaboratori. 
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it