Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "JavaFX Programación Declarativa Avanzada Óscar Torreño Tirado Álvaro Martin Lozano."— Presentation transcript:

1 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 2

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 3

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 4

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  La versión 1.1 fue publicada el 12 de febrero de  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

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 6

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. 7

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. 8

9 Introducción: Características 9

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. 10

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 11

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”. 12

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. 13

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. 14

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  start/ start/ 15

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 16

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 17

18 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);

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: 19 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: 20

21 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.

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’  Por ejemplo: 22 def nombreDeLaConstante :tipoDeLaConstante [?,+,”[]”]=valor; def MaximoTam : Number = ; // declara una constante de tipo Number

23 Elementos del lenguaje  Expresiones (I):  Operadores relacionales  ==  <>  <  >  <=  >= 23

24 Elementos del lenguaje  Expresiones (II):  Operadores booleanos  and  or  not 24

25 Elementos del lenguaje  Expresiones (III):  Operadores aritméticos  +  -  *  /  %  +=  -=  *=  /=  %= 25

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] 26

27 Elementos del lenguaje  Expresiones (V):  Otros operadores  bind  :  []  format as  >  {} … 27

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. 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.

29 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.

30 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 f

31 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

32 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'

33 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];

34 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 6 def weekdays = days[0..<5]; // del 0 al 5 sin incluir al 5 def weekend2 = days[5..]; // del 5 al final def 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: 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]

36 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

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. 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; }

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. 38 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 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)); }

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. 40

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 41

42 Herramientas Necesarias + SDK

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 43

44 Demo/Tutoriales Demo 44

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 45

46 Referencias  Web oficial JavaFX   JavaFX API  afx/javafx/1.3/docs/api/ afx/javafx/1.3/docs/api/  Foro oficial de JavaFX   Tutoriales de JavaFX   Planet JFX. Wiki de JavaFX con documentación  46

47 ¿Preguntas? 47


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

Similar presentations


Ads by Google