47
JavaFX Programación Declarativa Avanzada Óscar Torreño Tirado Álvaro Martin Lozano

JavaFX Programación Declarativa Avanzada Óscar Torreño Tirado Álvaro Martin Lozano

Embed Size (px)

Citation preview

JavaFXProgramación DeclarativaAvanzada

Óscar Torreño TiradoÁlvaro Martin Lozano

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

2

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

3

Introducción: ¿Qué es JavaFX?JavaFX es una nueva familia de tecnologías Java que ayudarán a crear tanto Rich Internet Applications (RIA) como aplicaciones para móviles o de escritorio.El nombre del lenguaje es JavaFX Script, aunque todo hace creer que su fusión con JavaSE es inminente.

RIA: Aplicaciones web que tienen características y capacidades de la aplicaciones de escritorio incluyendo aplicaciones multimedia e interactivas

4

Introducción: Historia (I) Proviene de Form Follows Function (F3),

lenguaje interpretado, desarrollado por Chris Oliver.

JavaFX fue anunciado por Sun Microsystems en mayo de 2007 en la conferencia JavaOne Worldwide Java Developer.

La versión 1.0 fue publicada el 4 de diciembre de 2008.

La versión 1.1 fue publicada el 12 de febrero de 2009.

La versión1.2 fue publicada el 2 de junio de 2009 con soporte completo para linux y solaris, y con mejoras en velocidad.

5

Introducción: Historia (II) La versión 1.3 fue publicada el 23 de

abril de 2010 con mejoras de consumo de memoria en tiempo de ejecución.

En cuanto al futuro, existe una gran controversia. Algunos desarrolladores creen que pueden tener mucho éxito mientras que hay quien piensa que llegó demasiado tarde al mercado.

Oracle está trabajando en la versión 2.0 que traerá cambios bastante importantes. Su integración en JavaSE que incorporará compatibilidad con Swing

6

Introducción: Características Es un lenguaje de scripting. Es declarativo, y estáticamente

tipificado. Está especializado en GUIs. Permite “data binding”. Evaluación incremental. Estructuración y encapsulación de

código.

7

Introducción: Características Posibilidad de instalación directa desde

la web simplemente arrastrando la aplicación al escritorio.

Está integrado con Java Runtime Environment (JRE) por lo que comparte sus características de portabilidad.

Soporta modo de gráficos vectorizados, video y componentes Swing a través de sus APIs.

8

Introducción: Características

9

Introducción: Competidores Como principales competidores tiene a

AJAX, Flash, Flex y AIR de Adobe, Silverlight de Microsoft, Apollo y GWT.

Como ventaja frente a los competidores mencionados posee la facilidad en la creación de GUIs, eficiencia, portabilidad.

Como desventajas su desconocimiento entre los desarrolladores y su tardía incorporación a las tecnologías RIA.

10

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

11

¿Por qué JavaFX? Escribir GUIs es difícil (y molesto),

los lenguajes tradicionales cargan mucho el código con “listeners” y hacen que la implementación de la interfaz sea más extensa que la de la propia aplicación.

Las interfaces por defecto son monótonas, repetitivas y poco atractivas para los usuarios

No se queda en las simples cajas grises rectangulares a las que nos tienen acostumbrados.

No son tan cargadas y dinámicas como las páginas Flash, aunque se pueden implementar.

Java 2D provee mucho de lo que se necesita, pero es complicado de usar para este propósito y no tiene un comportamiento “composicional”.

12

¿Por qué JavaFX?

Ventajas principales (I): Contiene un conjunto de utilidades y

tecnologías que permiten crear aplicaciones con un gran contenido tanto en escritorio como en web y móviles.

Acelera los ciclos de desarrollo, porque proporciona un flujo de trabajo intuitivo que separa la lógica el modelo de interacción y el diseño, que permite realizar prototipos rápidamente, añadiendo flexibilidad al proyecto.

13

¿Por qué JavaFX? Ventajas principales (II):

Reduce los riesgos del proyecto, porque trabaja con tecnologías Java, que ya posee muchos expertos, y se integra muy fácilmente con ella.

Facilidad de aprovechamiento de la funcionalidad de los dispositivos empotrados.

Bajo coste de implementación. La creación de GUIs es rápida, sencilla y potente.

Plataforma completamente gratuita.

14

¿Por qué JavaFX?

Ventajas principales (III): Buen renderizado de gráficos en 2D. Bajo uso de CPU. Excelente gestión de memoria. Lenguaje universal para todas las

