Groovy & Grails
                                        Arian Pasquali




quarta-feira, 12 de outubro de 11
eu
                         Arian Pasquali
                         24 anos

                         Formado em Sistemas de
                         Informação

                         Java, Objective-C, Flex,
                         Groovy

                         SCJP, SCJA, ACE

                         6 anos de Java



quarta-feira, 12 de outubro de 11
Orientação a Objetos

                                       Plataforma
     Multi-plataforma
                                         Garbage Collector

          Interplanetária
                                          Máquina virtual

         Java Community Process     Just-in-time compiler

quarta-feira, 12 de outubro de 11
Java é fácil?




quarta-feira, 12 de outubro de 11
é simples
               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
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
linguagens dinâmicas
                    ganhando popularidade

                      •      Python

                      •      Ruby




quarta-feira, 12 de outubro de 11
Java como plataforma

                      •      Máquina virtual

                      •      Gestão de ambiente

                      •      Segurança

                      •      Performance

                      •      Mão de obra




quarta-feira, 12 de outubro de 11
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
mais alternativas?



quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Groovy extends Java
                                    é Java com super poderes




quarta-feira, 12 de outubro de 11
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

                            •
quarta-feira, 12 de outubro de 11
                                    etc, etc, etc
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
Interoperabilidade




quarta-feira, 12 de outubro de 11
Compilado

                                       file.groovy            file.java




                                        bytecode             bytecode



                                          The Java Virtual Machine


                                    Compilada. Não interpretada.
quarta-feira, 12 de outubro de 11
Uma classe em Java
                                    Uma classe .java
                                     public 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
Uma classe .groovy
                                 Uma classe em Java
                                    public 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
Se você já programa
                  em Java
                  Você já
               programa em
                  Groovy

quarta-feira, 12 de outubro de 11
A mesma classe
   a mesma classe em groovy
   em Groovy
                   class HelloWorld {
                     String name
                     def message() {
                        "Hello World of $name"
                     }
                   }
                   def hello = new HelloWorld(name:"Grooovy")
                   println hello.message()



quarta-feira, 12 de outubro de 11
•       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
Lists e Maps
                    old way




                       groovy way




quarta-feira, 12 de outubro de 11
Lists e Maps




quarta-feira, 12 de outubro de 11
Lists e Maps




quarta-feira, 12 de outubro de 11
Lists e Maps




quarta-feira, 12 de outubro de 11
GString




quarta-feira, 12 de outubro de 11
Clojures
                 {Bloco de código ou ponteiro para um método}




quarta-feira, 12 de outubro de 11
Operadores




quarta-feira, 12 de outubro de 11
Operator overloading




quarta-feira, 12 de outubro de 11
Elvis Operator

   old way


   groovy way




quarta-feira, 12 de outubro de 11
Safe Navigation
                                       Operator
      old way




     groovy way



quarta-feira, 12 de outubro de 11
Meta-Programming
          {capacidade de adicionar comportamento em tempo
                             de execução}




quarta-feira, 12 de outubro de 11
Meta-Programming
        {é possível interceptar chamada de métodos e simular
                                 AOP}




quarta-feira, 12 de outubro de 11
Meta-Programming
                                     mas e se o método não existir?




quarta-feira, 12 de outubro de 11
Vamos aprender Java?




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

quarta-feira, 12 de outubro de 11
Instalação

                      • Download JDK
                      • Download Groovy binaries
                      • http://groovy.codehaus.org/Download


quarta-feira, 12 de outubro de 11
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
Instalação


                      • groovysh - comand line client
                      • groovyconsole - gui client


quarta-feira, 12 de outubro de 11
Groovy Console




quarta-feira, 12 de outubro de 11
Java Beans mais simples



quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Java Beans




quarta-feira, 12 de outubro de 11
Java Beans
                          Nos casos mais típicos, normalmente a nossa
                          classe ficaria assim




quarta-feira, 12 de outubro de 11
Leitura de arquivos



quarta-feira, 12 de outubro de 11
Lendo arquivos em Java



quarta-feira, 12 de outubro de 11
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
Lendo arquivos em
                                         Groovy



