Chapter 1. La arquitectura de componentes Bonobo

Table of Contents
¿Qué es Bonobo?
Partes de Bonobo
Consecuencias de Bonobo a la hora de desarrollar
Las interfaces IDL de Bonobo
Bonobo dentro de Gnome-db
Conclusiones
Referencias

¿Qué es Bonobo?

Bonobo es el sistema de componentes del proyecto GNOME, cuyo objetivo es muy parecido al del COM/ActiveX de Microsoft. Es decir, es una arquitectura que define el sistema mediante el cual realizar y usar componentes software reutilizables, tanto visuales como no visuales.

Como anécdota, contar que se eligió Bonobo como nombre para el sistema, pues los bonobos son unos monos que se aparean varias veces al día, lo que se ajustaba perfectamente a un sistema de componentes en el que diferentes partes se insertan dentro de otras. Desgraciadamente, estos animales están ahora mismo en peligro de extinción, cuyo enlace puede encontrar en la referencia [1].

Figure 1-1. Logo de la asociación de protección del Bonobo

Bien, y ¿qué ofrece un sistema de componentes? Por un lado, se consigue la reutilización de software en el más amplio sentido de la palabra, pues no es necesaria ni siquiera una compilación/enlazado para reutilizar el componente deseado, además de que es posible sustituir uno de los componentes sin necesidad de recompilar el resto. Por otro lado, se evita la necesidad de desarrollar enormes aplicaciones monolíticas que implementen todas las características necesarias, sino que es posible que varias pequeñas aplicaciones interactúen entre sí, al estilo de las 'tuberías' de UNIX. Y además, se consigue la integración visual de diferentes aplicaciones que no saben nada las unas acerca de las otras. Esto último es muy conocido por los usuarios de Windows, donde es posible insertar un gráfico realizado con una aplicación en un documento siendo editado por otra, que se conoce como 'documentos compuestos'.

Bonobo está fuertemente inspirado en el sistema OLE2 de Microsoft, pero con una diferencia, mientras que la arquitectura de Microsoft utiliza COM para las comunicaciones entre los componentes, Bonobo está basado en CORBA. Consiste en una serie de interfaces IDL que definen el mecanismo mediante el cual los distintos componentes software interactúan entre sí. Así, al tener los interfaces definidos en IDL, es teóricamente posible desarrollar una implementación de Bonobo para cualquier ORB de CORBA.

Sin embargo, en este artículo nos vamos a centrar en la implementación de estos interfaces para el proyecto GNOME, y por consiguiente, para ORBit, la implementación de CORBA utilizada por el proyecto GNOME. Es una implementación que utiliza el lenguaje C, que quizás pueda no ser el más cómodo para desarrollar con CORBA. Pero veremos que se logra una gran abstracción de CORBA de cara al desarrollador, por lo que este se puede olvidar que lo que está por debajo es CORBA.

Estos interfaces IDL definen el "contrato" entre el componente en sí, y la aplicación haciendo uso del mismo. Esta opacidad permite que tanto el cliente (aplicación usando el componente) como el servidor (el componente) no tengan que conocer nada el uno acerca del otro, pues su método de comunicación es a través de los interfaces IDL, y no a través de un protocolo de comunicaciones o un formato de fichero, lo cual acarrea la definición e implementación de los mismos en ambas partes. El desacoplamiento entre servidores y clientes es total, pudiendo incluso estar implementados en lenguajes diferentes y para arquitecturas distintas.

La única restricción por parte de ambos es que deben seguir las normas del contrato (los métodos definidos en los interfaces IDL y sus correspondientes parámetros) al pie de la letra. Esto facilita el desarrollo independiente de ambas partes.

Como se puede apreciar, el uso de componentes no es sólo útil para los desarrolladores, sino para cualquier usuario de aplicaciones de escritorio, pues ambos consiguen una productividad mucho mayor. Como ejemplo de esta utilidad, podemos citar el típico ejemplo de una hoja de cálculo en la que se insertan datos provenientes de una base de datos en tiempo real. Esto permite al programador que su aplicación (en este caso, la hoja de cálculo) sea mucho más potente, mientras que al usuario le permite una productividad mucho mayor en menos tiempo, pues de no tener un sistema de componentes probablemente tendría que teclear a mano los datos, o, en el mejor de los casos, copiar y pegar los resultados devueltos por el programa de acceso a la base de datos.

Esperamos que ya estés convencido de que los componentes son un mundo idílico para desarrolladores y usuarios y que, tengas ganas de bucear dentro de la arquitectura que posibilita que esto sea realidad: Bonobo. Un trabajo de más de dos años en el que han colaborado cientos de personas de todo el mundo, lideradas por Miguel de Icaza, y que están permitiendo que proyectos de la envergadura de Evolution y Nautilus sean realidad y, lo que es mejor, que todos los componentes que generen estos proyectos puedan ser reutilizados en cientos de aplicaciones, ahorrando miles de horas de desarrollo.