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?