30 de Junio de 2001 Vol.2 No.2 |
|||
Asignación de Comportamiento
Complejo Palabras Clave : Comportamient, VRML, C++, Realidad Virtual, EasyVRML, .
La animación de mundos tridimensionales virtuales en VRML se hace mediante paso de eventos entre nodos en el mundo virtual. Tal animación tiene la limitación de ser fija y predeterminada, sin cambios. Animaciones complejas se realizan a través de scripts de VRML los cuales contienen programas escritos en otro lenguaje de programación. Sin embargo, la labor de programar e integrar el script al mundo virtual, actualmente, no es sencilla ni cómoda para el usuario. En este trabajo se describe la definición, diseño e implementación de los esquemas de asignación de comportamiento en C++ sobre mundos VRML, analizando las peculiaridades de interacción entre ambos lenguajes. De manera complementaria se describe una implementación de ello en la herramienta EASYvrml, la cual facilita el trabajo de asignar comportamiento complejo utilizando C++ a mundos descritos en VRML.
Realidad Virtual El concepto de realidad virtual surge en 1965 cuando Ivan Sutherland (hoy miembro de Sun Microsystems Laboratories) publicó un artículo titulado "The Ultimate Display", en el cual describe las ideas básicas del concepto de realidad virtual. La realidad virtual se puede definir como: "Una combinación de diversas tecnologías e interfaces que permite a uno o más usuarios interactuar, en tiempo real, con un entorno o mundo dinámico tridimensional generado por computadora" 1 Otros la definen como: "La simulación de medios ambientes, reales o artificiales, y de los sentidos del hombre por computadora, de tal manera que se busca proporcionar al que participa la sensación de que este ambiente realmente existe" 36 La realidad virtual permite un nuevo modo de interacción entre el hombre y las computadoras Las características básicas de un sistema de realidad virtual son las siguientes 7a810
1.2. El Lenguaje VRML VRML es un lenguaje para describir objetos y mundos 3D interactivos. Está diseñado para usarse sobre Internet, intranets, y sistemas locales. Los mundos VRML pueden transmitirse e inter-relacionarse a través del WWW y visualizarse mediante algún navegador o browser VRML que se conecta con el browser WWW a través de un API (Figura 1). figura 1. Esquema de acceso para satisfacer los siguientes requerimientos [5]:
VRML ha sido diseñado para satisfacer los siguientes requerimientos
Conceptualmente, cada programa VRML es un espacio 3D que contiene objetos que pueden ser modificados dinámicamente a través de diversos mecanismos. La semántica de VRML describe un comportamiento funcional abstracto, basado en el tiempo. En la sección 2 se presenta una panorámica acerca de lo que es asignación de comportamiento en mundos o escenarios virtuales, en la cual, además de algunos conceptos, se presenta una clasificación de los comportamientos de acuerdo a las características que estos presentan. En la sección 3 se aborda la asignación de comportamientos descritos en C++, así como los esquemas utilizados para llevar a cabo esto. Los requisitos y las restricciones que presentan los esquemas planteados se presentan en la sección 4. En la sección 5 se describe brevemente la herramienta EasyVRML, en la cual es aplicado lo descrito en este artículo. Finalmente, en la sección 6 se describen las conclusiones de este trabajo, así como el trabajo que queda para un futuro. 2. Comportamiento en Mundos Virtuales El término comportamiento se refiere a la modificación del estado de los objetos dentro de un escenario virtual, en respuesta a alguna acción del usuario o al cambio de algún otro objeto en la escena. Este cambio de estado ocurre cuando cambia alguno de los atributos del objeto, por ejemplo la posición (translación), el tamaño (escala), la orientación (rotación) o su apariencia. En VRML, el comportamiento se controla (lleva a cabo) mediante eventos. Un evento es la generación de un mensaje y su envío de un nodo a otro. Algunos nodos VRML generan eventos en respuesta a cambios en el ambiente o interacción del usuario. El direccionamiento de eventos proporciona a los autores de los mundos un mecanismo separado de la jerarquía del grafo de la escena, a través del cual estos eventos pueden ser propagados para efectuar cambios en otros nodos. Una vez generados, los eventos son enviados a sus destinos para ser procesados por el nodo receptor. Este proceso puede cambiar el estado de un nodo, generar eventos adicionales o cambiar la estructura del grafo de la escena. El comportamiento puede ser tan sencillo como el encender una luz con un click del ratón, o tan complejo como el cálculo de la trayectoria de un misil teleguiado. Para fines de este trabajo se definen dos tipos de comportamiento: simple y complejo. 2.1. Comportamiento Simple El comportamiento simple es aquel en el cual los cambios en el estado de los objetos dependen exclusivamente de eventos internos generados por nodos descritos dentro del programa VRML, sin la intervención de ningún lenguaje ajeno a VRML. Se puede decir que éste tipo de comportamiento es propio de VRML. La propagación de los eventos se realiza enrutando o dirigiendo los eventos de un nodo a otro(s). De esta forma un solo evento puede generar lo que se conoce como "cascada de eventos", la cual va generando respuestas o cambios en los nodos a los que se va dirigiendo. Dado que el comportamiento simple está restringido a dirigir datos de un nodo a otro, mediante instrucciones dadas sólo en VRML, se tienen limitaciones como las siguientes: no es posible mediante este mecanismo determinar si una puerta está cerrada o abierta, o mover un objeto a lo largo de una trayectoria definida por una ecuación matemática. Para llevar a cabo éstas u otras operaciones más complejas, se debe utilizar un lenguaje de programación de propósito general. 2.2. Comportamiento Complejo Se entiende por comportamiento complejo en un mundo VRML, aquel en el cual los cambios en el estado de los objetos dependen de un programa escrito en un lenguaje ajeno a VRML. Los cambios dinámicos en la escena pueden ser estimulados por las acciones programadas en un script, paso de mensajes, comandos del usuario o protocolos de comportamiento.4a Esto brinda la posibilidad de interacción con otros lenguajes (específicamente los lenguajes Java y Javascript). Para ello se emplea el nodo Script. De esta manera es posible asignar comportamientos más elaborados como se describe en lo sucesivo. 2.3. Asignación de Comportamientos Los esquemas de asignación de comportamiento se clasifican de acuerdo a las siguientes dimensiones: ubicación, acceso a datos y comunicación. La intersección de las dimensiones especifica un tipo particular de esquema de asignación. De acuerdo a la Figura 1.3, los diversos tipos de esquemas de asignación de comportamiento pueden verse como puntos en el espacio, formados por tres elementos: tipo de ubicación, tipo de comunicación y tipo de acceso a datos. 2.3.1. Ubicación Se refiere a la localización física del código que define el comportamiento, y puede ser:
2.3.2. Acceso a Datos Se refiere a la forma como se leen y/o modifican los valores de los campos de los nodos que son afectados por el script, y puede ser de dos tipos:
2.3.3. Comunicación Se refiere a la forma como se realizan el envío o la recepción de datos de la escena VRML al programa de comportamiento:
2.4. Soporte de VRML para Java Java añade todas las posibilidades de programación, además de brindar un acceso casi transparente a la red, haciendo a VRML completamente funcional y portable 4b La característica más importante de Java para ser usado como lenguaje de implementación de los scripts. es su independencia de plataforma, y ello es congruente con la filosofía de VRML y la de WWW. VRML brinda el soporte para el uso de Java como lenguaje de comportamiento: Esto se realiza utilizando el API para este lenguaje, en donde se definen todas las clases para acceder a los nodos de VRML Las interfaces entre VRML y Java se llevan a cabo por medio del nodo Script, un manejador de eventos, convención para nombres DEF/USE, y ROUTEs, conectando los nodos y los campos en la escena. 2.5. Soporte de VRML para otros lenguajes Otros lenguajes de programación, en especial como C++, no son soportados de manera directa por VRML para describir comportamientos. Por lo que para comunicar VRML con cualquier otro lenguaje que no sea Java o Javascript, se deben definir los mecanismos de interfaz entre ambos lenguajes. En este trabajo se propone un esquema genérico de comunicación entre VRML y C++, que puede extenderse a otros lenguajes orientados a objetos. El esquema genérico de comunicación incluye la especificación de un protocolo llamado PAC-R (Protocolo para Asignación de Comportamiento Remoto), además de los modelos de sincronización entre VRML y C++. 3. Asignación de comportamiento utilizando C++ C++ es uno de los lenguajes orientados a objetos, cuya utilización está más extendida. Muchos programadores gustan de escribir programas en C++, sobre todo para utilizar directamente el hardware de la computadora (por ejemplo el Joystick, guantes de RV, cascos, etcétera). Además, existen muchas aplicaciones y bibliotecas escritas en este lenguaje. Muchas de éstas pueden utilizarse para generar escenas VRML más complejas. Por ejemplo, Langage d'Agents Logiciel Objet (LALO),7b es un lenguaje de programación de agentes, en el cual se pueden programar agentes de software que realicen distintas tareas de forma inteligente, utilizando para ello las funciones de inferencia que proporcionan las bibliotecas de LALO. Al compilar el programa fuente LALO, se genera como resultado el código C++, el cual puede ser utilizado para describir el comportamiento de algún objeto en una escena virtual. Dicha vinculación es lo que se conoce como "asignación de comportamiento complejo". Es decir, asignar comportamiento es vincular un nodo del escenario VRML (o alguno de sus campos) con un objeto (método o atributo) de un programa C++ o de cualquier otro lenguaje. Hasta donde se sabe, no existe un esquema general de asignación de comportamiento descrito en C++ a mundos VRML. Sin embargo, este lenguaje es utilizado por muchos programadores, dado que existen muchas aplicaciones y bibliotecas escritas en él, luego es deseable que VRML utilice las posibilidades que le brinda. Se propone, como se mencionó anteriormente, un esquema general para vincular código C++ con un mundo VRML.
figura 2. Esquema de comunicación entre C++ y VRML empleando
Java como puente. Dicho esquema establece el empleo de Java como puente entre los lenguajes, vinculando, mediante el mecanismo de Sockets, el comportamiento descrito por un programa C++, funcionando en su plataforma nativa, con un mundo VRML, independiente de plataforma (Figura 2). La utilización de C++ como lenguaje de comportamiento, está restringida al comportamiento remoto, pudiendo aplicarse en cualquiera de los modelos de comunicación. El esquema de acceso a datos que utilice depende del programa Java, que sirve como puente entre C++ y VRML. 3.1. Problemática de la asignación de comportamiento en C++ Los browsers de WWW y VRML están diseñados para utilizar Java (o JavaScript), con el fin de realizar cálculos complicados (comportamiento complejo). Cuando se requiere ejecutar un programa en Java, la Java Virtual Machine (JVM)13 (instalada en el browser) solamente "carga" el código de éste en memoria y genera un nuevo hilo de ejecución, lo cual no representa ninguna dificultad para la JVM, puesto que Java soporta directamente esta construcción y el código Java es independiente de la plataforma. Cuando la JVM necesita ejecutar un programa escrito en C++ (código nativo), debe utilizar la Java Native Interface (JNI).12 Esta interfaz establece el mecanismo a través del cual un programa Java puede realizar llamadas a métodos nativos, y viceversa. Sin embargo, este esquema sólo puede ser utilizado para aplicaciones stand-alone, y no en aplicaciones para la WEB (applets y/o scripts), principalmente por dos aspectos:
En la propuesta que se presenta se tiene una restricción en cuanto a la plataforma, ya que el programa que describe el comportamiento sólo se puede ejecutar en el servidor. Sin embargo, este programa puede comunicarse con programas que se encuentren fuera de la computadora donde se ejecuta, ya que no tiene restricciones de comunicación*a EasyVRML, además de brindar una herramienta para facilitar la tarea de asignación de comportamiento, proporciona un mecanismo genérico para vincular código C++ con un mundo VRML. Dicho mecanismo se basa en dos aspectos:
3.2. Esquema de comportamiento remoto en C++ En VRML, la asignación de comportamiento mediante Java se hace de manera local. Es decir, el programa Java es cargado y ejecutado como un nuevo hilo en la aplicación. Para esto se emplea el VRML Java API. En2 se propone un esquema de asignación de comportamiento remoto descrito en Java. Esto se hace mediante un programa Java que interactúa con VRML, y que sólo se encarga de comunicarse por medio de un Socket con otro programa Java, el cual es el que describe el comportamiento. Al igual que el esquema de comportamiento remoto en Java, su contraparte en C++ utiliza un programa Java como interfaz entre C++ y VRML. Este programa manipula los campos de los nodos del escenario, asignando a éstos los valores provenientes de un Socket, el cual está conectado con él o los programas C++ que se están ejecutando en otra u otras computadoras de la red y que describen el comportamiento del escenario. En este esquema se proponen tres niveles de interacción, entre la computadora donde se ejecuta el escenario y la computadora donde se ejecuta el comportamiento (Figura 3):
figura 3. Esquema de comunicación entre VRML y C++
Las aplicaciones que describen el comportamiento se ejecutan en máquinas remotas, mientras que el escenario VRML se ejecuta en la máquina local. Sin embargo, nada impide que en esta última se ejecute también una o varias aplicaciones de comportamiento, ya que es válido crear un Socket a la máquina local. 3.3. Modelos de comunicación Además de los procedimientos de comunicación, se debe considerar de qué manera se pueden sincronizar los procesos involucrados (el comportamiento y la visualización) en el escenario virtual. Se supone que las aplicaciones C++, de las cuales se pretende obtener el comportamiento, fueron escritas sin tomar en cuenta su aplicación conjunta con VRML. Por ejemplo, se puede utilizar VRML para la visualización de los resultados de algún cálculo, utilizando una biblioteca de funciones científicas, que realizan algún cálculo específico y que no requieren de un sistema de visualización para su funcionamiento. Para establecer la forma en la cual el escenario virtual interactúa con el programa que describe el comportamiento, se plantean tres modelos de comunicación entre VRML y C++ (los cuales se utilizan dependiendo de la funcionalidad que se desee dar a la aplicación): el modelo de comportamiento dependiente, el independiente y el dúplex. 3.3.1. Modelo Dependiente El modelo dependiente consiste en que el escenario VRML emplea a C++ como extensión de su funcionalidad, realizando llamados a funciones definidas por C++. Esto significa que el programa de comportamiento se comporta como esclavo del escenario. Empleando los conceptos de la arquitectura cliente/servidor el programa C++, el cual se está ejecutando en la computadora remota, será un servidor de cálculos y VRML será su cliente. Se le denomina dependiente porque el intercambio de información entre C++ y VRML depende de las solicitudes que este último realice. En el escenario se genera un evento, el cual es enviado al script, el que lo procesa y envía una solicitud al servidor de C++. Éste realiza el llamado a algún método o función C++ y envía el valor de regreso al escenario VRML. Este modelo está formado por las siguientes entidades (Figura 4):
figura 4. Modelo de comunicación dependiente.
En este modelo, el programa de comportamiento está dedicado a realizar los cálculos que se requieran en el escenario. Por ejemplo, en un juego de billar se enviará una solicitud desde el escenario al programa C++, para que calcule la trayectoria de una bola cada vez que ésta sea golpeada (ya sea por el taco o por otra bola). En este caso el programa C++ no realiza otra tarea, mas que atender las peticiones provenientes del escenario. La principal ventaja que tiene este esquema es que el escenario se encuentra siempre actualizado. Es éste el que lleva el control de los tiempos y los eventos. También tiene la ventaja de ser más sencillo, pues es el esquema "natural" de VRML para asignar comportamiento: en el escenario VRML se hacen llamados a funciones o métodos escritos en lenguaje Java. 3.3.2. Modelo Independiente Este modelo consiste en un programa que realiza una tarea determinada y envía datos al escenario (para que éste actualice el estado de los objetos dentro de él) cada determinado tiempo, de acuerdo a algunos criterios. A diferencia del modelo dependiente, el programa de comportamiento no tiene que esperar que el escenario virtual envíe las peticiones de actualización necesarias. Por ejemplo, un programa C++ que monitorea el estado de un guante de RV, envía los valores del estado de éste al escenario, en el momento en que éstos cambian.
Este modelo está formado por cuatro entidades (Figura 5):
figura 5. Modelo de comunicación independiente.
3.3.3. Modelo Dúplex El modelo de comportamiento dúplex es el más completo y el más complejo al mismo tiempo, ya que es una mezcla de los dos modelos anteriores. Consiste en que tanto el escenario VRML, como el programa C++ de comportamiento, envían y atienden peticiones de actualización y cálculo (Figura 6). Por ejemplo, en un juego de batalla aérea, VRML se encarga de la visualización de los aviones y de la interfaz con el usuario (el control de los aviones), enviando mensajes al programa de comportamiento para que realice los cálculos de las trayectorias de sus balas o misiles. Sin embargo, el programa C++ puede controlar los movimientos del adversario mediante un agente que se encargue de ello, que responda a los movimientos del usuario. En este caso VRML envía los mensajes del control del usuario y recibe las actualizaciones de las naves. Este esquema tiene como principal ventaja la versatilidad para hacer interactuar a los objetos del escenario VRML, con el programa de comportamiento. Esto aumenta las posibilidades para hacer escenarios más realistas y atractivos para los usuarios, pues brinda un elemento muy importante en la Realidad Virtual: la interacción.
figura 6. Modelo de comunicación Dúplex
4. Requisitos y restricciones del comportamiento en C++ La asignación de comportamiento en C++ tiene algunas restricciones. La más importante tiene que ver con el ámbito de los objetos (scope) y su tiempo de vida. Por ejemplo, existen objetos temporales cuyo ámbito es local a la función en la que fueron declarados. Si se vincula este objeto con un nodo en el escenario, al terminar el ámbito del objeto el vínculo creado quedará roto, creando con esto una inconsistencia. Para solventar este problema se deben vincular los nodos de VRML con objetos C++, cuyo ámbito sea global al programa o a la clase de la que se toma el comportamiento. Las demás limitaciones del comportamiento en C++ las impone el esquema de comunicación de comportamiento remoto. En primer lugar, el equipo en el cual está ejecutándose el programa que describe el comportamiento, debe soportar el uso de Sockets, ya que sin éstos los esquemas y modelos planteados no pueden funcionar. Por otro lado, se debe configurar el browser con los permisos de acceso a red, ya que de otra forma no se tienen los privilegios de acceso a ella desde el script. Esto puede evitarse empleando un servidor de acceso a red (proxy), el cual está instalado en el mismo equipo del cual se descarga el escenario y proporciona al escenario una forma segura de acceso a la red (Figura 7). Sin embargo, esta solución queda fuera de los alcances de este trabajo.
5.EasyVRML EasyVRMLes un ambiente CASE, orientado a la generación de mundos virtuales con comportamiento complejo. Es una herramienta que da soporte en la etapa final del desarrollo de mundos virtuales con comportamientos complejos, ya que permite llevar a cabo la asignación de este tipo de comportamientos descritos en Java y/o C++, a componentes de mundos virtuales creados con VRML, todo ello a través de un lenguaje visual basado en iconos. Además, proporciona mecanismos para soportar comportamientos complejos, locales y remotos, descritos en estos lenguajes. EasyVRML propone también un esquema genérico de comunicación entre VRML y cualquier lenguaje de programación orientada a objetos. La versión actual considera sólo a C++ y Java, pero puede extenderse a otros. El esquema genérico de comunicación incluye la especificación de un protocolo llamado PAC-R (Protocolo para Asignación de Comportamiento Remoto), además de los modelos de sincronización entre VRML y el otro lenguaje. Esta herramienta busca dar solución a los problemas inherentes a la generación de aplicaciones basadas en VRML y C++, para la generación de entornos virtuales con comportamientos complejos, a saber:
EasyVRML busca mejorar la productividad del programador mediante la automatización de tareas, como la generación de código y la reutilización de objetos y módulos. Facilita el desarrollo de entornos virtuales, cuyos componentes puedan integrar comportamiento complejo a través de herramientas de diseño más intuitivas y representativas, como el Lenguaje Visual de Asignación de Comportamiento 6. Conclusiones y Trabajo Futuro El esquema genérico de comunicación, los modelos de sincronización y el PACR, pueden ser utilizados como la base para lo siguiente:
Sin embargo, éstos son solamente las bases de trabajos posteriores. En particular, los autores trabajan actualmente en el primer apartado. En cuanto al desarrollo de ambientes distribuidos, se considera la aplicación de tecnologías que en la actualidad ofrecen una capa de software de más alto nivel, que el simple paso de mensajes a los objetos distribuidos a través de Sockets. Existen muchos ejemplos de estas tecnologías, como implementaciones de CORBA (Common Object Request Broker Architecture) y RMI (Remote Method Invocation), por mencionar algunas. La aplicación de estas tecnologías para la asignación de comportamiento a componentes en escenarios VRML, generaría una base más robusta para la generación de VDE's (Virtual Distributed Environments), ambientes en los cuales los usuarios (avatars) son objetos que se encuentran en cualquier sitio. Las ciudades virtuales estarían conformadas por componentes distribuidos, proporcionados por empresas o por los usuarios de la comunidad. El empleo de CORBA, por ejemplo, permitirá que el analizador de código, descrito en el Capítulo IV, pudiese ser sustituido por un compilador de IDL (Interface Definition Language), con lo cual es posible incorporar otros lenguajes para la definición de comportamiento de una forma sencilla. De esta forma se pueden utilizar objetos distribuidos, escritos en diferentes lenguajes, ejecutándose en sus plataformas nativas. Aplicaciones posibles son los laboratorios virtuales, en los cuales se pueden tener simulaciones de aparatos sofisticados y caros para que los aprendices experimenten sin poner en riesgo los aparatos reales. Por otro lado, se pueden tener sistemas de telecontrol, en los que se compartan recursos escasos y caros, por ejemplo telescopios y robots. El estándar VRML 2.0, según la opinión de los autores, está llegando al límite de sus capacidades, ya que se necesita emplear alguna de las diferentes extensiones al lenguaje, cada vez que se quiere escribir una aplicación con él. En el ámbito mundial, se están dedicando esfuerzos para extender la funcionalidad a un lenguaje que está llegando a su tope. Tales esfuerzos bien podrían ser dedicados a la generación de un nuevo estándar del lenguaje. Con el conocimiento de las necesidades actuales y las tendencias futuras, es posible crear la especificación de VRML 3.0. Dicha especificación debiera considerar la tendencia hacia la creación de VDE's, creados a partir de componentes. De la misma forma, se deben considerar las tecnologías de objetos actualmente disponibles (particularmente objetos distribuidos). Por ello el nuevo VRML debe ser orientado a objetos, para soportar estas tecnologías y, más aún, dirigido a agentes inteligentes capaces de habitar los VDE's y dar servicios a los usuarios de éstos. Con la incorporación de este tipo de capacidades, los programas en VRML serán cada vez más poderosos, pero al mismo tiempo más grandes y complejos. Por ello, el formato del archivo VRML podría ser cambiado a un bytecode (quizá el bytecode de Java), para hacer más eficiente el intercambio de escenarios virtuales. En resumen, existe una amplia gama de aplicaciones de la RV. Si ésta es utilizada en conjunto con otras tecnologías, los alcances de los sistemas de RV crecen de manera significativa, pero, al mismo tiempo, se generan nuevos problemas y líneas de investigación, que hacen que el panorama de trabajo sea prometedor y amplio. a) Tiene las restricciones que le inponga la plataforma en la cual se está ejecutando. b) Protocolo de Asignación de Comportamiento Remoto.
3 Bayarri Salvador, Fernández Marcos, & Pérez Mariano (1996) Virtual Reality for Driving Simulation. Communications of the ACM: Virtual Reality, 39 (5): 72-76. 4a , 4b Brutzman Don (1998) The Virtual Reality Modeling Language and Java, Communications of the ACM: Java, 57-64. 5 Carey Rikk, Bell Gavin, & Marrin Chris (1997) ISO/IEC 14772-1 Virtual Reality Modeling Language (VRML97), VRML Consortium Incorporated, URL: http://www.vrml.org/Specifications/VRML97 6 Fisher S. Scott & Fraser Glen (1996) The Virtual Brewery Adventure, ACM-SIGGRAPH: Computer Graphics FOCUS: "Real" Virtual Reality SIGGRAPH '96 Slide Sets, 30 (4): 44-46. 7a , 7b Gauvin Daniel, Marchal Hervé , Gauthier Roger, Rizand Jean-François, Delle D. Vince (1997) LALO: Langage d'Agents Logiciel Objet. Centre de Recherse Informatique de Montreal, URL: http://www.crim.ca/sbc/english/lalo/ 8 Gigante M.A., Earnshaw R. A., & Jones H. (1993) Virtual Reality: Definitions, History and Applications in Virtual Reality Systems. Academic Press Ltd - Harcourt Brace & Company. 9 Hartman Jed, Wernecke Josie (1996) The VRML 2.0 Handbook. Addison Wesley 10 Lavroft Nicholas (1992) Virtual Reality Playhouse: Explore Artificial Worlds on your PC. Waite Group Press, ISBN 1-878739-19-0. 11 MageLang Institute (1999) Fundamentals of Java SecurityURL: http://developer.java.sun.com/developer/onlineTraining/Security/Fundamentals/index.html 12 Sun Microsystems Inc. (1997) Java Native Interface Specification. URL: http://java.sun.com/products/jdk/1.1/docs/guide/jni/spec/jniTOC.doc.html 13 Sun Microsystems Inc. (1999) The JavaTM Virtual Machine Specification.URL: http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html
|
[ Este número ] |
Dirección General de Servicios de Cómputo
Académico-UNAM |