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?