Introducción

Antes de entrar en definición de ActiveX, habría que entender lo que es un objeto OLE.

 

Objetos OLE

 

Un objeto OLE (Object Linking and Embedding) significa el estándar de vinculación e incrustación de objetos. OLE es un entorno unificado de servicios basados en objetos con la capacidad de personalizar esos servicios y de ampliar arbitrariamente la arquitectura a través de servicios personalizados, con la finalidad global de permitir una integración rica entre los componentes.

 

OLE proporciona un estándar consistente que permite a los objetos, aplicaciones y componentes ActiveX, comunicarse entre sí con la finalidad de usar el código de los demás. Los objetos no necesitan conocer por anticipado en qué objetos se van a comunicar, ni su código necesita estar escrito en el mismo lenguaje.

 

Las aplicaciones ActiveX están conceptualmente divididas en servidores, objetos que hacen que sus métodos y propiedades estén disponibles para los demás, y clientes, aplicaciones que usan objetos de servidor expuestos, métodos y propiedades. Algunos tipos de servidores, por ejemplo controles ActiveX, pueden disparar eventos que pueden ser después respondidos por el código de un cliente.

 

Comunicación asíncrona y síncrona.

 

No solamente es OLE comunicación entre objetos, la comunicación es también síncrona. La comunicación síncrona implica una comunicación en dos direcciones. La aplicación que llama (el cliente) hace una llamada y espera una respuesta. La aplicación que recibe (el servidor) espera la llamada. Al recibir la llamada, la aplicación que recibe produce una respuesta mientras que la aplicación que llama se encuentra aún en la línea.

Los antiguos estándares de comunicación entre objetos, tales como OLE 1 o DDE, se comunicaban de forma asíncrona. En una comunicación asíncrona, aplicación que llama realiza una llamada sin esperar una respuesta.

 

La comunicación asíncrona entre aplicaciones puede ser problemática. Desde la aplicación servidor, si no hay notificación expresa, no se sabe sí se ha ejecutado la solicitud del cliente. La comunicación puede rebasar el tiempo. La comunicación asíncrona es menos fiable y más difícil de programar que una comunicación síncrona.

 

La interfaz OLE

 

Dado que una parte importante del modelo OLE es que los objetos servidor no tienen por qué estar escritos en el mismo lenguaje que los clientes ni tienen que tener ningún conocimiento anticipado de qué clase de objeto cliente puede llamarlos, los objetos OLE deben aplicar una interfaz estándar.

 

Los objetos OLE pueden tener tantas interfaces como desee su diseñador, agrupadas generalmente por su funcionalidad. Una interfaz determinada mostrará una "tabla de contenido", o índice alfabético, de las funciones que contiene y proporcionará un medio de ejecutar esas funciones.

 

El examinador de objetos utiliza la interfaz expuesta de los objetos ActiveX para mostrar los miembros, propiedades, métodos y eventos, de los componentes o de la aplicación. Los programas de los clientes sólo necesitan utilizar la sintaxis familiar Object.Method y Object.Property para acceder a los miembros de servidor ActiveX. Los eventos que pueden ser disparados por un objeto, como un control ActiveX, se muestran en el marco del controlador del evento en la ventana de código del cliente. El posible agregar código para responder a los eventos disparados por el componente ActiveX según sea apropiado.

 

ActiveX, se puede ver como la evolución de OLE, de la siguiente forma:

OLE + Internet = ActiveX

Controles OLE + Internet = Controles ActiveX

Documentos OLE + Internet = Documentos ActiveX

Modelo de objeto OLE + Internet = Modelo de objetos ActiveX 

 

Definición del objeto ActiveX

 

Un objeto ActiveX se define como el que se adhiere al Modelo de Objetos Componentes (Component Object Model COM) definido por Microsoft.

 

Un objeto que cumpla con este modelo tiene las siguientes características:

 

Un objeto ActiveX está aplicado como código binario, por consiguiente, puede estar escrito en cualquier lenguaje fuente.

 

El objeto está encapsulado en un archivo ejecutable o en una biblioteca de vinculo dinámico. 

 

El objeto contiene datos de dos tipos: datos de presentación, que se requieren para presentar la pantalla o para imprimir, y datos internos. Puede considerar los dos tipos de datos como propiedades que son privadas para el objeto.

 

El objeto contiene también funciones para manipular sus datos.

 

