Grails. Introducción



Documentos relacionados
Tema 1. Introducción a JAVA

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

Curso PHP Módulo 1 R-Luis

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

TEMA 2. Agenda. Fundamentos de JAVA

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Manual del Protocolo XML-RPC de Mensajería Negocios

19. Packages o paquetes

Preliminares. Tipos de variables y Expresiones

Introducción al lenguaje de programación java

Introducción al lenguaje Java

Elementos léxicos del lenguaje de programación Java

Programación Orientada a Objetos. Java: Excepciones

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Capacitación Rational Funcional Tester

PROGRAMACIÓN EN PHP. 1. Identificar las características y modalidad de programación bajo PHP.

GENERACIÓN DE CÓDIGO

INDICE Programación Introducción Capitulo 21 BASIC Capitulo 22. COBOL Capitulo 23 DELPHI Capitulo 24. FORTRAN Capitulo 25.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

Modulo 1 El lenguaje Java

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Capítulo II. Arquitectura del Software

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Programación Orientada a Objetos. Java: Excepciones

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

- MANUAL TÉCNICO - Implantación de software de Marketing Online

CLASE # 5 TÉCNICAS DE CAJA BLANCA

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Análisis asintótico: algoritmos recursivos e iterativos

Curso de Spring Framework

Este taller estará orientado a aquellas personas que no han visto jamás Python y también a aquellos que quieran pasar de Python 2 al 3

Capitulo 3. Test Driven Development

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

Introducción a PHP. * No es necesario declarar previamente las variables.

FACULTAD DE INGENIERÍA

Ficheros. fd = open(nombre, modo)

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1

Tarea 1 Programación José Luis Comesaña

AGRUPA P R OBJET E OS 1

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

ACTA DE CONSEJO DE FACULTAD/DEPTO./CENTRO:

MANUAL TÉCNICO WEB SERVICE PROTOCOLO SOAP

Guía a IReport y HQL. Conexión a HSQL utilizando SQL.

TUTORIAL ACADÉMICO. Programación II- Taller de Programación I Fa.CENA. UNNE

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura

11. Algunas clases estándar de Java (II)

Lenguaje de Programación: Go

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

Ejemplos de conversión de reales a enteros

Capítulo 12: Indexación y asociación

MISIÓN UNIVERSIDAD DEL ISTMO VICERRECTORIA ACADÉMICA PROGRAMA ANALÍTICO

JAVA SE STANDARD EDITION

UNIVERSIDAD NACIONAL DE INGENIERÍA CENTRO DE EXTENSIÓN Y PROYECCIÓN SOCIAL

Compilación y ejecución de programas en Java.

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

2. Estructura de un programa en Java

Bases de datos en Excel

Manual del Modelizador. 28 de enero de 2009

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

promedio = nint((notas(1) + notas(2) + notas(3) + & notas(4) + notas(5) + notas(6)) / 6.0) print *, 'Su promedio es', promedio

Curso de Java POO: Programación orientada a objetos

Repaso de las características más importantes de la programación Java y su adaptación a Android

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

7. CONCLUSIONES Y TRABAJOS FUTUROS

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

8. Sentencia return y métodos

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

Figura 1. Símbolo que representa una ALU. El sentido y la funcionalidad de las señales de la ALU de la Figura 1 es el siguiente:

Convirtiendo arboles de expresión lambda en diferentes strings.

PÁGINAS DINÁMICAS WEB CON PHP. Unidad 2 ELEMENTOS DEL LENGUAJE DE PHP

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Uso de excepciones en Java

Capas de la arquitectura de referencia

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Taller de Sistemas de Información 2

PROGRAMACIÓN N C++ CONSTRUCTORES PROG.C++ L11 CONSTRUCTORES DEL LENGUAJE

Ejercicio 7. Hibernate Tools y JPA en Eclipse IDE. Java EE. Ejercicio 7. Instalación Hibernate Tools. Curso de Java EE

GUÍA PARA LA INSTALACIÓN DE MOODLE EN UN COMPUTADOR PERSONAL QUE USA EL SISTEMA OPERATIVO MS. WINDOWS

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Diseño de aplicaciones móviles seguras en Android.

GUIA DE LABORATORIO N 8 A(Netbeans-java,Glassfish)

Conociendo el ambiente de programación de Java. M. en C. Erika Vilches

Nano Taller de Python

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Tema 2. El lenguaje de programación Java. Arrays y cadenas

Pasos para crear un sitio web ASP.Net con el Visual Studio en cualquiera de sus versiones. Unidad 1. Conceptos [ASP.NET EN VISUAL STUDIO]

Transcripción:

Grails Introducción

Quienes soy? Alejandro Mateo, Ingeniero de UDELAR AQuA. it

Que es Grails? Framework de desarrollo web Construido sobre frameworks existentes (hibernate, spring, sitemesh, quartz, etc) Utiliza Groovy como lenguaje de programación Compatible con librerías Java Plugins desarrollados por usuarios Toma principios de RoR

