Your SlideShare is downloading. ×
0
Groovy & GrailsDesenvolvimento ágil para    plataforma Java       Luís Bruno P. Nascimento         luisbrunu@gmail.com
Enucomp 2010●   Groovy e Grails – Parte IIntrodução ao Groovy
O Projeto Groovy●   Tudo começou em 29 de    Agosto de 2003, com uma    publicação no blog de    James       Strachan,    ...
O Projeto Groovy  Segundo James:“Minha idéia inicial é fazer uma pequena linguagemdinâmica, que seja compilada diretamente...
O Projeto Groovy● James uniu-se com Bob McWhirter, ejuntos, em 2003 fundaram oficialmente oprojeto Groovy.● Em 2004, funda...
Groovy Hoje●   Linguagem com ascenção mais rápida no    indice do Tiobe Index;●   Do limbo para o 38° lugar entre 200 ling...
Alternativas ao Groovy●   Existem cerca de 240 linguagens compatíveis à    JVM;●   Funcionam junto ao código Java ou são  ...
Alternativas ao Groovy
Groovy ou JRuby●   Sintax do Groovy bem similar à Java;●   Possui todas as vantagens do Ruby;●   Interpolaridade entre Gro...
Tratamento com a JVMfile.java                     file.groovybytecode                        bytecode            Máquina V...
Introdução ao Groovy●   Linguagem ágil e dinâmica para java;●   Muitos recursos foram inspirados em linguagens    como Rub...
Introdução ao Groovy●   Totalmente OO;    ●   Não há tipos primitivos;    ●   TUDO é objetos;        –   O número 1 é um o...
Instalação●   Pré-requisitos:    ●   JDK - http://java.sun.com/javase/downloads●   1° Passo: Download do Groovy:    ●   GD...
Instalação no Windows●   Definir variáveis de ambiente:    ●   Vá em Painel de Controle >> Propriedades do        Sistema ...
Instalação no Windows
Instalação no Linux●   Usando um editor de texto, abra o arquivo    /etc/environment, e adicione os segintes    valores:  ...
Groovy - Características●   Alguns Importes já implícitos;    ●   java.io.*    ●   java.lang.*    ●   java.math.BigDecimal...
Groovy - Características●   Ponto e vírgula e comando return são opcionais;●   Métodos e Classes são public por default, p...
Ferramentas Groovy>>groovysh      ●   Groovy shell;      ●   Executa um código iterativamente.Groovy Shell----------------...
Ferramentas Groovy>>groovyConsole                  ● Console com interface                  gráfica escrito em Groovy pra ...
Ferramentas Groovy>>groovy●   Usado para executar programas e scripts em Groovy;●   Roda programas em Groovy na forma de a...
Ferramentas GroovySuporte às IDEs  –   Netbeans – Groovy e Grails nativo;  –   Eclipse plug-in
Eclipse + Groovy●   Vá no site:    ●   http://groovy.codehaus.org/Eclipse+Plugin●   Escolha a sua versão do eclipse e pegu...
Operadores●   Aritméticos: +, -, *, /, %, **, ... etc●   Comparação: >, <, >=,==, !=,<=> … etc●   Atribuição: =, +=, +=, <...
Operadores●   (<=>)    ●    Operador de comparação que retorna -1, 0 ou 1 se         for menor, igual ou maior que seu arg...
Operadores●   (?.) - Safe Navigation Operator    ●   Acessa um método ou propriedade se o objeto não        for nulo.     ...
Variáveis●   São objetos das classes das quais foram    tipadas;    ●   Podem ser tipadas dinamicamente através da        ...
Números●   Em Groovy, os números são tipados através do    seu tamanho:    1.class                  //java.lang.Integer   ...
Números●   Alguns métodos da classe Number:    ●   times(Closure closure)          5.times {print k}          //kkkkk    ●...
Strings●   String é um conjunto de caracteres.●   Strings Groovy são completamente    MUTÁVEIS.●   Pode ser delimitado por...
Strings●   Strings        String de aspas simples        "Olá, sou uma String!"●   GStrings – Groovy Strings    ●   String...
Strings●   Strings como Arrays    s = Bem vindos ao Enucomp    s.getAt(1)    /* e */    s[1]          /* e */    s[0,20]  ...
Strings●   Brincando com os Operadores    s = Bem vindos ao Enucomp    s +  com Groovy    /*Bem vindos ao Enucomp com    G...
Strings●   Outros métodos interessantes:     s = hello, Groovy     s.capitalize()        /*Hello, Groovy*/     s.center(15...
Strings●   Interpolação de valores em Strings;    ●   Possível apenas em Strings com aspas duplas.        def nome = João ...
Coleções●   List – Coleção de objetos;    def numeros = [1, 2, 3.5]    def string = ["1", 2, "3"]    def tudo = [10, "50",...
Coleções●   List - Alguns métodos úteis:    def list = [1,2,3,9,5]    list.each {print it } //123495    list.reverse()    ...
Coleções●   Range    ●   Representa um intervalo de valores;         def range = (1..4)         range.each {print "$it "} ...
Coleções●   Map    ●    O mesmo que array associativo, dicionários ou         hashes;    ●    Cada entrada é composta por ...
Receber do teclado●   Para brincar recebendo valores do usuário em    Groovy, use isso:     System.in.withReader {        ...
Praticando...1. Imprimir uma String na vertical;2. Imprimir uma String em formato de escada;3. Receber uma linguagem, reto...
Estruturas de Controle●   O que é verdadeiro em Groovy?    ●   Objetos não-nulos;    ●   Números diferentes de 0;    ●   S...
Estruturas de Controle●   Estruturas de decisão:    ●   If else          If(10 > 5){            print Groovy          }   ...
Estruturas de Controle●   Switch    switch(ling) {        case Ruby     :   println   Rails    ;break        case Groovy  ...
Estruturas de Controle●   Switch    ●   Em Groovy, o switch suporta vários tipos, e não só        chars.           switch ...
Estruturas de Controle●   while    def list = [1,2,3]    while (list) {      list.remove(0)    }    assert list == []    w...
Estruturas de Controle●   for     for (variable in iterable) { body }     def store =      for (String i in a..c)   store ...
Exceções●   O tratamento de exceções é igual ao do Java.    A única diferença em termos de exceção é que    no Groovy é op...
Exceçõesdef myMethod() {   string.toLong()}def log = []try {   myMethod()} catch (Exception e) {   log << e.toString()} fi...
Métodos●   Em Groovy, todo método retorna alguma coisa.    Quando nenhum valor é explicitamente    mostrado, ele retorna n...
Métodos●   Podemos declarar métodos com parâmetros    com valores default     def soma(a,b = 2){ println a + b }     soma ...
Closures●   Um bloco de código reutilizável delimitado por chaves.    ●   Semelhante a uma classe interna;    ●   Podem se...
Closures●   Pode conter parâmetros;●   Modifica variáveis declaradas fora da closure;●   Invocados pelo método    ●   call...
Closures Closure cloj1 = {println Hello, World!}// Sem parâmetrodef cloj2 = { obj -> println "Hello, $obj!"}// Parâmetro s...
Closures●   Outros exemplos:      def soma = { a, b ->          print "A soma é: ${a+b}"      }      map = [a:1, b:2]     ...
Praticando...●   Fazer um programinha que receba um número,     imprima-o o número de vezes que o    representa de 0 até e...
Orientação à Objetos●   Classes e Objetos    ●   Classes é uma estrutura que abstrai coisas do mundo        real para o mu...
Orientação à Objetos●   Classes e Objetos    ●   “Oi”, Groovy, 8 são instancias da classe String;    ●   Instanciando uma ...
Orientação à Objetos●   Herança:    ●   Classes tem a capacidade de herdar        comportamento de outras classes;    ●   ...
Meta-Programação●   MOP – Meta-Object Protocol●   Mágica da programação;●   Adicionar comportamento às classes em tempo   ...
Meta-Programação●   Meta Classes    ●   As classes definem o comportamento dos objetos;    ●   As meta classes definem o c...
Meta-Programação●   Adicionando um método à classe String    String.metaClass.digaOla = { lang ->      if(lang == English)...
Java Beanpublic class HelloWorld {    private String nome;    public void setNome(String nome) {       this.nome = nome;  ...
Em Groovypublic class HelloWorld {    private String nome;    public void setNome(String nome) {       this.nome = nome;  ...
Groovy Bean●   Por defaulf as classes são public;●   Métodos modificadores dos atributos são    gerados dinamicamente;●   ...
Groovy Beanclass HelloWorld {           Getters e Setters gerados                             automaticamente    String no...
Groovy Beanclass HelloWorld {                ”Duky Typing”                                  Tipagem dinâmica  def nome  de...
Totalmente em Groovy                                 Closure com parâmetroclass HelloWorld {  def digaHello = {nome-> "Hel...
Java vs Groovypublic class HelloWorld {    private String nome;                         Em java: 18 linhas    public void ...
Referências●   Groovy in Action;●   Introduction to Groovy and Grails    ●   Mohamed Seifeddine●   Getting Started Guide  ...
Referências●   Um pouco de Groovy    ●   Artigo Dev-Media – Java Magazine - Marcelo Castellani●   Slide curso_ruby do ENUC...
Upcoming SlideShare
Loading in...5
×

Curso de Groovy

3,093

Published on

Curso de Groovy e Grails ministrado no ENUCOMP 2010 (Parnaíba - PI)

Published in: Education

Transcript of "Curso de Groovy"

  1. 1. Groovy & GrailsDesenvolvimento ágil para plataforma Java Luís Bruno P. Nascimento luisbrunu@gmail.com
  2. 2. Enucomp 2010● Groovy e Grails – Parte IIntrodução ao Groovy
  3. 3. O Projeto Groovy● Tudo começou em 29 de Agosto de 2003, com uma publicação no blog de James Strachan, o primeiro artigo sobre o que seria o groovy.
  4. 4. O Projeto Groovy Segundo James:“Minha idéia inicial é fazer uma pequena linguagemdinâmica, que seja compilada diretamente emclasses Java e que tenha toda a produtividade eelegante encontrada em Ruby e Python”
  5. 5. O Projeto Groovy● James uniu-se com Bob McWhirter, ejuntos, em 2003 fundaram oficialmente oprojeto Groovy.● Em 2004, fundação do GroovyOne;● Mais desenvolvedores se uniram ao projeto Entre eles Guillaume Laforge, hoje é o gerente oficial do projeto Groovy e líder do Expert Group que padroniza Groovy.
  6. 6. Groovy Hoje● Linguagem com ascenção mais rápida no indice do Tiobe Index;● Do limbo para o 38° lugar entre 200 linguagens em 2 anos e meio de vida; ● Hoje ocupa a 44° posição; ● http://www.tiobe.com/index.php/content/ paperinfo/tpci/index.html ● 1° lugar entre as linguagens da JVM.
  7. 7. Alternativas ao Groovy● Existem cerca de 240 linguagens compatíveis à JVM;● Funcionam junto ao código Java ou são compiladas para formar bytecodes;● Mais sobre o assunto: http://www.is-research.de/info/vmlanguages
  8. 8. Alternativas ao Groovy
  9. 9. Groovy ou JRuby● Sintax do Groovy bem similar à Java;● Possui todas as vantagens do Ruby;● Interpolaridade entre Groovy e Java; ● Arquivos .groovy compilados tornam-se .class; ● Se trocar a extensão .java para .groovy funciona exatamente como o tal;
  10. 10. Tratamento com a JVMfile.java file.groovybytecode bytecode Máquina Virtual Java
  11. 11. Introdução ao Groovy● Linguagem ágil e dinâmica para java;● Muitos recursos foram inspirados em linguagens como Ruby, Python e Smalltalk;● Sintaxe simples, enxuta e similar à linguagem Java;● Interpretada ou Compilada para bytecode;● Linguagem de Scripts;● Open Source;
  12. 12. Introdução ao Groovy● Totalmente OO; ● Não há tipos primitivos; ● TUDO é objetos; – O número 1 é um objeto; – 1.class >> java.lang.Integer; ●● Meta-Programação; ● Adicionar funcionalidades em tempo de execução. – Criar um novo comportamento para classe String.
  13. 13. Instalação● Pré-requisitos: ● JDK - http://java.sun.com/javase/downloads● 1° Passo: Download do Groovy: ● GDK - http://groovy.codehaus.org/Download ● Descompactar os binários do Groovy - Qualquer diretório;● 2° Passo: Definir as variáveis de ambiente e o PATH: ● Variáveis de Ambiente – GROOVY_HOME ● Definir o PATH: – GROOVY_HOME/bin
  14. 14. Instalação no Windows● Definir variáveis de ambiente: ● Vá em Painel de Controle >> Propriedades do Sistema >> Vá na aba Avançado, e clique no botão Variáveis de Ambiente. – Em Variáveis de usuário, crie uma nova com: ● Variável: GROOVY_HOME ● Valor: C:groovy-1.3.4 – Em Variáveis do sistema, edite a variável PATH: ● Adicione no final ;C:groovy-1.3.4bin
  15. 15. Instalação no Windows
  16. 16. Instalação no Linux● Usando um editor de texto, abra o arquivo /etc/environment, e adicione os segintes valores: – JAVA_HOME = "/usr/lib/jvm/java-6-sun" – GROOVY_HOME = "/opt/groovy-1.7.5" ● Adicione ao fim da linha PATH: – /usr/lib/jvm/java-6-sun/bin – /opt/groovy-1.7.5/bin
  17. 17. Groovy - Características● Alguns Importes já implícitos; ● java.io.* ● java.lang.* ● java.math.BigDecimal ● java.math.BigInteger ● java.net.* ● java.util.* ● groovy.lang.* ● groovy.util.*
  18. 18. Groovy - Características● Ponto e vírgula e comando return são opcionais;● Métodos e Classes são public por default, por isso também é opcional o uso dos modificadores;● Pode ser omitido o tipo das variáveis, atributos, assim como o tipo de retorno dos métodos.● Parênteses opcionais em chamadas de métodos com um parâmetro. print "hello" //==>hello 5.plus 5 //==>10 Bruno.concat Nascimento //==> Bruno Nascimento
  19. 19. Ferramentas Groovy>>groovysh ● Groovy shell; ● Executa um código iterativamente.Groovy Shell------------------------------------------------------------------groovy:000> print Olá, eu sou Groovy!’hello, world===> nullgroovy:000> System.out.println("Olá, sou do Java!");hello, world===> null
  20. 20. Ferramentas Groovy>>groovyConsole ● Console com interface gráfica escrito em Groovy pra executar códigos instantaneamente. ● Classes, instancias, methodos soltos, códigos em java...
  21. 21. Ferramentas Groovy>>groovy● Usado para executar programas e scripts em Groovy;● Roda programas em Groovy na forma de arquivos, passando o nome do arquivo.//programa.groovyprintln "Hello, Bruno!"groovy:000>groovy programa.groovygroovy:000>Hello, Bruno!
  22. 22. Ferramentas GroovySuporte às IDEs – Netbeans – Groovy e Grails nativo; – Eclipse plug-in
  23. 23. Eclipse + Groovy● Vá no site: ● http://groovy.codehaus.org/Eclipse+Plugin● Escolha a sua versão do eclipse e pegue a url correspondente;● Adicione em Help >> Install New Software● Colar a url e fazer o download
  24. 24. Operadores● Aritméticos: +, -, *, /, %, **, ... etc● Comparação: >, <, >=,==, !=,<=> … etc● Atribuição: =, +=, +=, <<, <<=, ... etc.● Lógicos: &&, ||, ! … etc● Ternário: a == 2 ? “Dois” : “Outro”● Elvis Operator: ?:● Safe Navigation Operator: ?.
  25. 25. Operadores● (<=>) ● Operador de comparação que retorna -1, 0 ou 1 se for menor, igual ou maior que seu argumento.● (?:) - Elvis Operator String a; a?:"A variável a é nula" //em Groovy String a; //em Java a != null ? a : "A variável a é nula"; ● Se a variável não for nula, retorna ela mesma, senão, retorna a String.
  26. 26. Operadores● (?.) - Safe Navigation Operator ● Acessa um método ou propriedade se o objeto não for nulo. obj?.facaAlgo() //em Groovy //em Java if(obj != null){ obj.facaAlgo(); }
  27. 27. Variáveis● São objetos das classes das quais foram tipadas; ● Podem ser tipadas dinamicamente através da palavra def; String str = String tipada def s = String dinâmica ● Atribuição Múltipla: def (a,b,c) = [2, 4, 6] print a //===> 2
  28. 28. Números● Em Groovy, os números são tipados através do seu tamanho: 1.class //java.lang.Integer 1.class.superclass //java.lang.Number 1000000000.class //java.lang.Long (100**100).class //java.math.BigInteger ● Groovy suporta números de tamanhos imensos. Os números da classe BigInteger se restringem apenas à memória e ao processador da máquina.
  29. 29. Números● Alguns métodos da classe Number: ● times(Closure closure) 5.times {print k} //kkkkk ● upto(Number to, Closure closure) 1.upto 5, {print it } //12345 ● step(Number to, Number stepNumber, Closure c) 0.step( 10, 2 ) {print it} //2,4,6,8,10
  30. 30. Strings● String é um conjunto de caracteres.● Strings Groovy são completamente MUTÁVEIS.● Pode ser delimitado por aspas simples ou "duplas"● Pode ocupar uma ou várias linhas.● Pode ser injetada a ela operações, variáveis...● Métodos destrutivos e não destrutivos
  31. 31. Strings● Strings String de aspas simples "Olá, sou uma String!"● GStrings – Groovy Strings ● Strings interpoladas. Permitem adicionar pedaços de código dentro delas. "1 + 1 = ${1+1}" // 1 + 1 = 2 ● Strings com múltiplas linhas. """String de Multiplas linhas"""
  32. 32. Strings● Strings como Arrays s = Bem vindos ao Enucomp s.getAt(1) /* e */ s[1] /* e */ s[0,20] /* Bp */ s[4..9] /* vindos */
  33. 33. Strings● Brincando com os Operadores s = Bem vindos ao Enucomp s + com Groovy /*Bem vindos ao Enucomp com Groovy*/ s - Enucomp + Groovy /*Bem vindos ao Groovy*/ s = k s * 3 /* kkk */● Obs.: Os operadores são métodos não- destrutivos.
  34. 34. Strings● Outros métodos interessantes: s = hello, Groovy s.capitalize() /*Hello, Groovy*/ s.center(15) /* hello, Groovy */ s.padLeft(16, -) /*---hello, Groovy*/ s.padRight(16, -) /*hello, Groovy---*/ s.reverse() /*yvoorG ,olleh*/ ....
  35. 35. Strings● Interpolação de valores em Strings; ● Possível apenas em Strings com aspas duplas. def nome = João //===>João print "Olá, ${nome}, bem vindo ao curso!" //===>Olá, João, bem vindo ao curso!
  36. 36. Coleções● List – Coleção de objetos; def numeros = [1, 2, 3.5] def string = ["1", 2, "3"] def tudo = [10, "50", """Hello"""] def list = [numeros, string, tudo] list.each{println it} [1, 2, 3.5] [1, 2, 3] [1, 2, 3]
  37. 37. Coleções● List - Alguns métodos úteis: def list = [1,2,3,9,5] list.each {print it } //123495 list.reverse() //[5,9,3,2,1] list.putAt(3,4) //[1,2,3,4,5] list << 6 //[1,2,3,9,5,6] list.pop() //[1,2,3,9,5] list + 10 //1,2,3,4,9,5,10 list - 9 //1,2,3,4,5
  38. 38. Coleções● Range ● Representa um intervalo de valores; def range = (1..4) range.each {print "$it "} //1 2 3 4===> 1..4 (a..c).each {print "$it "} //a b c ===> a..c for (i in 1..10) {println i}
  39. 39. Coleções● Map ● O mesmo que array associativo, dicionários ou hashes; ● Cada entrada é composta por uma chave e um valor;def frameworks = [groovy: "Grails", ruby: "Rails"]def map = [a:(1..4), 10:"Dez"] print framework.groovy //===>Grails print map.a //===>1..4 print map[10] //===>Dez
  40. 40. Receber do teclado● Para brincar recebendo valores do usuário em Groovy, use isso: System.in.withReader { print "Digite algo: " valor = it.readLine() println "Você me disse: ${valor.toUpperCase()}" }
  41. 41. Praticando...1. Imprimir uma String na vertical;2. Imprimir uma String em formato de escada;3. Receber uma linguagem, retorna uma framework;4. Dado um determinado vetor, faça: ● Some todos os elementos; ● Mostre o maior e o meno elemento; ● Mostre os elementos invertidos; ● Ordene todos os elementos;
  42. 42. Estruturas de Controle● O que é verdadeiro em Groovy? ● Objetos não-nulos; ● Números diferentes de 0; ● Strings, GStrings, coleções não-vazias; assert !; assert Olá assert !0; assert 50 assert ![]; assert [2,a] assert !false; assert true assert !null; assert new Object() – Método assert é um método para testes unitários. Se retornar algo false, gera uma exceção.
  43. 43. Estruturas de Controle● Estruturas de decisão: ● If else If(10 > 5){ print Groovy } else{ print Java } ● Operador condicional - ?: def retorno = (1==1) ? "Iguais" : "Diferentes"
  44. 44. Estruturas de Controle● Switch switch(ling) { case Ruby : println Rails ;break case Groovy : println Grails ;break case PHP : println Cake ;break default : println Outra ;break } if(ling.isCase(Ruby)) println Rails else if (ling.isCase(Groovy)) println Grails else if (ling.isCase(PHP)) printlnCake else Outra //Rails //Rails
  45. 45. Estruturas de Controle● Switch ● Em Groovy, o switch suporta vários tipos, e não só chars. switch (10) { case 0 : assert false ;break case 0..9 : assert false ;break case [8,9,11] : assert false ;break case Float : assert false ;break case {it%3 == 0} : assert false ;break case ~/../ : assert true ;break default : assert false ;break }
  46. 46. Estruturas de Controle● while def list = [1,2,3] while (list) { list.remove(0) } assert list == [] while (list.size() < 3) list << list.size()+1 assert list == [1,2,3]
  47. 47. Estruturas de Controle● for for (variable in iterable) { body } def store = for (String i in a..c) store += i assert store == abc def j = 0 for (i in 0..10) { j += i } print j //55
  48. 48. Exceções● O tratamento de exceções é igual ao do Java. A única diferença em termos de exceção é que no Groovy é opcional colocar o throws na assinatura do método, tanto para exceções checadas quanto em não-checadas; ● Com isso, podemos escolher como e quando tratar essas exceções.
  49. 49. Exceçõesdef myMethod() { string.toLong()}def log = []try { myMethod()} catch (Exception e) { log << e.toString()} finally { log << finally}log.each{println it}
  50. 50. Métodos● Em Groovy, todo método retorna alguma coisa. Quando nenhum valor é explicitamente mostrado, ele retorna null.● O return opcional def hello(nome){ println Hello, meu nome é: ${nome} } hello(Bruno) //Hello, meu nome é: Bruno ou hello Bruno //Hello, meu nome é: Bruno
  51. 51. Métodos● Podemos declarar métodos com parâmetros com valores default def soma(a,b = 2){ println a + b } soma 2 //4 soma 2,3 //5● Métodos com parâmetros opcionais int sum(a, Object[] optionals){ for(o in optionals) a+=o a } sum(1) //1 sum(20, 1, 10, 4) //35
  52. 52. Closures● Um bloco de código reutilizável delimitado por chaves. ● Semelhante a uma classe interna; ● Podem ser declarados não só dentro das classes ● Não é executado quando definido, apenas quando for chamado; ● Apenas agem como métodos, mas são objetos normais(groovy.lang.Closure). ● Para entender melhor esse recurso, acesse: http://groovy.codehaus.org/Closures+-+Formal+Definition
  53. 53. Closures● Pode conter parâmetros;● Modifica variáveis declaradas fora da closure;● Invocados pelo método ● call(); ● doCall(); ● ou simplesmente pela seu nome;● Se tiver apenas um parâmetro, não é necessário defini-lo, basta usar a palavra reservada it para referenciá-lo.
  54. 54. Closures Closure cloj1 = {println Hello, World!}// Sem parâmetrodef cloj2 = { obj -> println "Hello, $obj!"}// Parâmetro sem tipo definidodef cloj3 = {println "Hello, $it!"} // Parâmetro acessado pela palavra-chave itcloj2.call(Groovy) //===> Hello, Groovycloj3.doCall(Groovy) //===> Hello, Groovycloj3(Groovy) //===> Hello, Groovy
  55. 55. Closures● Outros exemplos: def soma = { a, b -> print "A soma é: ${a+b}" } map = [a:1, b:2] map.each{ key, value -> map[key] = value * 2 } print map //[a:2, b:4] letras = a..z letrasUpper=[] letras.collect (letrasUpper){it * 2 } println letras //[a, b, c, d, ...] println letrasUpper //[aa, bb, cc, ...]
  56. 56. Praticando...● Fazer um programinha que receba um número, imprima-o o número de vezes que o representa de 0 até ele mesmo. Entrada: 6 Saída: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6
  57. 57. Orientação à Objetos● Classes e Objetos ● Classes é uma estrutura que abstrai coisas do mundo real para o mundo computacional; ● Define o tipo dos objetos; – Se classes fossem formas de bolo, os objetos seriam os bolos; – Objetos são instancias das classes; ● Objetos possuem dados em comportamentos; – Os dados são os atributos; – Comportamentos são os métodos; ● 1, 50, 999 são instancias da classe Integer;
  58. 58. Orientação à Objetos● Classes e Objetos ● “Oi”, Groovy, 8 são instancias da classe String; ● Instanciando uma classe: p = new Pessoa() ● Para os tipos básicos basta fazer isso: s = "String" i = 50 array = [10,20,60] ● Ou do modo brutal... i = new Integer(25) s = new String(Sou uma String)
  59. 59. Orientação à Objetos● Herança: ● Classes tem a capacidade de herdar comportamento de outras classes; ● As classes que provêm os comportamentos herdados são chamadas de super-classes; 1.class //java.lang.Integer 1.class.superclass //java.lang.Number ● Para herdar de outras classes usa-se o extends class Integer extends Number { ... }
  60. 60. Meta-Programação● MOP – Meta-Object Protocol● Mágica da programação;● Adicionar comportamento às classes em tempo de execução; ● Adicionar métodos às classes; ● Adicionar propriedades;● Todas as classes escritas em Groovy herdam de Object e implementam a interface GroovyObject;
  61. 61. Meta-Programação● Meta Classes ● As classes definem o comportamento dos objetos; ● As meta classes definem o comportamento de certas classes ou de suas instancias; – De certa forma até as classes são objetos... public interface GroovyObject { Object invokeMethod(String name, Object args); Object getProperty(String property); void setProperty(String property, Object newValue); MetaClass getMetaClass(); void setMetaClass(MetaClass metaClass); }
  62. 62. Meta-Programação● Adicionando um método à classe String String.metaClass.digaOla = { lang -> if(lang == English) println Hello else if(lang == Swedish) println Hej } Chamando o diga Olá por uma String.digaOla(Swedish) class Pessoa{ String nome, sobrenome } Pessoa.metaClass.getNomeCompleto = { nome + ", " + sobrebome } println new Pessoa(nome:groovy, sobrenome : Grails).getNomeCompleto()
  63. 63. Java Beanpublic class HelloWorld { private String nome; public void setNome(String nome) { this.nome = nome; } public String digaHello(){ return "Hello " + nome + "."; } public static void main(String[] args) { HelloWorld hw = new HelloWorld(); hw.setNome("Bruno"); System.out.println(hw.digaHello()); }}
  64. 64. Em Groovypublic class HelloWorld { private String nome; public void setNome(String nome) { this.nome = nome; } public String digaHello(){ return "Hello " + nome + "."; } public static void main(String[] args) { HelloWorld hw = new HelloWorld(); hw.setNome("Bruno"); System.out.println(hw.digaHello()); }}
  65. 65. Groovy Bean● Por defaulf as classes são public;● Métodos modificadores dos atributos são gerados dinamicamente;● Não é necessário criar um método construtor: p = new Pessoa(nome:Bruno)
  66. 66. Groovy Beanclass HelloWorld { Getters e Setters gerados automaticamente String nome String digaHello(){ Strings Groovy "Hello, ${nome}." (GString) } static void main(args) { def hw = new HelloWorld(nome:"Groovy") print hw.digaHello() }} Parâmetro do construtor
  67. 67. Groovy Beanclass HelloWorld { ”Duky Typing” Tipagem dinâmica def nome def digaHello(){ "Hello, $nome" }}print new HelloWorld(nome:"Groovy").digaHello() ”Script” Groovy solto/livre
  68. 68. Totalmente em Groovy Closure com parâmetroclass HelloWorld { def digaHello = {nome-> "Hello ${nome}"}}print new HelloWorld().digaHello.call("Bruno") Chamada da Closure● Em todos esses exemplos têm o mesmo resultado:>>Hello, Bruno
  69. 69. Java vs Groovypublic class HelloWorld { private String nome; Em java: 18 linhas public void setNome(String nome) { this.nome = nome; } public String digaHello(){ return "Hello " + nome + "."; } public static void main(String[] args) { HelloWorld hw = new HelloWorld(); hw.setNome("Bruno"); System.out.println(hw.digaHello()); } Em Groovy: 4 linhas}class HelloWorld { def digaHello = {nome-> "Hello ${nome}"}}print new HelloWorld().digaHello.call("Bruno")
  70. 70. Referências● Groovy in Action;● Introduction to Groovy and Grails ● Mohamed Seifeddine● Getting Started Guide ● http://groovy.codehaus.org/Getting+Started+Guide● Em Busca do Grails ● Fernando Anselmo● Groovy Documentation ● Oficial docs● Básico do Groovy para quem for aprender Grails ● http://www.itexto.net/devkico/?p=231
  71. 71. Referências● Um pouco de Groovy ● Artigo Dev-Media – Java Magazine - Marcelo Castellani● Slide curso_ruby do ENUCOMP 2008 ● Regis Pires Magalhães
  1. A particular slide catching your eye?

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

×