El objeto proporciona una interfaz estándar para que otros objetos se comuniquen con él.

 

El objeto participa en la disposición en formación, proceso de pasar argumentos de funciones y valores de retorno entre procesos y máquinas.

 

Que hace un objeto ActiveX

 

Un objeto ActiveX, esta esperando, sin hacer nada, hasta que es llamado. Hay objetos que esperan a ser llamados como servidores, pero mientras tanto están muy ocupados, quizás como clientes llamando a otros objetos servidor. Pro ejemplo, Word puede ser llamado como servidor por un objeto cliente externo. En general, se espera que los objetos OLE acepten varios protocolos y proporcionen varios servicios:

 

 

 

 

 

 

 

 

En el contexto de los documentos compuestos, se supone que los objetos OLE:

 

 

 

 

 

 

Los objetos OLE proporcionan un objeto interno conocido como apodo, que encapsula un puntero a un objeto y el mecanismo para volver a crear el puntero si es necesario. En términos de DDE, el puntero es una ruta para el objeto vinculado junto con un método para localizar el objeto vinculado, en el caso en que la ruta absoluta llegue a ser imprecisa.

 

 

Reutilización de código

 

 

La idea de reutilizar código es común a casi todos los lenguajes de programación, mediante esta técnica se consiguen importantes ahorros de tiempo en programación, pero a costa de un problema, para usar una clase, por ejemplo en C++, hace falta acceder completamente al código fuente.

 

Con ActiveX no se necesita ningún código fuente. Como el código original se ha convertido en un control ActiveX, es posible utilizarlo sin el apoyo de un programa compatible con ActiveX. Los controles ActiveX ofrecen un marco de reutilización de código, ya que son independientes del lenguaje. Los controles permiten conectar código C++ con Java, el código Java con Visual Basic, Visual Basic con C++ y así sucesivamente.

 

Reutilización en binario

 

Los controles ActiveX pueden conseguir esta independencia del lenguaje, ya que su código se encripta en forma binaria, no como código fuente. Sea cual sea la herramienta de desarrollo utilizada, el resultado será un control ActiveX comprensible como binario por cualquier programa compatible con ActiveX.

 

La independencia del lenguaje no es la única ventaja que se extrae del empleo de código reutilizable en forma binaria. Por ejemplo, después de convertir un algoritmo en un control ActiveX, podrá suministrarse a otros programadores sin necesidad de desvelar el resto del código fuente. Además los algoritmos dejarán de estar limitados a las herramientas de desarrollo. Toda aplicación que se que contemple en sus controles al estándar ActiveX, podrá hacer uso de este código.

 

Contenedores ActiveX

 

Los programas que usan controles ActiveX se llaman contenedores. El contenedor de un control es una aplicación capacitada para el manejo de ActiveX que actúa como soporte de interfaz de usuario para dicho control. Se puede por ejemplo, presentar un botón que, una vez pulsado, envíe un mensaje al control. O también responder a diversos sucesos, o mensajes especiales que se envían desde el control al contenedor. Estos sucesos pueden reclamar un "clic" de ratón, la terminación de una tarea o cualquier otra cosa.

 

El principal contenedor ActiveX existente, es el navegador Web. Un navegador puede mostrar controles ActiveX en una página Web incluso aunque el control provenga de un ordenador remoto.

 

Para obtener un máximo aprovechamiento de la arquitectura ActiveX son necesarios tanto los controles como los contenedores. Los primeros permiten empaquetar código fuente en un objeto único y reutilizable.

 

El problema de la transportabilidad

 

Los controles ActiveX no han sido concebidos para un funcionamiento interplataformas. La arquitectura ActiveX está fuertemente ligada al sistema operativo Microsoft Windows, los controles ActiveX no funcionan bien en otras plataformas. Este problema se agrava más, por el hecho de que los controles ActiveX no dependen solo de la plataforma, sino también del navegador. Con la excepción de Internet Explorer, los navegadores han de trucarse para admitir el manejo de ActiveX.

 

Acceso a archivos

 

Los controles ActiveX pueden acceder a archivos del ordenador cliente. Un control ActiveX podría guardar los resultados de una consulta a una base de datos en el disco duro, como fuente de futuras referencias.

 