Grails Hay cientos de frameworks para desarrollo web: Struts, Wicket, Cocoon, Click, GWT, JSF, Seam, RIFE, Shale, Spring, Stripes, Tapestry, WebWork, etc Cada uno con distintos niveles de madurez Distintas curvas de aprendizaje

Grails Grails no reinventa la rueda, se basa en frameworks existentes e introduce un lenguaje dinámico Principios: DRY Don t repeat yourself Convention-over-Configuration - minimiza la configuración en archivos externos Groovy Permite desarrollo ágil De la empresa SpringSource, actualmente comprada por VMWare Versión actual 1.3.4

Si los lenguajes fueran barcos JAVA Rails/Grails

Si los lenguajes fueran barcos PHP

Ventajas Desarrollo rápido Alta productividad Reutilización de código No debemos reinventar la rueda, permite concentrarnos en la solución del problema

Configuración del entorno de desarrollo Bajar y extraer la última distribución de Grails desde la página (grails.org) Definir variable GRAILS_HOME apuntando al directorio de Grails Añadir /bin de Grails a la variable PATH del sistema Asegurarse que esté definido el JAVA_HOME apuntando a la JDK Descargar IDE Netbeans 6.9 Sprint STS IntelliJ

Groovy

Características Generales Lenguaje de programación orientado a objetos Alternativa al lenguaje de programación Java Dinámico con funcionalidades similares a la de Python, Ruby, Pearl y Smalltalk Puede compilarse a Java bytecode standard y ser usado en cualquier projecto Java

Características Generales (cont) Closures Código reutilizable y asignable Ej: each Operadores pueden ser sobrecargados Ej: Operador + puede ser usado para suma aritmética o concatenación de Strings Operador de navegación segura:? Comprueba que no haya nulls para continuar

Lenguaje: Strings // Strings normales def nombre = Juan def apellido= Perez assert nombre * 2 == Juan Juan // true // GString def nombrecompleto = "$nombre $apellido" assert nombrecompleto == Juan Perez // true // Strings multi-línea def multi = '''\ Esto es una prueba de strings multi-linea'''

Lenguaje: Strings (cont) // Procesando caracteres assert hola'.tolist() == [ h, o, l, a ] // true def string = una prueba assert string.tolist().unique().sort().join() == abenpru // Invirtiendo palabras string.reverse() == gnirts

Lenguaje: Números Java Soporta tipos primitivos y objetos Tiene clases wrapper para permitir conversión (ej: Integer) Java 5+ tiene autoboxing Groovy Trata todo como objetos a nivel de lenguaje Se utiliza BigDecimal por tipo por defecto para no enteros La sobrecarga de operadores se aplica a todas las operaciones comunes con números Ej: 3 * 4 es lo mismo que 3.multiply(4)

Lenguaje: Números def x = 3 def y = 4 assert x + y == 7 // true assert x.plus(y) == 7 // true assert x instanceof Integer // true assert 4+ 3== 7 // 4.plus(3) assert 4-3== 1 // 4.minus(3) assert 4* 3== 12 // 4.multiply(12) assert 4% 3== 1 // 4.mod(3) assert 4** 3== 64 // 4.power(3) assert 4/ 3== 1.3333333333 // 4.div(3) assert 4.intdiv(3) == 1 // división normal de enteros

Lenguaje: Fechas Casi el mismo soporte que Java Utiliza java.util.date o java.util.calendar Tiene soporte especial para cambiar fechas date2 = date1 + 1.week 3.days + 6.hours More utility methods expected for inputting and outputting dates Posibilidad de cambio con la especificación JSR 310

Lenguaje: Listas, Mapas, Rangos Listas & Mapas Sintaxis especial para literales Métodos comunes adicionales (sobrecarga de operadores) def list = [3, new Date(), 'Jan'] def map = [a: 1, b: 2] Rangos Sintaxis especial para diversos tipos de rangos def letras = 'a'..'z' def numeros = 0..<10

Lenguaje: Listas assert [1,2,3,4] == (1..4) assert [1,2,3] + [1] == [1,2,3,1] assert [1,2,3] << 1 == [1,2,3,1] assert [1,2,3,1] -[1] == [2,3] assert [1,2,3] * 2 == [1,2,3,1,2,3] assert [1,[2,3]].flatten() == [1,2,3] assert [1,2,3].reverse() == [3,2,1] assert [1,2,3].intersect([4,3,1]) == [3,1] assert [1,2,3].collect{ it+3 } == [4,5,6] assert[1,2,3,1].unique().size() == 3 assert [1,2,3,1].count(1) == 2 assert [1,2,3,4].min() == 1 assert [1,2,3,4].max() == 4 assert [1,2,3,4].sum() == 10 assert [4,2,1,3].sort() == [1,2,3,4] assert [4,2,1,3].findAll{ it%2 == 0 } == [4,2]

