Titolo: Object Rider
Licenza: LGPL
Autore: Gabriele Giansante
Versione: 0.1.2.20050314
Piattaforma: Qualsiasi piattaforma con supporto Java
Prima di scaricare, leggere i termini della licenza!
objectRider.0.1.2.20050314.jar
objectRider.0.1.2.20050314.src.jar
objectRider.0.1.2.20050314.docs.zip
Cos'e' "Object Rider"
"Object Rider" e' in pratica una JDialog, inseribile in qualsiasi punto della propria applicazione, capace di
visualizzare graficamente, attraverso una struttura ad albero, le informazioni relative a qualsiasi tipo oggetto.
Si tratta principalmente di uno strumento di debugging, dal momento che rende possibile navigare attraverso tutti i
costruttori, metodi e campi "accessibili" di un qualsiasi oggetto dato.
Le caratteristiche principali sono:
- Visualizzazione costruttori, metodi e campi accessibili
- Visualizzazione contenuto dei campi accessibili
- Visualizzazione risultato della chiamata ai metodi senza parametri
- Possibilita' di navigazione praticamente infinita attraverso gli oggetti che rappresentano i campi ed i risultati dei metodi
- Riconoscimento di "Map", "Collection", "Iterator", "Enumeration" e loro derivati, con visualizzazione (e navigazione)
del contenuto in maniera facile e veloce
- Grande semplicita' di utilizzo ed integrazione nella propria applicazione (2/3 righe di codice)
In pratica non ci sono limiti nella navigazione attraverso le istanze di qualsiasi classe.
La dialog e' ancora in fase sperimentale, ma ampiamente ed efficacemente utilizzabile.
Perche' usare "Object Rider"
Usare "Object Rider" significa facilitarsi molti compiti in fase di debugging di un'applicazione grafica, dal momento che e'
possibile verificare a runtime il contenuto di qualsiasi oggetto in precedenza specificato.
Non si tratta, infatti di una funzionalita' aggiunta ad un'applicazione grafica, ma di un vero e proprio strumento di
debugging, potente e facile da usare. Dato lo scarsissimo utilizzo di risorse di sistema (memoria, CPU, ecc.) e' ottimo
nei casi in cui si abbia necessita' di verificare il contenuto di oggetti dalla struttura potenzialmente molto complessa,
potendo sostituire in alcuni casi alcune funzionalita' tipiche del debugging (watching, tracing, ecc.).
Il futuro di "Object Rider"
In futuro, dipendentemente dal mio tempo libero (che e' sempre molto poco...), potranno esserci
- sviluppi e miglioramenti dell'interfaccia grafica, con l'aggiunta di funzionalita' come la limitazione ai soli campi,
ai soli metodi, ecc.
- la possibilita' di interpretare mappe, iteratori, insiemi (Enumeration e Collection) sia come semplici oggetti
(ossia mostrandone tutti i campi, i metodi, ecc.), dove l'attenzione e' focalizzata sulla struttura, sia come oggetti particolari
(modalita' attuale), dove l'attenzione si focalizza sui dati e non sulla struttura.
- la produzione di un output di testo
- la possibilita' di effettuare il refresh delle informazioni (attualmente e' necessario chiudere la finestra e ricrearla)
- ottimizzazioni sulle prestazioni e sul codice
- correzioni di bug, se ne trovo e se me ne vengono segnalati
- realizzazione del Javadoc
- supporto saltuario e improbabile (nel senso che vengono prima gli altri impegni) a coloro che intendono usare seriamente
la libreria (non ci prendo una lira... ehm... un euro).
Sicuramente il futuro non prevede
- alcuno sforzo per rendere il sistema uno standard di sviluppo: l'ho scritto per piacere ed utilita' personali!
- alcun impegno costante e regolare nella scrittura di codice
- alcuna risposta a email provocatorie del tipo "ma che hai scritto...", "non capisci niente...", "che e' sto schifo...",
fatica inutile!
Esempio di utilizzo
Usare la libreria e' veramente semplice. Una volta inserita nel "classpath" dell'applicazione, e' possibile visualizzare
l'albero di navigazione su un particolare oggetto nel seguente modo:
import com.feelinglinux.objectrider.swing.dialogs.ObjectRiderDialog;
...
/*
* Creazione dialog. "myObject" e' l'oggetto da visualizzare al momento
* in cui viene chiamato il metodo "show()".
*/
ObjectRiderDialog dialog = new ObejctRiderDialog(<myObject>);
//Visualizzazione della dialog
dialog.show();
...
L'avevo detto che e' veramente facile... he he he...
Ovviamente e' possibile inizializzare la dialog e visualizzarla su comando, come, ad esempio, a seguito della pressione
di un "bottone". Nel paragrafo successivo verra' data una descrizione sommaria di cio' che viene visualizzato.
N.B. Richiede il JDK 1.4.x o successivo!
Screenshot e spiegazione output
A parole e' difficile rendere l'idea della potenza di questo strumento.
E' necessario procedere con uno screenshot del "navigatore" in azione!
Segue una descrizione sommaria di cio' che viene visualizzato.

I due screenshot sono stati presi sull'analisi di uno degli oggetti di test
inseriti nel package
"com.feelinglinux.objectrider.swing.dialogs.test" |
 |
Come si puo' vedere, risulta navigabile praticamente tutto, dagli array, alle mappe, ai risultati dei metodi senza parametri.
Le icone relative a metodi, campi e costruttori pubblici, rispecchiano (con le dovute eccezioni) piu' o meno quelle usate nei
vari tool di sviluppo Java ed UML (anche se sarebbe meglio usare per l'ObjectRider la dizione "accessibile" invece di
"pubblico"). Fra le eccezioni vi sono
che sta ad indicare un oggetto "artificiale", ovvero costruito per facilitare la visualizzazione di particolari dati (vedi contenuto della mappa come coppia chiave/valore invece che in termini di metodi e campi)
che "avverte" dell'impossibilita' di eseguire il relativo metodo a causa di
un'eccezione secondo il seguente schema: !targ!=InvocationTargetException; !argm!=IllegalArgumentException;
!accs!=IllegalAccessException.
Nel caso dei costruttori viene visualizzato il nome della classe seguito dai parametri di invocazione.
Il risultato e' una classe "Constructor" (reflection) contenente le informazioni sul costruttore.
I metodi seguono piu' o meno lo standard
<nome metodo>(<parametri>):<tipo risultato> = <valore>
Il valore ha senso solamente per quei metodi che non hanno bisogno di parametri per l'invicazione. Il risultato e' presentato
sempre sotto forma di oggetto (i tipi primitivi vengono "wrappati" con i vari "Integer", "Boolean", "Byte", ecc.) a sua volta
navigabile.
I campi possono essere di tipo primitivo, di tipo array o di tipo oggetto. Nel primo caso (si intravede appena alla fine del
primo screenshot) ne viene visualizzato il nome, il tipo ed il valore (senza ulteriori figli). Nel secondo caso viene indicato
il tipo base, seguito dalla profindita' ("[][][]...") e dal valore (in termini di riferimento dell'oggetto); il primo figlio
indica la dimensione dell'array, i successivi sono gli elementi dell'array, con a fianco la numerazione solo se si
tratta di tipi primitivi.
|