El acceso a archivos es una alternativa cómoda, pero también peligrosa. Para paliar este problema, existe una solución. Antes de cargar ningún control ActiveX, el navegador Web lo explora en busca de una secuencia encriptada de octetos. Esta secuencia, o firma digital, es creada en un proceso conocido como firma de código. Si encuentra esta secuencia el navegador podrá determinar quién escribió el código y quién lo distribuyó y, por lo tanto, conocerá la identidad del responsable. Cuando no detecta la secuencia, advierte al usuario que el control puede ser peligroso y le da la opción de no cargarlo.

 

 

Código heredado

 

Los controles ActiveX, ofrecen un soporte muy completo para el código heredado. El proceso de conversión de programas existentes a controles ActiveX es bastante sencillo, y como los controles ActiveX son independientes del lenguaje, no importa que lenguaje se elija para componer la base de codificación.

 

Aparte del código heredado, se pueden recuperar controles heredados. Los controles OLE son totalmente compatibles con ActiveX. En consecuencia, será posible seguir perfeccionando el código de los programas con los últimos controles ActiveX.

 

 

Compilación

 

Cuando se crea un control ActiveX en Visual C++, debe compilarse dicho control en el lenguaje maquina nativo antes de iniciar las fases de pruebas y depuración. Visual C++ consume bastante potencia para traducir el código fuente C++ a lenguaje maquina nativo, por lo que se perderá un tiempo importante esperando a que el código termine de compilarse. Dicho código debe, pues, preprocesarse, analizarse, traducirse, optimizarse, ensamblarse y, finalmente, escribirse en disco.

 

Ejecución

 

Los controles ActiveX se ejecutan directamente en el sistema para el que han sido compilados. La mayoría de los compiladores optimizarán el código ActiveX por la eliminación de código innecesario o redundante.

 

Cargar el control

 

Los controles ActiveX, son perdurables, es decir, cuando se bajan de Internet, el navegador Web guardará en disco una copia del control. Antes de salvar en disco un control ActiveX, el navegador Web lleve a cabo tres comprobaciones (licencia, versión y firma) con el fin de garantizar la seguridad y proteger los derechos de propiedad del mismo.

 

Comprobación de licencia

 

Para evitar el uso sin licencia de los controles ActiveX en las páginas Web se ha incluido un mecanismo especial de protección, según el cual la distribución de los controles se acompaña de una licencia al desarrollador. Con esta licencia, los usuarios reciben permiso para insertar el control en herramientas como Visual Basic, Visual J++ y Visual C++. Si no se dispone de esa licencia, el usuario tan solo podrá visualizar el control dentro de una página Web o en una aplicación existente, nunca modificar su modo de actuar.

 

Interfaces ActiveX

 

Las interfaces ActiveX son colecciones de funciones interrelacionadas. Las interfaces ActiveX no ha sido diseñadas en el ámbito de la POO, y no tienen relación alguna con las clases o la herencia.

 

Funciones binarias

 

Las interfaces activeX, se pueden considerar como funciones ActiveX, pero como funciones a nivel binario.

Las funciones normales, al ser miembros de una clase, sólo existen en código fuente y, por tanto, dejan de ser accesibles una vez que se compilan. En cambio, las interfaces ActiveX se encuentran en el extremo opuesto: sólo pueden llamarse después de haber sido compiladas en forma binaria.

Una vez hecho esto, las funciones ActiveX pasan a estar disponibles para todo el sistema. Cualquier programa compatible con ActiveX, con independencia de cómo haya sido creado (con C++, Java, Visual Basic u otro lenguaje), puede invocar funciones binarias sin necesidad del código fuente. Esta peculiar caracteristica conforma un tipo de programa particular, llamado software de componentes, que ofrece ciertas ventajas con respecto al diseño tradicional orientado a objetos.

 

Uno de los peligros inherentes a las funciones binarias y extendidas a todo el sistema es la posibilidad de que generen conflictos de nombres. Para solucionar este problema, la arquitectura ActiveX marca cada interfaz con un identificador único a escala global. El algoritmo utilizado garantiza su unicidad. Por consiguiente, un programa ActiveX que solicite un identificador correcto siempre accederá a la interfaz adecuada.

 

Otra de la ventaja de usar funciones en interfaces ActiveX, se deriva del protocolo Distributed COM de Microsoft, o DCOM. Con este protocolo los programas ActiveX pueden invocar funciones ubicadas no sólo dentro del sistema sino en cualquier punto de la red. El soporte a las interfaces distribuidas procede de un proceso denominado marshaling (enganche).