12 Ejemplo de aplicación: Dazzle Es una aplicación para múltiples plataformas (Se usa tanto para Windows como para Linux) Se desarrolló mucho antes del plazo previsto que ocurre rara vez en proyectos software. En Windows XP, utiliza 12M de memoria para las grandes redes bayesianas de más de 50 nodos
13 Más sobre WxHaskell Se publicó un artículo en una revista muy popular en Francia llamada L’informaticien sobre WxHaskell en Octubre del 2003 escrito por Frédéric Mazué WxHaskell se imparte en la Universidad Politécnica De Valencia en la asignatura Programación Declarativa También se imparte en la Universidad de Girona en la asignatura Paradigmas de programación
14 En la Universidad Mayor de San Simón, Cochabamba, Bolivia se dio una conferencia sobre las interfaces gráficas de usuario en Haskell con especial atención a WxHaskell el 1 de Noviembre de 2007 El departamento de ciencias de la computación de la universidad de Utrecht, Holanda tiene varias aplicaciones de investigación que usan WxHaskell (El Dazzle es uno de ellos) Más sobre WxHaskell
15 El departamento de Sistemas Informáticos y computación de la universidad politécnica de Valencia desarrolló una aplicación para la verificación de sitios Web utilizando lenguajes funcionales el 19 de Julio de 2005, y la interfaz gráfica de esa aplicación fue implementada en WxHaskell Más sobre WxHaskell
16 Reseña técnica a Haskell
17 Atributos y Propiedades
El tipo de un atributo representa su contenedor y su valor text :: Attr (Button a) String get ::w->Attr w a->IO a A la combinación de atributo y valor se le llama propiedad ( :=) :: Attr w a->a->Prop w set ::w->[Prop w]->IO ()
18 Atributos y Propiedades exclamation :: Button a->IO () exclamation b = do s <- get b text set b [text := s++"!"]
( :~) :: Attr w a->(a->a)->Prop w
exclamation b = set b [text :~ (++"!")]
19 Atributos y Propiedades Como la clase Window de wxWidgets posee un atributo de texto, todo tipo de ventanas pueden tenerlo text :: Attr (Window a) String De esta manera no hay que definir atributos de forma separada get ::w->Attr w a->IO a get w (Attr getter setter) = getter w data Prop w = a: (Attr w a) := a | a: (Attr w a) :» (a->a)
20 Seguridad
wxHaskell impone una fuerte disciplina de tipos en wxWidgets
El tratamiento de memoria se realiza de forma automática
Comprueba punteros no inicializados, lanzando una excepción en Haskell
Existe una estructura jerárquica entre los Widgets creados
21 Layout
Se aloja en el frame
caption :: String->Layout space :: Int->Int->Layout rule :: Int->Int->Layout boxed :: String->Layout->Layout grid :: Int->Int->[[Layout]]->Layout
22 Primer Programa main :: IO () main = start hello
hello :: IO () hello = do f <- frame [text := "Hello!"] quit <- button f [text := "Quit", on command := close f] set f [layout := widget quit]
23 Librerías Graphics.UI.WX y Graphics.UI.WXCore
WXCore está a bajo nivel Es el núcleo de la interfaz de los wxWidgets Solamente usa abstracción funcional
Sin embargo WX introduce nuevas funcionalidades Está implementada encima de WXCore Mecanismos de abstracción como la sobrecarga
24 Conceptos El frame es la ventana de nivel superior Todas las demás poseen siempre un padre Los panels se incluyen en el frame Los elementos tienen atributos Los nombres de los atributos están sobrecargados La apariencia en la pantalla la establece layout Los controles también tienen atributos
25 Conceptos Son instrucciones a seguir cuando se activan (on) Hay Widgets invisibles (timer, value …) Se basa en un entorno de desarrollo orientado a objetos Los Widgets son punteros a objetos en C++ Atributo + Valor = Propiedad Gracias a la herencia hay atributos compartidos Colisión con el sistema de tipos de Haskell El contenedor sirve para Widgets anidados
26 Conceptos
Alinear, Expandir y Estirar halignLeft :: Layout->Layout — default halignRight :: Layout->Layout halignCenter :: Layout->Layout valignTop :: Layout->Layout — default valignBottom :: Layout->Layout valignCenter :: Layout->Layout
27 Conceptos rigid :: Layout->Layout — default shaped :: Layout->Layout expand :: Layout->Layout
static :: Layout->Layout — default hstretch :: Layout->Layout vstretch :: Layout->Layout
28 Conceptos
Para dividir el espacio entre filas y columnas
hweight :: Int->Layout->Layout vweight :: Int->Layout->Layout Depende del peso de cada elemento
29 Una primera aplicación en Haskell
30 Introducción wxHaskell no es una interfaz diseñada para crear juegos, aún así, hemos elegido poner como ejemplo el conocido juego ASTEROIDS en una versión bastante minimal.
La intención de programar este juego es la de mostrar aspectos interesantes de wxHaskell, que con otras aplicaciones hubiera sido más "costoso" de ver.
Para quien no conozca el juego Asteroids, éste trata de una nave que debe de esquivar infinitas cantidades de asteroides, y en cuanto choca con un asteroide, éste explosiona llevándonos al final del juego.
Página anterior | Volver al principio del trabajo | Página siguiente |