quarta-feira, 12 de outubro de 11
def file = new File("textfile.txt")
  file.eachLine { line ->
    println line
   }




quarta-feira, 12 de outubro de 11
Escrevendo arquivos




quarta-feira, 12 de outubro de 11
Lendo um diretório




quarta-feira, 12 de outubro de 11
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
Então
                                     você
                                      quer
                                      usar
                                    groovy?

quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Mais um framework web?
                       Struts
                       VRaptor
                       Cocoon
                       Wicket
                       Tapestry
                       JSF
                       etc, etc e etc...

quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
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
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
Grails stack




quarta-feira, 12 de outubro de 11
grails create-app udesc



quarta-feira, 12 de outubro de 11
um projeto grails




quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Configuração por ambiente




quarta-feira, 12 de outubro de 11
MVC

                      •      Model

                      •      View

                      •      Controller




quarta-feira, 12 de outubro de 11
Domain model


    validação



    eventos


quarta-feira, 12 de outubro de 11
CRUD




quarta-feira, 12 de outubro de 11
Querying




quarta-feira, 12 de outubro de 11
Dynamic Finders




quarta-feira, 12 de outubro de 11
Controllers
                      •       Responsável por tratar os requests

                      •       Renderiza ou prepara a resposta




quarta-feira, 12 de outubro de 11
Controllers

                      •      Negaciação de
                             conteúdo

                      •      Facilita construção de
                             APIs REST




quarta-feira, 12 de outubro de 11
Services
                      •      Não coloque regras de negócio dentro de Controllers. Use
                             Services

                      •      Transacionais por default




quarta-feira, 12 de outubro de 11
+ de 680 Plugins




quarta-feira, 12 de outubro de 11
Ferramentas

                      • Eclipse (SpringSource)
                      • Netbeans
                      • InteliJIDEA (melhor opção, porém é paga)
                      • Editor de textos : TextMate, vim, etc

quarta-feira, 12 de outubro de 11
duvidas
                                       ?


quarta-feira, 12 de outubro de 11
arianpasquali.com
                                     about.me/arianpasquali

                                    arian.pasquali@informant.com.br




quarta-feira, 12 de outubro de 11