plataformas (móviles, web, escritorio, etc.).

Comparación entre Flash/Flex, JavaFX, Silverlight, html5/javascript http://www.timo-ernst.net/misc/riabench-sta

rt/

15

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

16

Elementos del lenguaje

Tipos primitivos: String Boolean Number Integer

Que provienen de los tipos de java: java.lang.String java.lang.Boolean java.lang.Number byte, short, int, long, BigInteger

17

Elementos del lenguaje

JavaFX permite importar clases Java, permitecrear objetos y llamar sus métodos. Por ejemplo:

18

import javax.swing.JFrame;import javax.swing.JButton; import java.awt.event.ActionListener; import java.lang.System;

var frame = new JFrame(); var button = new JButton(“Pulsame"); frame.getContentPane().add(button); button.addActionListener(newActionListener() {

operation actionPerformed(event) { System.out.println("Me pulsaste");}

});frame.pack(); frame.setVisible(true);

Elementos del lenguaje

Sin embargo, utilizar JFSX de esa forma rompe totalmente con la idea de sencillez propuesta por el lenguaje, por lo que una manera más apropiada de escribir el mismo programa sería:

19

import javafx.ui.*;import java.lang.System; Frame {

content: Button { text: “Pulsame" action: operation() {

println("Me pulsaste"); }

} visible: true

}

Elementos del lenguaje

En ambos casos el resultado sería:

20

Elementos del lenguaje

Variables: En JFXS la palabra reservada “var”

encabeza la declaración de una nueva variable

Por ejemplo:

21

var nombreDeLaVariable : tipoDeLaVarible [?,+,”[]”] = valor;

var numeros : Number[] = [1,2,3]; // declara la variable "numeros" como un arreglo de 0 o más // ocurrencias del tipo Number.

Elementos del lenguaje

Constantes: Para declarar constantes se utiliza la

misma sintaxis que en el caso de variables, pero cambiando la palabra ‘var’ por ‘def’

Por ejemplo:

22

def nombreDeLaConstante :tipoDeLaConstante [?,+,”[]”]=valor;

def MaximoTam : Number = 302.15; // declara una constante de tipo Number

Elementos del lenguaje

Expresiones (I): Operadores relacionales

== <> < > <= >=

23

Elementos del lenguaje

Expresiones (II): Operadores booleanos

and or not

24

Elementos del lenguaje Expresiones (III):

Operadores aritméticos + - * / % += -= *= /= %=

25

Elementos del lenguaje

Expresiones (IV): Otros operadores

sizeof indexof If e1 then e2 else e3 select op() x.op() (expr) reverse [number1, next..number2]

26

Elementos del lenguaje

Expresiones (V): Otros operadores

bind : [] format as <<>> {}…

27

Elementos del lenguaje

El operador bind El operador bind realiza una “ligadura” de

una variable a un valor o una expresión. Tiene un comportamiento perezoso.

28

var a : Integer = 7;

var b : Integer = bind a+2; // se liga al valor a+2// sólo se calcula el valor// si se necesita la variable

b

var c : Integer = bind a*3 with inverse;// la expresión with inverse realiza los cambios tanto en c, // cuando a se modifica; como en a, cuando c se modifica.

Elementos del lenguaje

El operador bind. Ejemplo:

29

var a : Integer = 7;

var b : Integer = bind lazy a+2; // se liga al valor a+2// sólo se calcula el valor si se necesita la variable b

var c : Integer = bind a*3 with inverse;// la expresión with inverse realiza los cambios tanto en c, // cuando a se modifica; como en a, cuando c se modifica.

Elementos del lenguaje

30

// Bind no perezoso

var x = [1,2,3,4,5];var y = bind f(x);

x=[1,2];

println("X: {x}");println("Y: {y}");

function f (l:Number []):Number []{    println("entro en f");    return l;}

Salida:

entro en fentro en f

Elementos del lenguaje

31

// Bind perezoso

var x = [1,2,3,4,5];var y = bind lazy f(x);

x=[1,2];

println("X: {x}");println("Y: {y}");

function f (l:Number []):Number []{    println("entro en f");    return l;}

Salida:

entro en f

Elementos del lenguaje

Literales y expresiones con Strings: Las cadenas de caracteres se pueden

declarar con comillas simples o dobles

Dentro de estas declaraciones pueden incluirse referencias a variables o a código encerrado entre llaves ‘{ ‘ ‘} ’

32

var s = 'Hola'; var s = "Hola";