Lenguaje: Mapas def mapa = [a:1, 'b':2] println mapa // ["a":1, "b":2] println mapa.a// 1 println mapa['a'] // 1 println mapa.keyset() // ["a", "b"]

Lenguaje: Estructuras de control if (1) //... if (object) //... if (list) //... for (item in iterable) { } mimapa.each{ key, value -> println $key : $value }

Lenguaje: Closures Datos y código pueden ser almacenados en variables, ser pasados, combinados en formas estructuradas para formar algoritmos y datos más complejos duplicar = { num -> num * 2 } println duplicar(3) // => 6 procesarluegoimprimir = { num, closure -> num = closure(num); println "num es $num } procesarluegoimprimir(3, doublenum) // => num es 6 procesarluegoimprimir(10) { it / 2 } // => num es 5

Expresiones Regulares a? machea 0 o 1 ocurrencia de a a o string vacío a* machea 0 o más ocurrencias de a string vacío, a, aa, aaa, etc a+ machea 1 o más ocurrencias de a 'a', 'aa', 'aaa', etc a b machea con a o b 'a' or 'b' [woeirjsd] machea cualquier carácter especificado 'w', 'o', 'e', 'i', 'r', 'j', 's', 'd' [1-9] machea cualquier carácter en el rango '1', '2', '3', '4', '5', '6', '7', '8', '9' [^13579] machea cualquier carácter que no está contenido incluso digitos y otros caracteres (ie) agrupar una expresión ie ^a machea un a al comienzo de una línea a a$ machea un a al final de una línea a

Imports por defecto java.io.* java.lang.* java.math.bigdecimal java.math.biginteger java.net.* java.util.* groovy.lang.* groovy.util.*

Looping while (expr) { } for Para cualquier array, colección, Map, etc Se puede usar el for de Java Con closures each() eachwithindex()

Switch Es compatible con Java Maneja cualquier valor para el Switch instanceof (si el valor del case es una clase) expresiones regulares colecciones (incluido rangos) default debe estar al final del switch

Ejemplo de Switch

Statements en varias líneas

Asignaciones múltiples Ejemplos: def (a, b) = [1, 2] //a ==1 y b == 2 def (Integer i, String s) = [1, 'Groovy'] def (a, b, c) = [1,2] a == 1 b == 2 c == null

Paréntesis opcionales Se puede omitir los paréntesis si el método tiene al menos un parámetro println Hola Mundo! ficha.mover desde:[3,4], hasta:[4,5] def bean = new Expando(nombre: Juan", lugar: Montevideo", id:123)

Navegación segura Con?. podemos evitar los NullPointerException

Extras Ejecutar Proceso proc = "ls -l".execute() println(proc.in.text) println(proc.returncode()) Bajar página web print http://www.google.com".tourl().text Agregar un JAR al classpath en tiempo de ejecución this.getclass().classloader.rootloader.addurl(ne w File( nuevojar.jar").tourl())

Builders Surgen por las complicaciones que implican las estructuras de árbol en los lenguajes tradicionales Provee un modo fácil de construir estructuras de datos jerárquicas Lo hace a través de closures Por defecto: NodeBuilder, MarkupBuilder, AntBuilder y SwingBuilder

Tips [1,2,3].each { print it; return } //imprime 123 [1,2,3].each { print it; throw new RuntimeException() } Shuffling [1, 2, 3, 4, 5].sort { Math.random() } Collections.shuffle(list) Gstring como template

Diferencias con JAVA == significa equals para todos los tipos En java == significa identidad para objetos y equals para tipos primitivos Identidad en groovy con is foo.is(bar) Declarando un array int[] a = {1,2,3}; //no funciona en groovy int[] a = [1,2,3] //funciona en groovy

Diferencias con JAVA for (int i=0; i < len; i++) {...} funciona en groovy for (i in 0..len-1) {...} for (i in 0..<len) {...} len.times {...}

Diferencias con JAVA ; son opcionales return es opcional Métodos y clases son por defecto public

Qué es MVC? Modelo-Vista-Controlador Patrón de arquitectura y diseño de software Descrito por primera vez en 1979 Muy utilizado en aplicaciones web

Introducción al patrón MVC

Modelo Capa de lógica del negocio Modela los datos y el comportamiento Responsable de: Consultas a la base Calculos logicos del negocio Procesar órdenes Independiente de la presentación

Vista Capa de presentación Muestra información Muestra resultados de la lógica del negocio No le interesa como se obtuvo la información, o de donde viene (responsabilidad del modelo)

Controlador Capa de control Sirve como la conexión lógica entre las acciones del usuario y los servicios del negocio Responsable de las decisiones de presentación (ej: idioma, niveles de acceso, etc) Un request entra a la aplicación a través de la capa de control, la cuál decidirá como debe ser manejado y que información debe ser retornada

Flujo MVC Flujo de datos en una aplicación MVC