DynObjects en gvSIG 2.0

Hola,

vamos a hacer una introducción rápida a esta funcionalidad de gvSIG 2.0. Contaremos de forma rápida que son y después, en un par de artículos más intentaremos describir con un ejemplo dos usos de ellos.

En gvSIG se han introducido mecanismos para la definición de estructuras de datos dinámicas. Se tratan de estructuras de datos que se definen en tiempo de ejecución y nos permiten manejar datos con esa estructura sin que tengamos que saber exactamente cuál es esa estructura en tiempo de compilación. Sería algo parecido a manejar un Map para almacenar una estructura de datos en la que las claves son los nombres de los campos y el valor asociado a la clave su valor, pero con un valor añadido que nos permite consultar los tipos de los datos.

Para dar soporte a esto, a grandes rasgos, disponemos de los siguientes interfaces:

  • DynStruct. Contiene la definición de una estructura de datos. Qué atributos tiene la estructura, de qué tipos son, qué valores por defecto deben tener o qué restricciones se les deben aplicar a los atributos.
  • DynClass. Extiende a DynStruct añadiendo los mecanismos para definir operaciones o métodos asociados a la estructura de datos.
  • DynObject, que representaría a una instancia de un DynStruct o DynClass.
  • DynObjectManager, que nos hace de factoría para crear instancias de definición de estructuras (DynStruct y DynClass) o de las propias instancias de éstas (DynObject).

Para complementar a estos interfaces, hay implementaciones por defecto para cada uno de estos, de forma que podemos instanciarlas desde el DynObjectManager.

A este grupo funcional que aporta estas clases e interfaces es lo que genéricamente llamamos DynObjects.

Aunque el uso principal de los DynObjects es el de disponer de datos cuya estructura es dinámica y creada en tiempo de ejecución, en algunas partes de gvSIG se usa sólo para definir la estructura de datos propiamente dicha sin que luego se vaya a usar para almacenar éstos. Por ejemplo cuando definimos los metadatos de un objeto o cuando definimos qué atributos queremos que persistan de él. Tanto en un caso como en el otro se utiliza una definición de la estructura de datos para indicar qué metadatos tendrá el objeto o qué atributos de él serán persistidos, pero no para instanciar objetos con esa estructura.

Dada una definición de estructura de datos, podríamos crear una instancia de ellos mediante el DynObjectManager.

DynObjectManager manager = ToolsLocator.getDynObjectManager();
DynObject mydata = manager.createDynObject("MyStruct");

De esta forma tendré un DynObject que responderá a la estructura de datos definida con el nombre “MyStruct”. Este DynObject estará implementado por la clase por defecto para el manejo de DynObjects, pero es muy común que queramos disponer de nuestra propia implementación de nuestra estructura, usando los DynObjects como mecanismo para intercambiar estructuras de datos de las que no sabemos su definición en tiempo de compilación. En ese caso lo que haremos sera crear nuestra propia clase que implemente el interfaz DynObject, y proporcionar un manager o factoría para crear las instancias de éstos.

En los próximos dos artículos que continuaran a este veremos:

Espero que esto pueda servir para aclarar algunas ideas.

Un saludo

Joaquin del Cerro
Jose Badia

About Joaquin del Cerro

Development and software arquitecture manager at gvSIG Team. gvSIG Association
This entry was posted in development, gvSIG Desktop, gvSIG development, spanish, technical collaborations. Bookmark the permalink.

Leave a comment