| La arquitectura de componentes Bonobo: Una introducción práctica | ||
|---|---|---|
| Prev | Chapter 1. La arquitectura de componentes Bonobo | Next |
Los interfaces Bonobo definen distintos tipos de componentes, cada uno de los cuales puede ser usado para una tarea diferente. Pero todos ellos tienen algo en común: todos descienden del interfaz Unknown, que define métodos para controlar el ciclo de vida de los componentes, así como para la consulta de las capacidades (interfaces IDL) soportados por el componente. Este sencillo interfaz ofrece toda la funcionalidad necesaria para el control y reconocimiento de otros componentes en tiempo real, sin la ya mencionada necesidad de conocer ningún detalle de los componentes siendo utilizados.
Son los siguientes:
Componentes no visuales: estos serían el equivalente a servidores CORBA normales, que pueden ser usados para definir servicios fácilmente accesibles desde otras aplicaciones. Ejemplos de componentes no visuales podrían ser: servicios de red (un componente que implemente un servidor de ficheros, por ejemplo), servicios de información (acceso a una agenda compartida por varias aplicaciones), servicios del sistema (acceso a una base de datos de usuarios, al estilo del NIS (Network Information System)). Hasta ahora, éstos componentes son los menos utilizados en los desarrollos actualmente activos con Bonobo.
Controles: son el equivalente a los ActiveX de Microsoft. Son simples controles (widgets de pantalla) que están implementados en procesos independientes, y que pueden ser insertados dentro de otros controles en otras aplicaciones. Así, por ejemplo, podríamos tener un control que implementara un navegador web, y simplemente incluirlo en nuestra aplicación para dotarla de capacidad de navegación por Internet. Se interactúa con los controles Bonobo por medio de propiedades, que definen el funcionamiento del mismo. Además, estas propiedades pueden ser requeridas en tiempo de ejecución, lo que facilita enormemente el desarrollo de Entornos Integrados de Desarrollo (IDE) que hagan uso de los mismos para la construcción de los interfaces de usuario. De hecho, Glade (http://glade.pn.org/), el diseñador de pantallas de GNOME, los comienza a soportar.
Componentes "empotrables": éstos son componentes que pueden ser insertados (empotrados) en contenedores Bonobo (ver punto siguiente), y que al mismo tiempo se incrustan dentro de la ventana contenedora permitiendo la edición 'inline'. Este tipo de edición provoca que la barra de herramientas o la de menús sean sustituidas en la ventana del contenedor por las del componente. De esta forma el componente utiliza los recursos visuales del contenedor para poder mostrar su interfaz visual cuando este activo. En la siguiente figura vemos un componente empotrado dentro de un contenedor.
Así, típicos ejemplos, serían un editor de imágenes (que permitiría la visualización y edición de la imagen desde la aplicación contenedora), una hoja de cálculo (que podríamos incluir en nuestros documentos). Este tipo de componentes es quizá el más potente de todos. Al igual que los controles, contienen propiedades que pueden ser modificadas por las aplicaciones haciendo uso de ellas para modificar su comportamiento o aspecto, pero además, permiten la definición de 'verbos', que son, por llamarlo de alguna manera, comandos que define el propio componente. Estos verbos podrían servirnos para, por ejemplo, decirle al componente que implementa el navegador web que queremos que vaya a la página anterior (GoBack), que imprima la página siendo visualizada (Print), etc. Al igual que con las propiedades, estos verbos pueden ser requeridos dinámicamente, sin que sea necesario que el cliente (aplicación usando el componente) los conozca de antemano.
Contenedores: estos son los componentes visuales encargados de embeber los componentes "empotrables". Además, permiten la implementación de 'monikers', que son un sistema mediante el cual otra aplicación puede acceder a un elemento específico dentro de un componente embebido en un contenedor. Así, el ejemplo más típico sería el acceso a la celda B24 de la hoja de cálculo almacenada en el fichero /home/user/ventas.gnumeric. Otra funcionalidad de los contenedores consiste en servir de interfaz para las barras de menús y de tareas de los componentes embebidos, simulando de esta forma la inserción de la aplicación que se usa para la edición y visualización del componente embebido en nuestra aplicación contenedora.