var nombre = 'Pepe'; var s = "Hola {nombre}"; // s = 'Hola Pepe'

Elementos del lenguaje Arreglos:

Los arreglos son una secuencia de elementos del mismo tipo

Como característica tienen que, aunque permite anidamiento de arreglos, el resultado es un arreglo plano, esto es, vardias contiene ‘["Lun", "Mar", "Mie", "Jue", "Vie", "Sab", "Dom"]‘ y no ‘["Lun", "Mar", "Mie", "Jue", "Vie", ["Sab", "Dom"]]’

33

var diasLaborales = ["Lun","Mar","Mie","Jue","Vie"];var dias = [diasLaborales, ["Sab","Dom"]];var unoACien = [1..100];var nums = [1..10 step 2];

Elementos del lenguaje El operador “[]”

Se utiliza para expresar una selección de elementos que cumplen una condición

Se pueden usar expresiones de rango

34

var nums: = [1,2,3,4];Var numsMayoresQueDos = nums[n|n > 2];// [3,4]Var numsMenosLosDosPrimeros = nums[n|indexof n > 1];// [3,4]

def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def weekend = days[5..6]; // los elementos del 5 al 6def weekdays = days[0..<5]; // del 0 al 5 sin incluir al 5def weekend2 = days[5..]; // del 5 al finaldef days2 = days[0..<]; // toda la secuencia excepto el último

Elementos del lenguaje Consultas

A los elementos de un arreglo se puede acceder a través de una consulta, similar al lenguaje SQL. Por ejemplo:

35

var a:Integer[] = select n*n from n in [1..10];// [1,4,9,16,25,36,49,64,81,100] var a:Integer[] = select n*n from n in [1..10] where (n%2==0); // [4,16,36,64,100]

Elementos del lenguaje

Funciones: Se declaran con la palabra reservada function

A diferencia de Java, las funciones en JavaFX son entidades de primer orden

36

function suma (x:Integer, y:Integer) {return x + y;

}

function addN(n: Number): function(:Number): Number { function(x: Number): Number {

x + n }

}// Función que devuelve la función que suma n al valor x // pasado como argumento

Elementos del lenguaje

Funciones (II): Además, podemos pasar como parámetro

a una función otra función por lo que podríamos hacer uso de la programación funcional.

37

function map (f:function (:Number):Number, l:Number []):Number []{ if(l==[]){ return l; }else{ var res = map(f,l[1..]); insert f(l[0]) before res[0]; return res; }}

Elementos del lenguaje

Funciones (III): En el siguiente código podemos ver el uso

de las funciones anteriormente definidas. Además se observa que las posibilidades que ofrecen las funciones de primer orden hacen que el código sea más sencillo.

38

function filter (f:function (:Number):Boolean, l:Number []):Number []{ return l[n | f(n)];}

var listaAFiltrar = [1..100];println("listaAFiltrar {filter(even(),listaAFiltrar)}");

Elementos del lenguaje

39

function map (f:function (:Number):Number, l:Number []):Number []{ if(l==[]){ return l; }else{ var res = map(f,l[1..]); insert f(l[0]) before res[0]; return res; }}

function sumaX (x:Number) : function (:Number) : Number { function(n: Number) : Number { return x + n; }}

def numeros : Number [] = [1..200];var lista : Number [] = numeros[n|(n mod 2 == 0) and (n > 20) and (n < 40)];

function run(){ println(map (sumaX(3), lista));}

Elementos del lenguaje

Además de lo ya visto, JavaFX incluye clases y muchas otras características de Java.

Están alejadas de la parte declarativa del lenguaje.

No son relevantes para la creación de interfaces gráficas, aplicaciones multimedia o aplicaciones RIA.

40

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

41

Herramientas Necesarias

+SDK 1.3.1

42

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

43

Demo/Tutoriales

Demo

44

Índice Introducción

¿Qué es JavaFX? Historia Características Competidores

¿Por qué JavaFX? Elementos del lenguaje Herramientas necesarias Demo/Tutorial Referencias, APIs y documentación

45

Referencias Web oficial JavaFX

http://www.javafx.com JavaFX API

http://download.oracle.com/docs/cd/E17802_01/javafx/javafx/1.3/docs/api/

Foro oficial de JavaFX http://forums.sun.com/forum.jspa?forumID=932

Tutoriales de JavaFX http://download.oracle.com/javafx/tutorials.html

Planet JFX. Wiki de JavaFX con documentación http://jfx.wikia.com/wiki/Planet_JFX_Wiki

46

¿Preguntas?

47