140 likes | 272 Views
HaskellScript y sus Aplicaciones. Autores Santiago Ochoa Ceresuela Miguel García Puyol. Diseño basado en Componentes. Evolución natural de la orientación a objetos. Idea similar a la empleada en los componentes Hardware Plataformas de componentes: CORBA, COM, J2EE, .NET Objetivos:
E N D
HaskellScript y sus Aplicaciones Autores Santiago Ochoa Ceresuela Miguel García Puyol
Diseño basado en Componentes • Evolución natural de la orientación a objetos. • Idea similar a la empleada en los componentes Hardware • Plataformas de componentes: CORBA, COM, J2EE, .NET • Objetivos: • Desarrollo mediante composición, no implementación • Reutilización de componentes hechos por terceros • Mercado común de componentes (Commercial Off-The-Shelf) • Integrados en un determinado modelo/plataforma. • No tienen sentido de forma aislada. • Implementan una serie de interfaces que • Indican la funcionalidad que proporcionan y también la que precisan. • Permiten la reemplazabilidad.
Nociones de ActiveX/COM • Un objeto ActiveX es aquel que cumple la definición del Modelo de Objetos Componentes (COM) de Microsoft. • Características objeto COM: • Puede estar escrito en cualquier lenguaje (código binario) • Encapsulado en un archivo ejecutable o biblioteca de vínculo dinámico (DLL) • Proporciona una interfaz para que los otros objetos se comuniquen con él. • Dos tipos de datos: • Datos de Presentación • Datos Internos • Tiene funciones para manipular esos datos
Introducción HaskellScript • Es el nombre de un conjunto de bibliotecas y software que permiten la integración de Haskell dentro del marco de trabajo COM/ActiveX • HaskellScript es compatible con Microsoft Internet Explorer 4, Word, Excel. • Presenta algunas incompatibilidades con las últimas versiones
HaskellScript = Haskell + COM • Se trata de poder construir sistemas híbridos aprovechando la naturaleza funcional de Haskell • Dos posibilidades: • Utilizar componentes COM (y sus elementos) dentro de Haskell • Llamar a funciones Haskell desde otro componente (otros lenguajes de programación que soporten COM) a través de su interfaz
Introducción a HaskellScript • Está formado por: • HaskellAgent: es una biblioteca escrita en Haskell empleada para crear animaciones usando la tecnología de Microsoft Agent. Ej: el ayudante de Microsoft Office. • HaskellObject: es una biblioteca para definir componentes automatizados (Automation components) en Haskell. Estos componentes se comportan exactamente igual que los componentes COM y pueden ser directamente utilizados desde Java o Visual Basic.
Introducción a HaskellScript • HaskellDirect: Es un compilador completo de IDL (Interface Definition Language) para Haskell. Los programadores pueden usarlo para generar automáticamente interfaces Haskell para los componentes COM. • HaskellDB: Biblioteca Haskell que permite realizar peticiones sobre bases de datos relacionales.
Importando/Exportanto Haskell • HaskellObject • HaskellDirect • Interfaces Script Server Conjunto mínimo de interfaces que permiten usar Haskell como lenguaje de Script en aplicaciones como IExplorer, Windows 95/NT
Interfaces Script Server • Todo Script Server es un componente COM • En general, un interfaz Script Server es un interfaz independiente del lenguaje que permite a cualquier lenguaje de programación ser programado o invocado desde otra aplicación • En HaskellScript, hay un conjunto de interfaces implementados sobre Hugs para interactuar con el motor de ActiveX. • Representan la mínima funcionalidad necesaria para programar en otro lenguaje desde una aplicación externa (Ej: Utilizar funciones Haskell en lenguajes como Visual Basic o Java)
IDL: Interface Definition Language • interface IScriptServer : IDispatch { HRESULT LoadScript ([in] VARIANT* source,[out,retval] IScript** script) HRESULT AddHostItem ([in] BSTR itemName, [in] IDispatch* item ); HRESULT AddSearchDir ([in] BSTR dir ); HRESULT ProgID ([out,retval] BSTR* progID ); }; • interface IScript : IDispatch { HRESULT Start (void ); HRESULT AddHostItem([in] BSTR itemName, [in] IDispatch* item ); HRESULT GetScriptItem([in] BSTR name,[out,retval] IScriptItem** item) HRESULT Expr ([in] BSTR expr, [out,retval] IScriptItem** item ); }; • interface IScriptItem : IDispatch { HRESULT Eval ([in] int cArgs, [in,size_is(cArgs)] VARIANT* args, [out,retval] VARIANT* result );};
HaskellObject: ObjectScript • Consiste en crear un componente Haskell, que a su vez será automatizado. Para ello se necesitan 2 módulos: • Un proxy, que una Haskell con el exterior (podría utilizarse HaskellDirect para generarlo a partir de la definición IDL) • El módulo con la implementación del componente • Ya que Visual Basic y Java usan la automatización como su interfaz COM básico, es fácil integrar Haskell con estos lenguajes.
HaskellDirect • HaskellDirect, como hemos dicho, es un compilador de IDL para Haskell, que proporciona una ayuda al programador Haskell que quiere interactuar y reusar código externo. • Crear un interfaz para Haskell implica la conversión de los tipos básicos y el manejo de memoria entre el mundo Haskell y el exterior • HaskellDirect se encarga de llevar a cabo esta traducción • Sin embargo, actualmente, su uso es bastante limitado
Biblioteca HTMLScript • Esta biblioteca contiene un conjunto de funciones que permiten “trasladar” el control de elementosHTML a Haskell. Una vez allí, se podrán modificar de igual forma que se podría hacer con Javascript. • Veamos algunos ejemplos sencillos
Referencias • http://www.haskell.org/haskellscript • Client-side Web Scripting with HaskellScript Erik Meijer, Daan Leijen and James Hook. http://www.cs.uu.nl/people/daan/papers/padl.ps • Scripting COM components in Haskell Simon L. Peyton-Jones, Erik Meijer and Daan Leijen http://www.cs.uu.nl/people/daan/papers/com.ps • Diseño Arquitectónico Carlos Canal http://www.lcc.uma.es/~canal/isd/ISD_2.pdf