Groovy & Grails                                        Arian Pasqualiquarta-feira, 12 de outubro de 11
eu                         Arian Pasquali                         24 anos                         Formado em Sistemas de  ...
Orientação a Objetos                                       Plataforma     Multi-plataforma                                ...
Java é fácil?quarta-feira, 12 de outubro de 11
é simples               import java.io.*;               class FileRead                {                  public static voi...
Java como linguagem                      •      Força Orientação a Objetos                      •      Não dá pra fazer sc...
linguagens dinâmicas                    ganhando popularidade                      •      Python                      •   ...
Java como plataforma                      •      Máquina virtual                      •      Gestão de ambiente           ...
Linguagens portadas                                   pra JVM                      •      Ruby -> JRuby                   ...
mais alternativas?quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Groovy extends Java                                    é Java com super poderesquarta-feira, 12 de outubro de 11
Groovy                      • Linguagem dinâmica baseada em Java que                              roda na JVM             ...
Curva de aprendizado                      •      Baseado no Java                      •      Baixa curva de               ...
Interoperabilidadequarta-feira, 12 de outubro de 11
Compilado                                       file.groovy            file.java                                        byte...
Uma classe em Java                                    Uma classe .java                                     public class He...
Uma classe .groovy                                 Uma classe em Java                                    public class Hell...
Se você já programa                  em Java                  Você já               programa em                  Groovyqua...
A mesma classe   a mesma classe em groovy   em Groovy                   class HelloWorld {                     String name...
•       Tipos dinâmicos usando “def”                    •       Tudo em Groovy é public a não ser que você informe        ...
Lists e Maps                    old way                       groovy wayquarta-feira, 12 de outubro de 11
Lists e Mapsquarta-feira, 12 de outubro de 11
Lists e Mapsquarta-feira, 12 de outubro de 11
Lists e Mapsquarta-feira, 12 de outubro de 11
GStringquarta-feira, 12 de outubro de 11
Clojures                 {Bloco de código ou ponteiro para um método}quarta-feira, 12 de outubro de 11
Operadoresquarta-feira, 12 de outubro de 11
Operator overloadingquarta-feira, 12 de outubro de 11
Elvis Operator   old way   groovy wayquarta-feira, 12 de outubro de 11
Safe Navigation                                       Operator      old way     groovy wayquarta-feira, 12 de outubro de 11
Meta-Programming          {capacidade de adicionar comportamento em tempo                             de execução}quarta-f...
Meta-Programming        {é possível interceptar chamada de métodos e simular                                 AOP}quarta-fe...
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 d...
Instalação                      • Download JDK                      • Download Groovy binaries                      • http...
Instalação                      • JAVA_HOME (Java 1.5 ou >)                      • GROOVY_HOME                      • set ...
Instalação                      • groovysh - comand line client                      • groovyconsole - gui clientquarta-fe...
Groovy Consolequarta-feira, 12 de outubro de 11
Java Beans mais simplesquarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Java Beansquarta-feira, 12 de outubro de 11
Java Beans                          Nos casos mais típicos, normalmente a nossa                          classe ficaria ass...
Leitura de arquivosquarta-feira, 12 de outubro de 11
Lendo arquivos em Javaquarta-feira, 12 de outubro de 11
import java.io.*;                  class FileRead                   {                     public static void main(String a...
Lendo arquivos em                                         Groovyquarta-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 arquivosquarta-feira, 12 de outubro de 11
Lendo um diretórioquarta-feira, 12 de outubro de 11
Aplicações                      • Scripting (builds, banco de dados, geração                              de código)      ...
Então                                     você                                      quer                                  ...
quarta-feira, 12 de outubro de 11
Mais um framework web?                       Struts                       VRaptor                       Cocoon            ...
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ç...
Full-stack web                                         framework                      •       Mapeamento Objeto Relacional...
Grails stackquarta-feira, 12 de outubro de 11
grails create-app udescquarta-feira, 12 de outubro de 11
um projeto grailsquarta-feira, 12 de outubro de 11
quarta-feira, 12 de outubro de 11
Configuração por ambientequarta-feira, 12 de outubro de 11
MVC                      •      Model                      •      View                      •      Controllerquarta-feira,...
Domain model    validação    eventosquarta-feira, 12 de outubro de 11
CRUDquarta-feira, 12 de outubro de 11
Queryingquarta-feira, 12 de outubro de 11
Dynamic Findersquarta-feira, 12 de outubro de 11
Controllers                      •       Responsável por tratar os requests                      •       Renderiza ou prep...
Controllers                      •      Negaciação de                             conteúdo                      •      Fac...
Services                      •      Não coloque regras de negócio dentro de Controllers. Use                             ...
+ de 680 Pluginsquarta-feira, 12 de outubro de 11
Ferramentas                      • Eclipse (SpringSource)                      • Netbeans                      • InteliJID...
duvidas                                       ?quarta-feira, 12 de outubro de 11
arianpasquali.com                                     about.me/arianpasquali                                    arian.pasq...
Upcoming SlideShare
Loading in...5
×

Groovy & Grails

581

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
581
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Groovy & Grails

  1. 1. Groovy & Grails Arian Pasqualiquarta-feira, 12 de outubro de 11
  2. 2. eu Arian Pasquali 24 anos Formado em Sistemas de Informação Java, Objective-C, Flex, Groovy SCJP, SCJA, ACE 6 anos de Javaquarta-feira, 12 de outubro de 11
  3. 3. Orientação a Objetos Plataforma Multi-plataforma Garbage Collector Interplanetária Máquina virtual Java Community Process Just-in-time compilerquarta-feira, 12 de outubro de 11
  4. 4. Java é fácil?quarta-feira, 12 de outubro de 11
  5. 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. 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 é lentaquarta-feira, 12 de outubro de 11
  7. 7. linguagens dinâmicas ganhando popularidade • Python • Rubyquarta-feira, 12 de outubro de 11
  8. 8. Java como plataforma • Máquina virtual • Gestão de ambiente • Segurança • Performance • Mão de obraquarta-feira, 12 de outubro de 11
  9. 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. 10. mais alternativas?quarta-feira, 12 de outubro de 11
  11. 11. quarta-feira, 12 de outubro de 11
  12. 12. Groovy extends Java é Java com super poderesquarta-feira, 12 de outubro de 11
  13. 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. 14. Curva de aprendizado • Baseado no Java • Baixa curva de aprendizado para desenvolvedores Java/ Ruby/Python • Integração transparente com qualquer código Java existentequarta-feira, 12 de outubro de 11
  15. 15. Interoperabilidadequarta-feira, 12 de outubro de 11
  16. 16. Compilado file.groovy file.java bytecode bytecode The Java Virtual Machine Compilada. Não interpretada.quarta-feira, 12 de outubro de 11
  17. 17. 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
  18. 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. 19. Se você já programa em Java Você já programa em Groovyquarta-feira, 12 de outubro de 11
  20. 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. 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 • () é opcionalquarta-feira, 12 de outubro de 11
  22. 22. Lists e Maps old way groovy wayquarta-feira, 12 de outubro de 11
  23. 23. Lists e Mapsquarta-feira, 12 de outubro de 11
  24. 24. Lists e Mapsquarta-feira, 12 de outubro de 11
  25. 25. Lists e Mapsquarta-feira, 12 de outubro de 11
  26. 26. GStringquarta-feira, 12 de outubro de 11
  27. 27. Clojures {Bloco de código ou ponteiro para um método}quarta-feira, 12 de outubro de 11
  28. 28. Operadoresquarta-feira, 12 de outubro de 11
  29. 29. Operator overloadingquarta-feira, 12 de outubro de 11
  30. 30. Elvis Operator old way groovy wayquarta-feira, 12 de outubro de 11
  31. 31. Safe Navigation Operator old way groovy wayquarta-feira, 12 de outubro de 11
  32. 32. Meta-Programming {capacidade de adicionar comportamento em tempo de execução}quarta-feira, 12 de outubro de 11
  33. 33. Meta-Programming {é possível interceptar chamada de métodos e simular AOP}quarta-feira, 12 de outubro de 11
  34. 34. Meta-Programming mas e se o método não existir?quarta-feira, 12 de outubro de 11
  35. 35. Vamos aprender Java? http://www.flickr.com/photos/oskay/472097903/quarta-feira, 12 de outubro de 11
  36. 36. Instalação • Download JDK • Download Groovy binaries • http://groovy.codehaus.org/Downloadquarta-feira, 12 de outubro de 11
  37. 37. Instalação • JAVA_HOME (Java 1.5 ou >) • GROOVY_HOME • set PATH • para testar digite no terminal groovy -vquarta-feira, 12 de outubro de 11
  38. 38. Instalação • groovysh - comand line client • groovyconsole - gui clientquarta-feira, 12 de outubro de 11
  39. 39. Groovy Consolequarta-feira, 12 de outubro de 11
  40. 40. Java Beans mais simplesquarta-feira, 12 de outubro de 11
  41. 41. quarta-feira, 12 de outubro de 11
  42. 42. quarta-feira, 12 de outubro de 11
  43. 43. Java Beansquarta-feira, 12 de outubro de 11
  44. 44. Java Beans Nos casos mais típicos, normalmente a nossa classe ficaria assimquarta-feira, 12 de outubro de 11
  45. 45. Leitura de arquivosquarta-feira, 12 de outubro de 11
  46. 46. Lendo arquivos em Javaquarta-feira, 12 de outubro de 11
  47. 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. 48. Lendo arquivos em Groovyquarta-feira, 12 de outubro de 11
  49. 49. def file = new File("textfile.txt") file.eachLine { line -> println line }quarta-feira, 12 de outubro de 11
  50. 50. Escrevendo arquivosquarta-feira, 12 de outubro de 11
  51. 51. Lendo um diretórioquarta-feira, 12 de outubro de 11
  52. 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 • Webquarta-feira, 12 de outubro de 11
  53. 53. Então você quer usar groovy?quarta-feira, 12 de outubro de 11
  54. 54. quarta-feira, 12 de outubro de 11
  55. 55. Mais um framework web? Struts VRaptor Cocoon Wicket Tapestry JSF etc, etc e etc...quarta-feira, 12 de outubro de 11
  56. 56. quarta-feira, 12 de outubro de 11
  57. 57. quarta-feira, 12 de outubro de 11
  58. 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. 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 - jUnitquarta-feira, 12 de outubro de 11
  60. 60. Grails stackquarta-feira, 12 de outubro de 11
  61. 61. grails create-app udescquarta-feira, 12 de outubro de 11
  62. 62. um projeto grailsquarta-feira, 12 de outubro de 11
  63. 63. quarta-feira, 12 de outubro de 11
  64. 64. Configuração por ambientequarta-feira, 12 de outubro de 11
  65. 65. MVC • Model • View • Controllerquarta-feira, 12 de outubro de 11
  66. 66. Domain model validação eventosquarta-feira, 12 de outubro de 11
  67. 67. CRUDquarta-feira, 12 de outubro de 11
  68. 68. Queryingquarta-feira, 12 de outubro de 11
  69. 69. Dynamic Findersquarta-feira, 12 de outubro de 11
  70. 70. Controllers • Responsável por tratar os requests • Renderiza ou prepara a respostaquarta-feira, 12 de outubro de 11
  71. 71. Controllers • Negaciação de conteúdo • Facilita construção de APIs RESTquarta-feira, 12 de outubro de 11
  72. 72. Services • Não coloque regras de negócio dentro de Controllers. Use Services • Transacionais por defaultquarta-feira, 12 de outubro de 11
  73. 73. + de 680 Pluginsquarta-feira, 12 de outubro de 11
  74. 74. Ferramentas • Eclipse (SpringSource) • Netbeans • InteliJIDEA (melhor opção, porém é paga) • Editor de textos : TextMate, vim, etcquarta-feira, 12 de outubro de 11
  75. 75. duvidas ?quarta-feira, 12 de outubro de 11
  76. 76. arianpasquali.com about.me/arianpasquali arian.pasquali@informant.com.brquarta-feira, 12 de outubro de 11
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×