Download pdf - Groovy & Grails

Transcript
Page 1: Groovy & Grails

Groovy & GrailsArian Pasquali

quarta-feira, 12 de outubro de 11

Page 2: Groovy & Grails

Arian Pasquali

24 anos

Formado em Sistemas de Informação

Java, Objective-C, Flex, Groovy

SCJP, SCJA, ACE

6 anos de Java

eu

quarta-feira, 12 de outubro de 11

Page 3: Groovy & Grails

Plataforma

Orientação a Objetos

Garbage Collector

Máquina virtual

Multi-plataforma

Interplanetária

Just-in-time compilerJava Community Process

quarta-feira, 12 de outubro de 11

Page 4: Groovy & Grails

Java é fácil?

quarta-feira, 12 de outubro de 11

Page 5: Groovy & Grails

é simplesimport java.io.*;class FileRead {   public static void main(String args[])  {      try{    // Open the file that is the first     // command line parameter    FileInputStream fstream = new FileInputStream("textfile.txt");    // Get the object of DataInputStream    DataInputStream in = new DataInputStream(fstream);   BufferedReader br = new BufferedReader(new InputStreamReader(in));    String strLine;    //Read File Line By Line    while ((strLine = br.readLine()) != null)   {      // Print the content on the console      System.out.println (strLine);    }    //Close the input stream    in.close();    }catch (Exception e){//Catch exception if any      System.err.println("Error: " + e.getMessage());    }  }}

quarta-feira, 12 de outubro de 11

Page 6: Groovy & Grails

Java como linguagem

• Força Orientação a Objetos

• Não dá pra fazer script

• Fortemente tipada

• Não suporta programação funcional

• Verbose syntax

• Difícil de aprender

• A evolução da linguagem é lenta

quarta-feira, 12 de outubro de 11

Page 7: Groovy & Grails

linguagens dinâmicas ganhando popularidade

• Python

• Ruby

quarta-feira, 12 de outubro de 11

Page 8: Groovy & Grails

Java como plataforma

• Máquina virtual

• Gestão de ambiente

• Segurança

• Performance

• Mão de obra

quarta-feira, 12 de outubro de 11

Page 9: Groovy & Grails

Linguagens portadas pra JVM

• Ruby -> JRuby

• Python -> Jython

• Lisp -> Jatha

• Erlang -> Erjang

• JavaScript -> Rhino

• Lua -> LuaJ

• PHP -> Caucho Quercus

• .........quarta-feira, 12 de outubro de 11

Page 10: Groovy & Grails

mais alternativas?

quarta-feira, 12 de outubro de 11

Page 11: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 12: Groovy & Grails

Groovy extends Javaé Java com super poderes

quarta-feira, 12 de outubro de 11

Page 13: Groovy & Grails

Groovy

• Linguagem dinâmica baseada em Java que roda na JVM

• Com mais recursos

• Syntax mais simples

• MOP - Meta Object Protocol

• Tipagem dinâmica opcional

• Clojures

• DSLs

• etc, etc, etcquarta-feira, 12 de outubro de 11

Page 14: Groovy & Grails

Curva de aprendizado

• Baseado no Java

• Baixa curva de aprendizado para desenvolvedores Java/Ruby/Python

• Integração transparente com qualquer código Java existente

quarta-feira, 12 de outubro de 11

Page 15: Groovy & Grails

Interoperabilidade

quarta-feira, 12 de outubro de 11

Page 16: Groovy & Grails

Compilado

file.groovy file.java

The Java Virtual Machine

bytecode bytecode

Compilada. Não interpretada.

quarta-feira, 12 de outubro de 11

Page 17: Groovy & Grails

Uma classe .javaUma classe em Javapublic class HelloWorld { private String name; public String getName() { return name; } public void setName(String message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(String[] args) { HelloWorld hello = new HelloWorld(); hello.setName("Grooooooovy"); System.out.println(hello.message()); }}

quarta-feira, 12 de outubro de 11

Page 18: Groovy & Grails

Uma classe .groovyUma classe em Javapublic class HelloWorld { private String name; public String getName() { return name; } public void setName(String message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(String[] args) { HelloWorld hello = new HelloWorld(); hello.setName("Grooooooovy"); System.out.println(hello.message()); }}

quarta-feira, 12 de outubro de 11

Page 19: Groovy & Grails

Se você já programa em Java

Você já programa em

Groovy

quarta-feira, 12 de outubro de 11

Page 20: Groovy & Grails

a mesma classe em groovy

class HelloWorld { String name def message() { "Hello World of $name" } }def hello = new HelloWorld(name:"Grooovy")println hello.message()

A mesma classeem Groovy

quarta-feira, 12 de outubro de 11

Page 21: Groovy & Grails

• Tipos dinâmicos usando “def”

• Tudo em Groovy é public a não ser que você informe

• Auto getters and setters

• ; no final da linha é opcional

• “return“ é opcional

• () é opcional

quarta-feira, 12 de outubro de 11

Page 22: Groovy & Grails

Lists e Mapsold way

groovy way

quarta-feira, 12 de outubro de 11

Page 23: Groovy & Grails

Lists e Maps

quarta-feira, 12 de outubro de 11

Page 24: Groovy & Grails

Lists e Maps

quarta-feira, 12 de outubro de 11

Page 25: Groovy & Grails

Lists e Maps

quarta-feira, 12 de outubro de 11

Page 26: Groovy & Grails

GString

quarta-feira, 12 de outubro de 11

Page 27: Groovy & Grails

Clojures{Bloco de código ou ponteiro para um método}

quarta-feira, 12 de outubro de 11

Page 28: Groovy & Grails

Operadores

quarta-feira, 12 de outubro de 11

Page 29: Groovy & Grails

Operator overloading

quarta-feira, 12 de outubro de 11

Page 30: Groovy & Grails

Elvis Operator

old way

groovy way

quarta-feira, 12 de outubro de 11

Page 31: Groovy & Grails

Safe Navigation Operator

old way

groovy way

quarta-feira, 12 de outubro de 11

Page 32: Groovy & Grails

Meta-Programming{capacidade de adicionar comportamento em tempo

de execução}

quarta-feira, 12 de outubro de 11

Page 33: Groovy & Grails

Meta-Programming{é possível interceptar chamada de métodos e simular

AOP}

quarta-feira, 12 de outubro de 11

Page 34: Groovy & Grails

Meta-Programmingmas e se o método não existir?

quarta-feira, 12 de outubro de 11

Page 35: Groovy & Grails

Vamos aprender Java?

http://www.flickr.com/photos/oskay/472097903/

quarta-feira, 12 de outubro de 11

Page 36: Groovy & Grails

Instalação

• Download JDK

• Download Groovy binaries

• http://groovy.codehaus.org/Download

quarta-feira, 12 de outubro de 11

Page 37: Groovy & Grails

Instalação

• JAVA_HOME (Java 1.5 ou >)

• GROOVY_HOME

• set PATH

• para testar digite no terminal groovy -v

quarta-feira, 12 de outubro de 11

Page 38: Groovy & Grails

Instalação

• groovysh - comand line client

• groovyconsole - gui client

quarta-feira, 12 de outubro de 11

Page 39: Groovy & Grails

Groovy Console

quarta-feira, 12 de outubro de 11

Page 40: Groovy & Grails

Java Beans mais simples

quarta-feira, 12 de outubro de 11

Page 41: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 42: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 43: Groovy & Grails

Java Beans

quarta-feira, 12 de outubro de 11

Page 44: Groovy & Grails

Java Beans

Nos casos mais típicos, normalmente a nossa classe ficaria assim

quarta-feira, 12 de outubro de 11

Page 45: Groovy & Grails

Leitura de arquivos

quarta-feira, 12 de outubro de 11

Page 46: Groovy & Grails

Lendo arquivos em Java

quarta-feira, 12 de outubro de 11

Page 47: Groovy & Grails

import java.io.*;class FileRead {   public static void main(String args[])  {      try{    // Open the file that is the first     // command line parameter    FileInputStream fstream = new FileInputStream("textfile.txt");    // Get the object of DataInputStream    DataInputStream in = new DataInputStream(fstream);   BufferedReader br = new BufferedReader(new InputStreamReader(in));    String strLine;    //Read File Line By Line    while ((strLine = br.readLine()) != null)   {      // Print the content on the console      System.out.println (strLine);    }    //Close the input stream    in.close();    }catch (Exception e){//Catch exception if any      System.err.println("Error: " + e.getMessage());    }  }}

quarta-feira, 12 de outubro de 11

Page 48: Groovy & Grails

Lendo arquivos em Groovy

quarta-feira, 12 de outubro de 11

Page 49: Groovy & Grails

def file = new File("textfile.txt") file.eachLine { line ->

println line}

moonbug.org

quarta-feira, 12 de outubro de 11

Page 50: Groovy & Grails

Escrevendo arquivos

quarta-feira, 12 de outubro de 11

Page 51: Groovy & Grails

Lendo um diretório

quarta-feira, 12 de outubro de 11

Page 52: Groovy & Grails

Aplicações

• Scripting (builds, banco de dados, geração de código)

• Domain Specific Languages

• Externalização de regra de negócio

• Ex: Fórmulas matemáticas

• Web

quarta-feira, 12 de outubro de 11

Page 53: Groovy & Grails

Então você quer usar

groovy?

quarta-feira, 12 de outubro de 11

Page 54: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 55: Groovy & Grails

Mais um framework web?

Struts

VRaptor

Cocoon

Wicket

Tapestry

JSF

etc, etc e etc...

quarta-feira, 12 de outubro de 11

Page 56: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 57: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 58: Groovy & Grails

Princípios e mantras

• Full-stack

• Convenções no lugar de configurações

• Inspirado no Ruby on Rails, Django e TurboGears

• Não reinventar a roda

• Hibernate, Spring, JEE

• Ser o mais simples possível

• Reduzindo complexidade

• Pra Aumentar produtividade

• “Java”quarta-feira, 12 de outubro de 11

Page 59: Groovy & Grails

Full-stack web framework

• Mapeamento Objeto Relacional basedado no Hibernate

• Camada de View - GSP, SiteMesh

• Injeção de Dependiencia

• Camada de Controller baseado no SpringMVC

• Scaffolding (CRUD)

• Internacionalização (i18n)

• Webserver embutido - tomcat ou jetty

• Build (gerenciamento de dependências) - Maven, Ivy

• Gerenciamento de configurações por ambiente

• Testes - jUnit

quarta-feira, 12 de outubro de 11

Page 60: Groovy & Grails

Grails stack

quarta-feira, 12 de outubro de 11

Page 61: Groovy & Grails

grails create-app udesc

quarta-feira, 12 de outubro de 11

Page 62: Groovy & Grails

um projeto grails

quarta-feira, 12 de outubro de 11

Page 63: Groovy & Grails

quarta-feira, 12 de outubro de 11

Page 64: Groovy & Grails

Configuração por ambiente

quarta-feira, 12 de outubro de 11

Page 65: Groovy & Grails

MVC

• Model

• View

• Controller

quarta-feira, 12 de outubro de 11

Page 66: Groovy & Grails

Domain model

eventos

validação

quarta-feira, 12 de outubro de 11

Page 67: Groovy & Grails

CRUD

quarta-feira, 12 de outubro de 11

Page 68: Groovy & Grails

Querying

quarta-feira, 12 de outubro de 11

Page 69: Groovy & Grails

Dynamic Finders

quarta-feira, 12 de outubro de 11

Page 70: Groovy & Grails

Controllers• Responsável por tratar os requests

• Renderiza ou prepara a resposta

quarta-feira, 12 de outubro de 11

Page 71: Groovy & Grails

Controllers

• Negaciação de conteúdo

• Facilita construção de APIs REST

quarta-feira, 12 de outubro de 11

Page 72: Groovy & Grails

Services

• Não coloque regras de negócio dentro de Controllers. Use Services

• Transacionais por default

quarta-feira, 12 de outubro de 11

Page 73: Groovy & Grails

+ de 680 Plugins

quarta-feira, 12 de outubro de 11

Page 74: Groovy & Grails

Ferramentas

• Eclipse (SpringSource)

• Netbeans

• InteliJIDEA (melhor opção, porém é paga)

• Editor de textos : TextMate, vim, etc

quarta-feira, 12 de outubro de 11

Page 75: Groovy & Grails

duvidas?

quarta-feira, 12 de outubro de 11


Recommended