Come visto nei precedenti capitoli, VrmlScript offre una soluzione piuttosto
semplice per la soluzione di problemi di interattività; ma tale relativa semplicità,
costituisce anche il suo limite.
Supponiamo di volere creare una interfaccia a finestre da cui controllare il
mondo VRML. L'utente selezionando dai vari bottoni presenti sulla finestra puo'
imporre che avvengano certe azioni nel mondo. Per esempio potrebbe manovrare
un manichino virtuale.
Un altro esempio tipico: si vuole realizzare un mondo VRML in multi-utenza,
cioè condiviso da più utenti (sottoforma di avatar) che possono interagire
tra loro. Tutta la parte concernente la gestione delle connessioni internet
dovrebbe essere gestita da Java in quanto VRML è in grado di gestire unicamente
alcuni degli eventi interni al mondo virtuale.
Un ultimo esempio potrebbe essere rappresentato da un "videogioco", nel quale
la descrizione dell'ambiente avviene tramite VRML, mentre la parte di controllo
viene esercitata da Java.
In tutte queste situazioni il solo VRML non è sufficiente; e nessun linguaggio
di scripting, sia esso VrmlScript o JavaScript può essere di maggior aiuto.
Come tutti i linguaggi di scripting, VrmlScript infatti non consente di avere
accesso alla potenza disponibile con un vero linguaggio di programmazione. Per
ovviare a questi limiti, VRML 2.0 consente l'implementazione e l'interfacciamento
di un vero e proprio linguaggio di programmazione: Java.
Cos è Java
Non è certo questa la sede in cui trattare di Java, qui si intende solo fornire
una panoramica, da molto lontano, sulle caratteristiche principali di questo
linguaggio. Chi volesse conoscere più a fondo Java può ovviamente rivolgersi
ai numerosi manuali reperebili nelle librerie specializzate, o meglio ancora
vedere la sezione ad esso dedicata presso il nostro sito.
Java è un linguaggio di programmazione a tutti gli effetti. Una delle sue caratteristiche
principali è l'indipendenza dalla piattaforma, ovvero il fatto che le applicazioni
create con Java possono essere eseguite sulla maggior parte dei sistemi, siano
essi DOS, Windows, Mac, Linux, Unix ecc. Infatti, una volta realizzato il cosiddetto
"codice sorgente" del programma in formato ASCII, questo viene "compilato",
cioè tradotto in un diverso formato chiamato "bytecode".
Mentre il codice sorgente viene salvato con il formato .java, il file
compilato viene salvato come file .class. Sotto questa nuova forma, il
programma creato può finalmente essere eseguito dal cosiddetto "interprete"
di Java: la Java Virtual Machine (JVM). Ora, per ognuno dei sistemi operativi
sopra enunciati, è disponibile l'adeguato interprete, esiste cioè una JVM che
funziona sotto Windows, una per il Mac, una per Linux ecc. Questo meccanismo
consente ad un unico programma scritto e compilato in Java di essere eseguito
su qualsiasi macchina, purchè questa abbia l'interprete del bytecode.
La seconda caratteristica di Java che occorre tener presente
è questa: con Java si possono creare due tipi di programmi, le consuete applicazioni
e gli "applets". La differenza sostanziale tra questi due tipi di programma
è che gli applets vengono inseriti in pagine HTML e generalmente vengono visualizzati
dagli utenti all'interno di browsers Web.
Classi e Oggetti
Java è un linguaggio "orientato agli oggetti", come il C++, e questa sua caratteristica
comporta la necessità di conoscere almeno i fondamenti della programmazione
orientata agli oggetti. Questo metodo tende a creare delle "unità" indipendenti
di codice dotate di caratteristiche e comportamenti ben precisi, di modo che
possano essere riutilizzate il più possibile all'interno dello stesso programma
o anche in programmi diversi.
Queste unità indipendenti sono gli "oggetti", e vengono create partendo da
modelli più generali denominati "classi". Si possono considerare le classi come
entità astratte, teoriche, contenenti una ben determinata serie di caratteristiche
e comportamenti potenziali. Mentre gli oggetti ne costituiscono le "istanze",
ovvero le realizzazioni concrete.
Il JDK (kit di sviluppo Java) è fornito con un'ampia libreria di classi
predefinite, che offrono una serie di strumenti utilissimi per svolgere varie
funzioni. Tali classi sono raccolte in una serie di "package", tutti a loro
volta contenuti nel "package java". A titolo di esempio, di seguito sono elencati
alcuni dei package disponibili:
- java.io (classi per operazioni di input e output)
- java.applet (classi per l'implementazione di applet)
- java.net (classi per operazioni di rete)
- java.util (classi di utilità generale).
Come implementare Java in mondi VRML
Al momento esistono due modalità che consentono l'interazione tra Java e VRML:
JSAI (Java in Script Nodes Authoring Interface) che prevede l'impiego
del nodo Script, oppure 'interfaccia esterna EAI (External Authoring
Interface).
Il primo approccio è quello originariamente previsto dalle specifiche VRML
2.0. Una classe Java (un file .class) viene attivata per mezzo di un
opportuno nodo presente all'interno del mondo VRML: il nodo Script. Questo
nodo, oltre ad indicare la classe che deve essere attivata in fase di caricamento
del mondo, indica anche i campi che possono essere modificati dalla classe stessa.
Le classi Java collegate al mondo VRML non girano come applets ma vengono definite
come estensioni della classe Script. Per poter accedere ai campi VRML
indicati nel nodo Script, esistono opportuni "packages" (in pratica collezioni
di classi) che vengono forniti assieme al browser VRML.
facendo ricorso alle classi contenuti in questi packages è possibile
accedere ad un campo del mondo VRML, leggerne e impostarne il relativo valore.
Il secondo approccio, rappresentato dall'interfaccia esterna EAI, consente
di controllare un mondo VRML da una applet Java. L'interazione qui non viene
inizializzata dal mondo VRML (che non contiene nessun riferimento alla classe
Java controllante). E' infatti l'applet stessa che provvede ad ottenere un riferimento
al browser VRML. Dopodichè, è in grado di ottenere ulteriori references a nodi
e campi presenti nel mondo VRML. Anche qui esistono opportuni packages che vengono
distribuiti con i browsers, contenenti le classi che consentono di accedere
a nodi e campi, di leggerne i valori e di procedere alla loro modifica.
Quindi, Java può essere utilizzato per aumentare la potenza di VRML, rendendolo
adatto a gestire le più svariate situazioni. Ma è possibile anche il contrario;
si può pensare ad una applicazione Java che utilizza VRML come mezzo di output
per la visualizzazioni di dati.
Nel prossimo capitolo si vedrà un esempio di come si possa utilizzare Java
mediante il nodo Script.