Download ¿Por qué JavaFX?

Document related concepts
no text concepts found
Transcript
JavaFX
Programación Declarativa
Avanzada
Óscar Torreño Tirado
Álvaro Martin Lozano
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
Í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
4
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
5
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.
6
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
7
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.
8
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.
9
Introducción: Características
10
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.
11
Í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
12
¿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”.
13
¿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.
14
¿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.
15
¿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-
start/
16
Í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
17
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
18
Elementos del lenguaje
 JavaFX
permite importar clases Java,
permitecrear objetos y llamar sus
métodos. Por ejemplo:
import
import
import
import
javax.swing.JFrame;
javax.swing.JButton;
java.awt.event.ActionListener;
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);
19
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:
import javafx.ui.*;
import java.lang.System;
Frame {
content: Button {
text: “Pulsame"
action: operation() {
println("Me pulsaste");
}
}
visible: true
}
20
Elementos del lenguaje
 En
ambos casos el resultado sería:
21
Elementos del lenguaje
 Variables:

En JFXS la palabra reservada “var”
encabeza la declaración de una nueva
variable
var nombreDeLaVariable : tipoDeLaVarible [?,+,”[]”] = valor;

Por ejemplo:
var numeros : Number[] = [1,2,3];
// declara la variable "numeros" como un arreglo de 0 o más
// ocurrencias del tipo Number.
22
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’
def nombreDeLaConstante :tipoDeLaConstante [?,+,”[]”]=valor;

Por ejemplo:
def MaximoTam : Number = 302.15;
// declara una constante de tipo Number
23
Elementos del lenguaje
 Expresiones

(I):
Operadores relacionales
 ==
 <>
<
>
 <=
 >=
24
Elementos del lenguaje
 Expresiones

(II):
Operadores booleanos
 and
 or
 not
25
Elementos del lenguaje
 Expresiones

(III):
Operadores aritméticos
+
*
/
%
 +=
 -=
 *=
 /=
 %=
26
Elementos del lenguaje
 Expresiones

(IV):
Otros operadores
 sizeof
 indexof
 If
e1 then e2 else e3
 select
 op()
 x.op()
 (expr)
 reverse
 [number1, next..number2]
27
Elementos del lenguaje
 Expresiones

(V):
Otros operadores
 bind
:
 []
 format
 <<>>
 {}
…
as
28
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.
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.
29
Elementos del lenguaje
 El
operador bind. Ejemplo:
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.
30
Elementos del lenguaje
// 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 f
entro en f
31
Elementos del lenguaje
// 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
32
Elementos del lenguaje
 Literales

y expresiones con Strings:
Las cadenas de caracteres se pueden
declarar con comillas simples o dobles
var s = 'Hola';
var s = "Hola";

Dentro de estas declaraciones pueden
incluirse referencias a variables o a código
encerrado entre llaves ‘{‘ ‘}’
var nombre = 'Pepe';
var s = "Hola {nombre}"; // s = 'Hola Pepe'
33
Elementos del lenguaje
 Arreglos:

Los arreglos son una secuencia de
elementos del mismo tipo
var diasLaborales = ["Lun","Mar","Mie","Jue","Vie"];
var dias = [diasLaborales, ["Sab","Dom"]];
var unoACien = [1..100];
var nums = [1..10 step 2];

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"]]’
34
Elementos del lenguaje

El operador “[]”
 Se
utiliza para expresar una selección de
elementos que cumplen una condición
var nums: = [1,2,3,4];
Var numsMayoresQueDos = nums[n|n > 2];// [3,4]
Var numsMenosLosDosPrimeros = nums[n|indexof n > 1];// [3,4]
 Se
def
def
def
def
def
pueden usar expresiones de rango
days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
weekend = days[5..6]; // los elementos del 5 al 6
weekdays = days[0..<5]; // del 0 al 5 sin incluir al 5
weekend2 = days[5..]; // del 5 al final
days2 = days[0..<]; // toda la secuencia excepto el último
35
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:
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]
36
Elementos del lenguaje
 Funciones:

Se declaran con la palabra reservada
function
function suma (x:Integer, y:Integer) {
return x + y;
}

A diferencia de Java, las funciones en
JavaFX son entidades de primer orden
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
37
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.
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;
}
}
38
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.
function filter (f:function (:Number):Boolean, l:Number []):Number []{
return l[n | f(n)];
}
var listaAFiltrar = [1..100];
println("listaAFiltrar {filter(even(),listaAFiltrar)}");
39
Elementos del lenguaje
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));
}
40
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.
41
Í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
42
Herramientas Necesarias
SDK 1.3.1
+
43
Í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
44
Demo/Tutoriales
Demo
45
Í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
46
Referencias

Web oficial JavaFX


JavaFX API


http://forums.sun.com/forum.jspa?forumID=932
Tutoriales de JavaFX


http://download.oracle.com/docs/cd/E17802_01/jav
afx/javafx/1.3/docs/api/
Foro oficial de JavaFX


http://www.javafx.com
http://download.oracle.com/javafx/tutorials.html
Planet JFX. Wiki de JavaFX con documentación

http://jfx.wikia.com/wiki/Planet_JFX_Wiki
47
¿Preguntas?