Il problema
si pone, innanzitutto, nella presentazione del programma stesso, poiché
non sempre l’utente finale ha un’idea precisa di tutte le funzionalità
a disposizione. Risulta quindi utile poter fornire un supporto valido,
ed allo stesso tempo semplice, per l’utente che illustri le potenzialità
dell’applicazione e il modo per ottenerle. Questo perché non risulta
sempre chiaro, specialmente all’utente inesperto, "come" effettuare una
certa procedura o come ottenere un certo risultato dal programma.In questo
senso, JavaHelp è uno strumento molto utile per la creazione di
help in linea, in modo particolare per applicazioni Java.
Cos’è
JavaHelp?
JavaHelp è
un insieme di API e, allo stesso tempo, anche un help system scritto interamente
in Java e creato "su misura" per il linguaggio Java. Quest’ultima caratteristica
di JavaHelp lo rende particolarmente interessante: il fatto di essere stato
stato completamente progettato e realizzato secondo la "filosofia" di Java,
gli permette di ereditarne i benefici, primo tra tutti la portabilità:
infatti è possibile pensare di realizzare help e distribuirli tramite
World Wide Web disinteressandoci completamente della piattaforma di destinazione,
su qualsiasi ambiente che disponga di una JVM (Java Virtual Machine) o
del JRE (Java Runtime Environment).
Il sistema JavaHelp
permette la realizzazione di un help in linea con la capacità di
navigare, cercare e visualizzare le informazioni rendendo più semplice,
per l’utente finale, la comprensione dell’applicazione e delle sue funzionalità.
Il sistema di
help utilizza un’intelligente combinazione di HTML 3.2 e XML per rendere
"user friendly" l’accesso alle informazioni, e per creare Table Of Contents
(TOC), indici, e modalità di ricerca di un argomento.
Il sistema permette
anche la ricerca sul client o sul server (in particolar modo per le applicazioni
industriali nelle quali le informazioni sono residenti su in server di
grandi dimensioni) e comprende sistemi avanzati quali custom viewers, navigators
e motori di ricerca.
In aggiunta,
vengono forniti anche strumenti per la realizzazione di help contenenti
anche finestre di pop-up, collegamenti "see also", glossari, tabelle, immagini,
suoni, animazioni e video. L’unico strumento non ancora disponibile sono
le piccole finestre pop-up "what is this?".
A cosa può
servire JavaHelp?
Il sistema JavaHelp
fornisce, quindi, uno strumento in più agli sviluppatori Java per
creare help in linea per:
-
Componenti JavaBean.
-
Applicazioni (attraverso
il network oppure in locale).
-
Applet.
-
Desktops.
-
Pagine HTML.
E’ bene ricordare
inoltre che JavaHelp può essere utile anche a chi sviluppa in linguaggi
diversi (come il C++), tramite la creazione di un help server: JavaHelp
è stato infatti studiato per supportare accessi remoti via network
e, come vedremo più avanti, anche per essere utilizzato come help
server.
In tal modo
si possono facilmente realizzare sistemi help distribuiti come se fossero
semplici help in locale, caratteristica questa che non si riesce ad ottenere
facilmente tramite l’utilizzo di sistemi di realizzazione di help in linea
forniti con altri linguaggi.
JavaHelp è,
quindi, utilizzabile in molteplici situazioni: dalla più semplice
che si propone solamente di creare un punto informazioni slegato da un’applicazione,
a soluzioni più complesse come applicazioni tramite network o help
server.
Le Caratteristiche
di JavaHelp.
Le caratteristiche
principali di JavaHelp sono le seguenti:
-
Help Viewer: una
finestra che consiste in una toolbar, in un content pane e in un navigation
pane. Il content pane utilizza HTML 3.2 come formato per la visualizzazione
delle informazioni. In quest’area possono essere inoltre inclusi degli
applet per aggiungere ulteriori funzionalità o animazioni. Il Navigator
pane consiste di un’interfaccia grafica che permette all’utente di spostarsi
dalla Table of contents, agli indici alla visualizzazione a tutto testo.
-
Table of contents
(TOC): consiste nella visualizzazione degli argomenti contenuti nell’help
tramite una struttura gerarchica espandibile o collassabile. Supporta un
numero illimitato di livelli gerarchici e fusioni (merging) di più
TOCs. Segue gli standard World Wide Web Consortium (W3C).
-
Indici: supporta
il merging di più indici.
-
Full-text-search:
è studiato per essere flessibile e configurabile. Supporta una sintassi
per le query in linguaggio naturale. Il motore di ricerca può risiedere
o sul client o sul server.
-
Compressione e incapsulamento:
il sistema JavaHelp permette di comprimere e incapsulare l’intero sistema
di help in un solo file JAR (Java ARchive).
-
Embeddable help
windows: le finestre di help (singole o in combinazione) possono essere
incluse direttamente nell’interfaccia dell’applicazione.
-
Customization: Le
API di JavaHelp sono studiate per permettere la massima flessibilità
nel migliorare ed estendere l’interfaccia utente e le funzionalità
in base alle richieste. Le modalità più comuni con cui il
sistema JavaHelp può essere esteso, includono custom navigator,
motori di ricerca, e HTML viewer.
-
Context Sensitive
Help: è fornito con JavaHelp API tramite lo Swing Toolkit della
JFC (Java Foundation Classes). Le JavaHelp API supportano anche l’ID mapping.
-
Possibilità
di merging: Le JavaHelp API forniscono un meccanismo di supporto che permette
la fusione di diversi componenti che contengono le informazioni dell’help
prima di essere presentate all’utente. Questo meccanismo può essere
applicato ai TOC, agli indici ed ai database di ricerca.
-
Aggiornamento automatico:
il software JavaHelp permette l’aggiornamento dell’help in linea di un
programma, dopo essere stato realizzato, rendendo possibile la sostituzione
dell’intero sistema di help o soltanto di una parte di esso (se distribuito
tramite diversi file).
La struttura
di JavaHelp
La specifica
JavaHelp utilizza i concetti Swing, è basata sulla piattaforma JDK
1.2 ed è distribuita come una standard extension. Il JDK 1.2 fornisce
alcune caratteristiche utili per un help in linea quali un maggior set
di API che include suoni e grafica 2D e 3D ed il protocollo jar: .
I componenti
della GUI (Graphical User Interface) di JavaHelp, seguono le metodologie
di progettazione Swing, che forniscono un architettura model-view-controller
e il modello di delegazione ai componenti. Il controllo Swing, agisce come
interfaccia principale per lo sviluppatore. Tutti i componenti dell’interfaccia
grafica sono controllati da un oggetto JFC (Java Foundation Classes).
Quando un nuovo
componente Swing è creato, questo richiede all’UIFactory di creare
un oggetto ComponentUI. Uno Swing control, in seguito, delega i processi
di rendering, sizing e le varie operazioni di input output al ComponentUI
stesso.
I metodi installUI
e deinstallUI aggiungono funzioni e strutture al singolo ComponentUI aggiungendo
listeners, layout manager e la possibilità di ereditarietà.
Lo Swing è
disponibile anche per JDK 1.1 per rendere possibile l’implementazione di
JavaHelp 1.0 anche per la piattaforma JDK 1.1 .
Possiamo dire
che, quando si crea un help in linea, si utilizzano le classi contenute
nel package javax.javahelp e, in particolare, la classe HelpSet e l’interfaccia
JavaHelp. HelpSet è un insieme di argomenti con le viste di navigazione
e le informazioni di mapping. Un oggetto JavaHelp è un’astrazione
della presentazione per uno o più HelpSet. Un’applicazione utilizza
in oggetto JavaHelp per presentare le informazioni e gli argomenti all’utente.
Le informazioni
di un dato HelpSet sono specificate in un Helpset file che contiene le
referenze ai map file. I map file servono alle applicazioni per ritrovare
i files di informazioni (scritti in formato HTML) tramite identificatore.
Questo perché le applicazioni stesse non utilizzano URL per localizzare
i files, ma identificatori mappati nei map file appunto.
Vi è
un’altra classe molto importante: JHelpNavigator. Un Help Navigator è
una sottoclasse di JHelpNavigator che permette l’implementazione di navigational
view, ossia di presentazioni delle informazioni "navigabili" (definite
anche meta-data perché descrivono le informazioni vere e proprie).
Anche la classe JHelpNavigator è un componente Swing con la capacità
di supportare la separazione delle presentazioni delle Interfacce Utente.
Per quanto riguarda
le altre classi importanti di JavaHelp possiamo nominare javax.javahelp.TOC
e javax.javahelp.TOC.format che riguardano le Table of Contents e il loro
formato standard, javax.javahelp.Index e javax.javahelp.Index.format per
gli indici e javax.javahelp.BasicSearch e javax.javahelp.BasicSearch.format
per le ricerche standard.
E’ importante
sottolineare che JavaHelp utilizza protocolli standard (file:, http:, ftp:
) quando sono specificati degli URL nei files Helpset e Map. In particolare
è stato aggiunto il protocollo jar: per permettere l’accesso ai
files contenuti in un file JAR dato che, come accennato in precedenza,
una delle caratteristiche principali di JavaHelp è appunto l’incapsulamento
dei files in un file JAR. A questo proposito nel prossimo paragrafo approfondiremo
il meccanismo di incapsulamento utilizzato nei JAR files.
I JAR files
(Java ARchive) e JavaHelp
Utilizzati già
nel contesto dei Bean, i JAR files (molto simili ai files zip) sono stati
pensati inizialmente per scaricare in un’unica transazione http i class
file di un applet, immagini, suoni, files serializzati, etc. Ogni file
JAR contiene un Manifesto che ne descrive i files contenuti che devono
essere firmati digitalmente.
Nel caso di
JavaHelp, i file JAR sono utilizzati per raggruppare ed allo stesso tempo
comprimere i file e i dati dell’help tramite protocollo jar: .
I file JAR possono
essere utilizzati in diversi modi: L’Helpset può essere fuori dal
file JAR permettendo un aggiornamento più agile dell’Helpset file.
La sintassi
con il punto esclamativo "!", è utilizzata per specificare gli URL
relativi al JAR file in cui è localizzato il map file.
Al contrario
il JAR files potrebbe contenere, oltre ai map files ed ai content files,
anche l’Helpset file. In questo caso si ottiene che tutti gli indirizzamenti
interni sono riferiti all’unico URL dell’Helpset file. Al contrario, questa
struttura comporta nuovamente la creazione del JAR file nel caso si debba
modificare l’Helpset file. Questa configurazione è utile nel caso
in cui l’help debba essere usato così come è stato scaricato,
come nel caso degli applet.
E’ importante
notare come i dati dell’help non debbano necessariamente essere organizzati
in un singlo file JAR; l’applet può creare diversi HelpSets e presentarli
contemporaneamente.
Qualche esempio
di utilizzo di JavaHelp.
-
un’applicazione
in locale
Senza entrare
troppo nel dettaglio, possiamo analizzare il caso di una semplice applicazione
in locale che sfrutta JavaHelp per la creazione di un help in linea.
In questo caso
l’applicazione richiede la creazione di un un’istanza di JavaHelp, carica
su questa i dati riguardanti l’help e quindi interagisce con questa istanza
o tramite la richiesta di informazioni da visualizzare o nascondere, oppure
richiedendo la visualizzazione di un argomento specifico (identificato
da un ID).
I dati e le
informazioni contenute nell’help possono essere anche inserite direttamente
nella finestra applicazione: in questo caso i componenti della JFC che
implementano le specifiche di JavaHelp vengono direttamente inseriti nel
Frame dell’applicazione.
L’applicazione,
in questo caso può creare una presentazione personalizzata utilizzando
i componenti di JFC.
-
Network Application
Un caso molto
simile al precedente consiste in un’applicazione che accede ad un help
tramite la rete. La localizzazione dei dati è trasparente.
-
Component Help:
una delle utilizzazioni più importanti di JavaHelp, considerata
anche l’enorme spinta data da Java in questa direzione, è sicuramente
nella riutilizzazione dei componenti Java (Bean). In questo caso, infatti,
un componente software riutilizzabile quale è un JavaBean, può
essere descritto non soltanto dal punto di vista della programmazione (tramite
BeanInfo), ma anche dal punto di vista dell’utente che lo andrà
ad utilizzare probabilmente collegato ad altri Bean.
JavaHelp fornisce,
in questo caso, la funzione di merge che permette la fusione dei differenti
help collegati ai vari Bean.
Questa fusione
può essere attuata in modi diversi: ad esempio la table of contents
information di ogni componente può essere visualizzata una dopo
l’altra per creare una nuova table of contents unificata dove le varie
informazioni riguardanti i componenti sono riordinate tramite indici.
Così come
un HelpSet può essere caricato e scaricato da un’istanza JavaHelp,
allo stesso modo le informazioni presenti richiedono di essere aggiornate.
JavaHelp fornisce un meccanismo flessibile per unire queste informazioni.
-
Un Help Server:
in alcuni casi, può essere necessario separare le applicazioni dal
processo che presenta le informazioni dell’help. In questo caso il processo
dell’applicazione può fare richiesta all’interno del processo di
JavaHelp (help server) tramite un meccanismo RPC.
Il modello di
help server può essere utile per applicazioni non scritte in Java
e che non includono una JVM. Può essere inoltre utile per molteplici
applicazioni che possono condividere un help server comune.
-
Un applet: un altro
utilizzo molto utile di JavaHelp, peculiare della filosofia Java, si può
ritrovare nella realizzazione di help in linea per Applet. In questo caso
l’applet di una pagina HTML crea un istanza di HelpSet quindi invoca HelpSet.createJavaHelp().
Se la piattaforma
del browser contiene un’implementazione di JavaHelp, questa può
essere stata fornita col browser, altrimenti può essere stata scaricata
dal client nel CLASSPATH. L’implementazione deve utilizzare lo Swing HTML
viewer oppure qualche HTML viewer fornito con il Web Browser.
E’ però
possibile che un browser perfettamente conforme a JDK 1.2 non contenga
JavaHelp nel proprio CLASSPATH. In questo caso, se la pagina fa riferimento
all’implementazione standard di JavaHelp, questa può essere automaticamente
scaricata ed eseguita.
Conclusioni
Come abbiamo
visto in questo articolo, JavaHelp si impone come un valido strumento per
la creazione di help in linea e di sistemi di gestione delle informazioni.
La sua innata vocazione al network lo rende particolarmente utile ed interessante
in tutti quei casi in cui si necessiti di informazioni centralizzate, costantemente
aggiornate e distribuite in tempo reale. Sicuramente questo nuovo strumento
contribuirà con decisione ad una diffusione ancora più capillare
di Java e delle sue applicazioni soprattutto nell’ambito di architetture
distribuite.
Inoltre è
da sottolineare che i principali produttori di tools di sviluppo di sistemi
help, hanno annunciato di supportare il nuovo standard. La lista include
Blue Sky (RoboHELP), Quadralay (WebWorks), ForeFront (ForeHTML), Hyperact
(eAuthor), and WexTech (DocToHelp), e molti altri. In questo senso si può
concludere che gli sviluppatori che hanno scritto applicazioni di una certa
dimensione e gli utenti che hanno incontrato dei problemi nel comprendere
come utilizzarle, possono trarre vantaggio dall’utilizzo di JavaHelp per
distribuire le informazioni di cui necessitano.
Bibliografia
[1] "The Java
Language Environment. A White Paper", James Gosling, Henry McGilton.
[2] "Java Apps
Get Help!", Eric Amnstrong, 27 Marzo 1998. (http://java.sun.com/products/javahelp/j1-98-help.html).
[3] "JAVAHELPTM
SOFTWARE FAQ" (http://java.sun.com/products/javahelp/faq.html).
[4] "JavaHelp
0.33 - Introduction for the Reviewers", Copyright 1998 Sun Microsystems.
[5] "JavaHelpTM
0.33 – Overview", Copyright 1998 Sun Microsystems.
[6] "JavaHelpTM
0.33 – Scenarios", Copyright 1998 Sun Microsystems.
[7] "JavaHelpTM
0.33 – JavaHelp Class Structure ", Copyright 1998 Sun Microsystems.
[8] "STC 45th
Annual Conference, May 1998: Slides from the JavaHelp presentation".
(http://java.sun.com/products/javahelp/events.html). |