Groovy & grails

  • 1.
    Groovy & Grails Arian Pasquali quarta-feira, 12 de outubro de 11
  • 2.
    eu Arian Pasquali 24 anos Formado em Sistemas de Informação Java, Objective-C, Flex, Groovy SCJP, SCJA, ACE 6 anos de Java quarta-feira, 12 de outubro de 11
  • 3.
    Orientação a Objetos Plataforma Multi-plataforma Garbage Collector Interplanetária Máquina virtual Java Community Process Just-in-time compiler quarta-feira, 12 de outubro de 11
  • 4.
    Java é fácil? quarta-feira,12 de outubro de 11
  • 5.
    é simples 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
  • 6.
    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
  • 7.
    linguagens dinâmicas ganhando popularidade • Python • Ruby quarta-feira, 12 de outubro de 11
  • 8.
    Java como plataforma • Máquina virtual • Gestão de ambiente • Segurança • Performance • Mão de obra quarta-feira, 12 de outubro de 11
  • 9.
    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
  • 10.
  • 11.
    quarta-feira, 12 deoutubro de 11
  • 12.
    Groovy extends Java é Java com super poderes quarta-feira, 12 de outubro de 11
  • 13.
    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 • quarta-feira, 12 de outubro de 11 etc, etc, etc
  • 14.
    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
  • 15.
  • 16.
    Compilado file.groovy file.java bytecode bytecode The Java Virtual Machine Compilada. Não interpretada. quarta-feira, 12 de outubro de 11
  • 17.
    Uma classe emJava Uma classe .java public 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
  • 18.
    Uma classe .groovy Uma classe em Java public 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
  • 19.
    Se você jáprograma em Java Você já programa em Groovy quarta-feira, 12 de outubro de 11
  • 20.
    A mesma classe a mesma classe em groovy em Groovy class HelloWorld { String name def message() { "Hello World of $name" } } def hello = new HelloWorld(name:"Grooovy") println hello.message() quarta-feira, 12 de outubro de 11
  • 21.
    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
  • 22.
    Lists e Maps old way groovy way quarta-feira, 12 de outubro de 11
  • 23.
    Lists e Maps quarta-feira,12 de outubro de 11
  • 24.
    Lists e Maps quarta-feira,12 de outubro de 11
  • 25.
    Lists e Maps quarta-feira,12 de outubro de 11
  • 26.
  • 27.
    Clojures {Bloco de código ou ponteiro para um método} quarta-feira, 12 de outubro de 11
  • 28.
  • 29.
  • 30.
    Elvis Operator old way groovy way quarta-feira, 12 de outubro de 11
  • 31.
    Safe Navigation Operator old way groovy way quarta-feira, 12 de outubro de 11
  • 32.
    Meta-Programming {capacidade de adicionar comportamento em tempo de execução} quarta-feira, 12 de outubro de 11
  • 33.
    Meta-Programming {é possível interceptar chamada de métodos e simular AOP} quarta-feira, 12 de outubro de 11
  • 34.
    Meta-Programming mas e se o método não existir? quarta-feira, 12 de outubro de 11
  • 35.
    Vamos aprender Java? http://www.flickr.com/photos/oskay/472097903/ quarta-feira, 12 de outubro de 11
  • 36.
    Instalação • Download JDK • Download Groovy binaries • http://groovy.codehaus.org/Download quarta-feira, 12 de outubro de 11
  • 37.
    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
  • 38.
    Instalação • groovysh - comand line client • groovyconsole - gui client quarta-feira, 12 de outubro de 11
  • 39.
  • 40.
    Java Beans maissimples quarta-feira, 12 de outubro de 11
  • 41.
    quarta-feira, 12 deoutubro de 11
  • 42.
    quarta-feira, 12 deoutubro de 11
  • 43.
  • 44.
    Java Beans Nos casos mais típicos, normalmente a nossa classe ficaria assim quarta-feira, 12 de outubro de 11
  • 45.
  • 46.
    Lendo arquivos emJava quarta-feira, 12 de outubro de 11
  • 47.
    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
  • 48.
    Lendo arquivos em Groovy quarta-feira, 12 de outubro de 11
  • 49.
    def file = newFile("textfile.txt") file.eachLine { line -> println line } quarta-feira, 12 de outubro de 11
  • 50.
  • 51.
  • 52.
    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
  • 53.
    Então você quer usar groovy? quarta-feira, 12 de outubro de 11
  • 54.
    quarta-feira, 12 deoutubro de 11
  • 55.
    Mais um frameworkweb? Struts VRaptor Cocoon Wicket Tapestry JSF etc, etc e etc... quarta-feira, 12 de outubro de 11
  • 56.
    quarta-feira, 12 deoutubro de 11
  • 57.
    quarta-feira, 12 deoutubro de 11
  • 58.
    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
  • 59.
    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
  • 60.
  • 61.
  • 62.
  • 63.
    quarta-feira, 12 deoutubro de 11
  • 64.
  • 65.
    MVC • Model • View • Controller quarta-feira, 12 de outubro de 11
  • 66.
    Domain model validação eventos quarta-feira, 12 de outubro de 11
  • 67.
  • 68.
  • 69.
  • 70.
    Controllers • Responsável por tratar os requests • Renderiza ou prepara a resposta quarta-feira, 12 de outubro de 11
  • 71.
    Controllers • Negaciação de conteúdo • Facilita construção de APIs REST quarta-feira, 12 de outubro de 11
  • 72.
    Services • Não coloque regras de negócio dentro de Controllers. Use Services • Transacionais por default quarta-feira, 12 de outubro de 11
  • 73.
    + de 680Plugins quarta-feira, 12 de outubro de 11
  • 74.
    Ferramentas • Eclipse (SpringSource) • Netbeans • InteliJIDEA (melhor opção, porém é paga) • Editor de textos : TextMate, vim, etc quarta-feira, 12 de outubro de 11
  • 75.
    duvidas ? quarta-feira, 12 de outubro de 11
  • 76.
    arianpasquali.com about.me/arianpasquali arian.pasquali@informant.com.br quarta-feira, 12 de outubro de 11