11
Ejemplo gráfico
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 |