Baixar Capítulo

Propaganda
APÊNDICE C
Referências rápidas de GDK API
I
Groovy em Ação
DIERK KÖNIG
COM ANDREW GLOVER, PAUL KING
GUILLAUME LAFORGE E JON SKEET
II
Groovy em Ação
APÊNDICE C
Referências rápidas de GDK API
III
Groovy em Ação
DIERK KÖNIG
COM ANDREW GLOVER, PAUL KING
GUILLAUME LAFORGE E JON SKEET
Rio de Janeiro . 2007
IV
Groovy em Ação
Groovy em Ação
Do original Groovy in Action Copyright © 2007 da Editora Alta Books Ltda.
Authorized translation from English language edition, entitled Groovy in Action, by Dierk König,with
Andrew Glover, Paul King, Guillaume Laforge e Jon Skeet, published by Manning Publications Co.Copyright
© 2007 by Manning Publications Co. PORTUGUESE language edition published by Editora Alta
Books, Copyright © 2007 by Editora Alta Books.
Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste
livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida
sejam quais forem os meios empregados: eletrônico, mecânico, fotográfico, gravação ou quaisquer
outros. Todo o esforço foi feito para fornecer a mais completa e adequada informação, contudo
a editora e o(s) autor(es) não assumem responsabilidade pelos resultados e usos da informação
fornecida. Recomendamos aos leitores testar a informação, bem como tomar todos os cuidados
necessários (como o backup), antes da efetiva utilização. Este livro não contém CD-ROM, disquete
ou qualquer outra mídia.
Erratas e atualizações: Sempre nos esforçamos para entregar a você, leitor, um livro livre de
erros técnicos ou de conteúdo; porém, nem sempre isso é conseguido, seja por motivo de
alteração de software, interpretação ou mesmo quando alguns deslizes constam na versão original
de alguns livros que traduzimos. Sendo assim, criamos em nosso site, www.altabooks.com.br, a
seção Erratas, onde relataremos, com a devida correção, qualquer erro encontrado em nossos
livros.
Avisos e Renúncia de Direitos: Este livro é vendido como está, sem garantia de qualquer tipo,
seja expressa ou implícita.
Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou
comercial são de responsabilidade de seus proprietários. A Editora informa não estar associada
a nenhum produto e/ou fornecedor apresentado no livro. No decorrer da obra, imagens, nomes
de produtos e fabricantes podem ter sido utilizados, e desde já a Editora informa que o uso é
apenas ilustrativo e/ou educativo, não visando ao lucro, favorecimento ou desmerecimento do
produto/fabricante.
Impresso no Brasil
Produção Editorial: Editora Alta Books
Coordenação Editorial: Fernanda Silveira
Tradução: Flávio Martins e Ivan Bosnic
Revisão: Renée Cristine Barbosa
Revisão técnica: Eduardo Velasco
Diagramação: Fernanda Silveira
O código de propriedade intelectual de 1º de Julho de 1992 proíbe expressamente o uso coletivo
sem autorização dos detentores do direito autoral da obra, bem como a cópia ilegal do original.
Esta prática generalizada nos estabelecimentos de ensino, provoca uma brutal baixa nas vendas
dos livros a ponto de impossibilitar os autores de criarem novas obras.
Rua Viúva Cláudio, 291 – Jacaré
Rio de Janeiro – RJ. CEP: 20970-031
Tel: 21 3278-8069/ Fax: 3277-1253
www.altabooks.com.br
e-mail: [email protected]
APÊNDICE C
Referências rápidas de GDK API
Para o amor da minha vida.
- D.K.
V
VI
Groovy em Ação
sumário
introdução
XIV
prefácio
XV
agradecimentos XVII
sobre este livro
XVIII
sobre os autores XXI
sobre o título
XXIII
sobre a ilustração da capa
1
XXIV
Seu caminho para Groovy
1
1.1 A história do Groovy
2
O que é o Groovy? 3; Divertindo-se com Java: integração sem emendas 4; Poder em seu
código: uma linguagem cheia de ferramentas 5; Dirigido à comunidade, porém com suporte
corporativo 8
1.2O que Groovy pode fazer por você 8
Groovy para profissionais Java 9; Groovy para programadores de scripts 9; Groovy para
programadores pragmáticos, extremos e ágeis 10
1.3Executando Groovy
11
Usando groovysh para ‘Hello World’ 11; Usando groovyConsole 14; Usando groovy 15
1.4Compilando e executando Groovy 16
Executando um script compilado Groovy com Java 17; Compilando e rodando com Ant
17
1.5Groovy IDE e suporte do editor 18
IntelliJ IDEA plug-in 19; Plug-in Eclipse 19; Suporte Groovy em outros editores 20
1.6Resumo 20
PARTE 1
2
A LINGUAGEM GROOVY..........................................................................23
Abertura: As bases do Groovy 25
2.1 Aparência geral do código 26
Comentando código Groovy 26; Comparando a sintaxe Groovy com Java 27; Beleza
através da brevidade 27
2.2 Sondando a linguagem com asserções
28
2.3 Groovy num piscar de olhos
30
Declarando classes 31; Usando scripts 31, GroovyBeans 32; Manipulando método 3 3 ;
Números são objetos 34; Usando listas, mapas e escalas 34; Código como objetos: closures
APÊNDICE C
Referências rápidas de GDK API
VII
36; Estruturas de Controle Groovy 38
2.4 O lugar do Groovy no ambiente Java 39
Minha classe é sua classe 39; GDK, a biblioteca Groovy 40; O ciclo de vida Groovy 42
2.5 Resumo 44
3
Os tipos de dados simples do Groovy 47
3.1 Objetos, objetos por toda parte 48
Sistema de tipos do Java – primitivos e referenciais 48; A resposta Groovy – tudo é um
objeto 49; Interoperando com Java – encaixamento e desencaixamento automático 5 1 ;
Sem desencaixamento intermediário 51
3.2 O conceito de typing opcional 52
Atribuindo tipos 52;Tipologia dinâmica versus estática
52
3.3 Cancelando (Overriding) operadores
53
Visão geral de operadores canceláveis (Overridable) 53; Cancelando operadores em ação
55;Fazendo a coerção trabalhar por você 57
3.4 Trabalhando com Strings
58
Variações de literais de string 58; Trabalhando com GStrings 61;Do Java para o Groovy
62;
3.5 Trabalhando com expressões regulares
64
Especificando métodos em literais de strings 65;Aplicando padrões 67;Padrões em ação
69;Padrões e performance 70
3.6 Trabalhando com números
72
Coerção com operadores numéricos 72;Métodos GDK para números 74
3.7 Resumo 75
4
Os tipos de dados coletivos do Groovy
77
4.1 Trabalhando com escalas 78
Especificando escalas 79;Escalas são objetos 80;Escalas em ação 81;tabalhando com listas
83;Especificando listas 83;Usando operadores de lista 84;Usando métodos de lista 86;Listas
em ação 90;
4.3 Trabalhando com Mapas (MAPs)
91
Especificando mapas (MAPs) 92;Usando operadores de mapa 93;Mapas (MAPs) em ação
97;
4.4 Notas sobre coleções Groovy
98
Entendendo modificações concorrentes 98;Distinguindo entre semântica de cópia e de
modificação 99
4.5 Resumo 99
VIII Groovy em Ação
5
Trabalhando com closures
101
5.1 Breve introdução aos closures
102
5.2 O caso para closures 103
Usando iteradores 103;Manipulação de recursos 105
5.3 Declarando closures 107
A declaração simples 107;Usando atribuições para declaração 108;Referindo-se a métodos
como closures 108;Comparando as opções disponíveis 110;
5.4 Usando closures 111
Chamando um closure 111;Mais métodos de closure 113;
5.5 Entendendo escopo 116
O escopo de variável simples 117;O closure scope geral 117;Escopo trabalhando: o teste
clássico de acumulação 120;
5.6 Retorno de closures
121
5.7 Suporte para padrões de projeto
122
Relação ao padrão Visitor 122;Relacionamento com o padrão Builder 123;Relacionamento
com outros padrões 124
5.8 Resumo 124
6
Estruturas de controle Groovy 127
6.1 A verdade Groovy 128
Avaliando testes Boolean 128; Atribuições dentro de testes Boolean 129;
6.2 Estruturas de controle condicionais
131
A indicação humble if 131;O operador condicional ?: 132;A indicação switch
132;Checando sanidade com asserções 135;
6.3 Looping
138
Looping com while 138;Looping com for 138;
6.4 Blocos de saída e métodos
140
Terminação normal: return/break/continue 140;Exceções: throw/try-catch-finally 141;
6.5 Resumo 142
7
Orientação dinâmica a objeto, estilo Groovy 145
7.1 Definindo classes e scripts
146
Definindo campos e variáveis locais 146;Métodos e parâmetros 149;Desreferência segura
com o operador ?. 153;Construtores 154
APÊNDICE C
Referências rápidas de GDK API
IX
7.2 Organizando classes e scripts
156
Relação de arquivo para classe 156;Organizando classes em pacotes 157;Mais
considerações sobre caminhos de classe 160
7.3 Características OO avançadas
162
Usando herança 162;Usando interfaces 162;Multimétodos 163
7.4 Trabalhando com GroovyBeans 164
Declarando Beans 165;Trabalhando com beans 166;Usando métodos bean para qualquer
objeto 169;Campos, accessors, mapas e Expando 170
7.5 Usando características de poder 171
Pedindo objetos com GPaths 171;Injetando o operador spread 175;Categorias mistas com
a palavra-chave use 176
7.6 Programação meta no Groovy 178
Compreendendo o conceito MetaClass 179;Invocação de método e intercessão 180;Intercessão
de método em ação 182;
7.7 Resumo 184
PARTE 2
8
AO REDOR DA BIBLIOTECA GROOVY.......................................................187
Trabalhando com builder 188
8.1 Aprendendo por exemplo – usando um builder 191
Construindo objetos em árvore com NodeBuilder 193;NodeBuilder em ação – um olhar
próximo ao código builder194;Construção compacta com lógica195;
8.3 Trabalhando com MarkupBuilder 197
Construindo XML 197;Construindo HTML 199;
8.4 Automação de tarefas com AntBuilder 200
De scripts Ant para scripts Groovy 201;Como o AntBuilder funciona 202;Scripts de
automação com lógica 203;
8.5 GUIs fáceis com SwingBuilder 204
Lendo uma senha com SwingBuilder 204;Criando widgets Swing 206;Arrumando seus
widgets 209;Referindo-se a widgets 213;Usando ações Swing 215;Usando modelos
216;Colocando tudo junto 218;
8.6 Criando seu próprio Builder
223
Fazendo subclasses de BuilderSupport 224;O exemplo DebugBuilder 226;
8.7 Resumo 228
9
Trabalhando com GDK
231
9.1 Trabalhando com Objects
232
Objetos interativos 232;Métodos convenientes para Object 237;Métodos iterativos de
Object 239;
X
Groovy em Ação
9.2 Trabalhando com arquivos e I/O
242
Atravessando o sistema de arquivos 244;Lendo de fontes de entrada 245;Escrevendo para
destinações de saída 246;Filtros e conversões 248;Fazendo stream de objetos serializados
249;Trabalhando com threads e processos 250;Multilinhas Groovy 251;Integrando
processos externos 252;
9.4 Trabalhando com templates 256
Entendendo o formato template 257;Templates em ação 257;Edições de template avançadas
259;
9.5 Trabalhando com Groovlets 260
Começando com ‘hello world’ 260;O ligamento Groovlet 262;Fazendo templates Groovlets
265;
9.6 Resumo 266
10
Programação para Banco de Dados com Groovy
269
10.1 Operações básicas de banco de dados 271
Preparando o acesso a banco de dados 271;Executando SQL 274;Obtendo
dados278;Juntando tudo 282;
10.2 DataSets para SQL sem SQL 283
Utilizando operações de DataSet 284;Usando DataSet com consultas de banco de dados
287;
10.3 Organizando o trabalho com banco de dados
289
Visão geral da arquitetura 289;Determinando o comportamento da aplicação 2 9 1 ;
Implementando a camada de infra-estrutura 292;Implementando a camada de aplicação
296;
10.4 Groovy e MOR
10.5 Resumo
11
298
299
Integrando Groovy 301
11.1 Preparando-se para a integração
Integrando de forma apropriada 303;Configurando as dependências 304;
11.2 Avaliando expressões e scripts com GroovyShell
305
Começando de forma simples 305;Passando parâmetros dentro de um Binding 307;Criando
classes dinâmicas em tempo de execução 308;Análise gramátical (parsing) de scripts
309;Executando scripts ou classes 310;Parametrização avançada do GroovyShell 310;
11.3 Utilizando o motor de scripts do Groovy
313
Configurando o motor 314;Executando os scripts 314;Definindo um conector de recursos
diferente 315
11.4 Trabalhando com GroovyClassLoader
315
Efetuando parsing e carregando classes Groovy 316;O problema de dependência da galinha
APÊNDICE C
Referências rápidas de GDK API
XI
e do ovo 317;Provendo um carregador de recursos customizado 320;Executando de forma
segura 321
11.5 Integração com Spring
324
Trabalhando com GroovyBeans 325;Beans atualizáveis 327;Scripts alinhados 327;
11.6 O novo Mustang e JSR-223
328
Introdução a JSR-223 328;Gerenciador do motor de script e seus motores de script
329;Motores de script implementando interfaces Compilable e Invocable 330;
11.7 Escolhendo um mecanismo de integração
12
11.8 Resumo
332
333
Trabalhando com XML
335
12.1 Lendo documentos XML 336
Trabalhando com o parser DOM 337;Lendo com o parser do Groovy 341;Lendo com o
parser SAX 345;Lendo com o parser StAX 347;
12.2 Processando XML 348
Processamento in-place 349;Processamento de fluxo 351;Combinação com XPath
355;
12.3 Processamento distribuído com XML
361
Visão geral de web services 362;Lendo RSS e ATOM 363;Usando API baseada em
REST 364;Usando XML-RPC 367;Aplicando SOAP 369;
12.4 Resumo
PARTE 3
13
373
O GROOVY DIÁRIO................................................................................377
Dicas e Truques
379
13.1 Coisas para lembrar 380
Igualdade versus identidade 380;Usando parênteses sabiamente 381;Retornando de
métodos e closures 382;Chamando os métodos no código de builder 382;Acesso qualificado
a ‘‘this’’ 384;Considerando os tipos numéricos 385;Alavancando Ant 386;Scripts são
classes, porém diferentes 389
13.2 Códigos úteis 391
Embaralhar uma coleção 391;Embaralhando texto com expressões regulares 391;Barra
de progresso no console 392;Código com passos que se autocomentam 393;Uso avançado
de GString 394
13.3 Usando groovy pela linha de comando 395
Avaliando um script de linha de comando 395;Usando as opções print e line
396;Usando o modo de escuta 397;Edição in-place pela linha de comando 398;
13.4 Escrevendo scripts de automatização 399
Suportando opções da linha de comando consistentemente 399;Expandindo classpath com
RootLoader 402;Agendando a execução de scripts 404;
XII
Groovy em Ação
13.5 Exemplos de tarefas automatizadas
405
Automatizando ações na web 407;Inspecionando o controle de versões 409;Análise de código
pragmática 410;Mais pontos de interesse 411;
13.6 Planejando o ambiente de trabalho
412
Configuração do ambiente de desenvolvimento 412;Depuração 413;Profiling
417;Refactoring 418;
13.7 Resumo
14
420
Testes Unitários com Groovy 421
14.1 Começando 422
Escrever testes é fácil 423;GroovyTestCase: uma introdução 423;Trabalhando com
GroovyTestCase 424;
14.2 Testes unitários do código Groovy
14.3 Testes unitários do código Java
14.4 Organizando seus testes
425
429
431
14.5 Técnicas de testes avançadas
433
Testando de forma fácil 433;Usando stubs e mocks 435;Usando GroovyLogTestCase
439;
14.6 Integração com IDE
440
Usando GroovyTestSuite 441;Usando AllTestSuite 442;Integração avançada de IDE
444;
14.7 Ferramentas para testes Groovy
446
Cobertura do código com Groovy 446;Extensões de JUnit 448;
14.8 Automatização de build
451
Integração de build com Ant 450;Integração de build com Maven 452;
14.9 Resumo
15
455
Groovy para Windows 457
15.1 Efetuando download e instalação do Scriptom
458
15.2 Por dentro do Scriptom
459
Introdução a Jacob 459;Instanciando um componente ActiveX 460;Invocando métodos
463;Acessando propriedades e valores de retorno 464;Suporte a eventos 465;
15.3 Cenário do mundo real: automatizando localidades
467;
Definindo o formato do nosso documento 468;Modelando a planilha dicionário 469;
Criando o documento Word 471;Produzindo o documento final 472;
15.4 Outras integrações das aplicações 474
APÊNDICE C
Referências rápidas de GDK API
XIII
Acessando o registro do Windows 474;Fazendo o seu próprio sistema de automatização
476;
15.5 Onde obter a documentação
15.6 Resumo
16
477
478
Uma visão do Grails 479
16.1 Preparando o terreno 480
Instalando Grails 480;Arregaçando as mangas 481;
16.2 Projetando o modelo de domínio 484
Pensando em casos de uso 484;Modelando relacionamentos 485;
16.3 Implementando o modelo de domínio
486
Estruturando as classes de domínio 486;Estruturando visualizações e controladores
487;Testando a aplicação web 489;Completando o modelo de domínio 490;
16.4 Customizando visualizações 492
Bootstrapping de dados 492;Trabalhando com Groovy Server Pages
493;Trabalhando com bibliotecas de tag 496;
16.5 Trabalhando com controladores e métodos finders 498
16.6 Elaborando o modelo
501
16.7 Trabalhando com sessão 502
16.8 Terminando 505
Validando restrições 506;Fazendo o deploy da aplicação 507;Despedida 508
apêndice A Instalação e documentação 511
apêndice B Informações da linguagem Groovy
515
apêndice C Referências rápidas de GDK API
519
apêndice D Folha de lembretes
535
XIV
Groovy em Ação
introdução
A primeira vez que integrei o Groovy em um projeto foi há quase dois anos. Existe uma longa e
rica história sobre o uso de “linguagens de script” como uma cola flexível para juntar, de
maneiras diferentes, grandes componentes modulares de uma variedade de frameworks. Groovy
é uma linguagem dessa tradição particularmente interessante, porque não foge da sofisticação
lingüística na busca pela programação concisa, especialmente nos assuntos ligados a XML, onde
é particularmente forte. Groovy vai além da tradição de “cola” das linguagens de script e tornase efetivamente uma linguagem de implementação do seu próprio jeito. Na verdade, embora
Groovy seja freqüentemente pensado e referenciado como uma linguagem de script, ele é realmente
muito mais do que isso.
É uma tradição das linguagens de script possuir um relacionamento desconfortável com o
sistema lingüístico subjacente, com o qual os frameworks são implementados. No caso do Groovy,
eles foram capazes de alavancar o modelo Java subjacente para conseguir uma integração suave
e eficiente. E por causa das semelhanças lingüísticas entre Java e Groovy, torna-se fácil aos
desenvolvedores alternar entre a programação nesses dois ambientes.
Groovy em ação, de Dierk König e seus co-autores é uma clara e detalhada exposição sobre o que
há de mais moderno no Groovy. Fico feliz por tê-lo na minha biblioteca.
James Gosling
Criador do Java
Sun Microsystems, inc.
APÊNDICE C
Referências rápidas de GDK API
XV
prefácio
O progresso fundamental tem a ver com a reinterpretação das idéias básicas.
- Alfred North Whitehead
Nos últimos anos testemunhamos grandes aprimoramentos no desenvolvimento de softwares
com Java – e bem mais do que isso. É fácil perceber essas conquistas quando você está atarefado
com o trabalho diário de desenvolvimento. Trabalhamos com o suporte elaborado de ferramentas,
temos todos os tipos de frameworks para diversas áreas e descobrimos novas formas ágeis de
organização do desenvolvimento de software em equipes. Cada uma dessas disciplinas –
ferramentas, frameworks e metodologias – forçou os seus limites. Ainda estamos aguardando
que outros dois aspectos importantes do desenvolvimento de software contribuam para trazer o
nosso negócio para frente: gerenciamento de habilidades pessoais e linguagens de programação.
A linguagem importa, sim. Ela determina como você percebe o mundo – e determina o seu
mundo. A sua linguagem de programação determina como você pensa sobre as soluções de
software e os problemas subjacentes. O seu conhecimento das linguagens de programação é a
chave para o seu portfólio pessoal como um desenvolvedor de software.
O código fonte é um meio de comunicação: de você para o compilador; para outros membros da
equipe e de volta para você. Há um aspecto técnico e um aspecto humano nessa comunicação. As
linguagens de programação clássicas são focadas no aspecto técnico e são otimizadas para o
desempenho e consumo de recursos. Outras linguagens são focadas no aspecto humano, tentando
revelar a intenção do programador no código o mais claramente possível. Muitas tentativas
foram feitas para interligar os dois aspectos, desde a Programação Literal até a Programação
Lógica, sendo que nenhuma delas tomou o mundo de assalto.
Enquanto é improvável que Groovy domine as linguagens tradicionais, o que o distingue das
tentativas anteriores é que ele permite uma transição leve entre a codificação centrada em máquinas
e a centrada em humanos. Ele é construído em cima da idéia básica da plataforma Java com uma
nova interpretação da aparência do código. Isso significa que, no nível de bytecode, Groovy é
Java, permitindo uma combinação contínua das duas linguagens. Por exemplo, diferente dos
outros projetos que tentam tornar disponíveis as linguagens de script para a plataforma Java,
uma string literal em Groovy é do tipo java.ling.String. Você ganha o melhor dos dois mundos.
Como uma conseqüência direta, Groovy tem o aproveitamento total de frameworks, sendo que a
biblioteca-padrão Java é o mais importante deles. James Strachan e Bob McWhirter fundaram o
projeto Groovy em 2003, reconhecendo que o desenvolvimento de aplicações em Java é
caracterizado pelo uso de múltiplos frameworks e sua junção para criar um produto. Eles
projetaram o Groovy para otimizar justamente esse tipo de trabalho.
Ao mesmo tempo, Richard Monson-Haefel encontrou James, que o introduziu ao Groovy. Richard
imediatamente reconheceu o potencial do Groovy e sugeriu a submissão de Java Specification
Request (JSR-241). Para encurtar a história, essa JSR passou “sem nenhum problema”, como
Richard colocou em seu blog, graças ao apoio adicional de Geir Magnusson Jr. e à visão do
pessoal da Sun Microsystems. Eles não vêem o Groovy como um rival do Java, mas como um
companheiro que atrai desenvolvedores brilhantes, que em outro caso poderiam migrar para
XVI
Groovy em Ação
Ruby ou Python e dessa forma se afastar da plataforma Java. Desde que JSR foi aceita, Groovy é
a segunda linguagem-padrão para a JVM (depois da própria linguagem Java).
O processo da JSR foi o teste decisivo para a comunidade Groovy. Ele mostrou onde os contribuintes
estavam empurrando em direções diferentes e impôs mais estruturação no desenvolvimento do
que alguns estavam dispostos a aceitar. O desenvolvimento ficou mais lento em 2004. Foi aí que
algumas pessoas chaves entraram e tomaram a frente: Guillaume Laforge e Jeremy Rayner
organizaram o que depois foi chamado de Groovy-One. Isso levou a Especificação da Linguagem
Groovy (GLS) e Kit para Teste de Compatibilidade (TCK), e a um parser novo gerado com base
na especificação descritiva da gramática. Eles fizeram a bola rodar de novo – a bola que agora
estava se tornando uma avalanche.
Desde o começo ficou claro que Groovy iria precisar de um livro como Groovy em ação para
introduzir os novatos à linguagem, prover documentação compreensiva e mostrar o que é possível
com Groovy para despertar a curiosidade e a imaginação do leitor.
Jonh Wilson começou essa aventura e passou o bastão a Scott Stirling, o qual, por sua vez,
encontrou algumas contribuições que eu fiz para Groovy Wiki. Ele me convenceu rapidamente
a me juntar ao esforço de escrever o livro. Nesses tempos eu estava juntando cada bit de informação
que podia encontrar sobre o Groovy dentro do meu conhecimento pessoal para tê-lo disponível
off-line. Escrevi anotações pessoais sobre idiomas Groovy que achei úteis. Colocar tudo isso
dentro de um livro parecia natural, mesmo que fosse apenas para os meus propósitos pessoais.
Infelizmente, Scott teve que renunciar, e eu fiquei sozinho durante a metade de um ano,
empurrando as coisas para frente da melhor forma que sabia. Tive muita sorte de obter apoio de
Andrew e Guillaume, ambos especialistas em Groovy bem conhecidos. Andrew comanda as
séries on-line Practically Groovy e Guillaume não é apenas o gerente do projeto Groovy, ele é
coração e alma do Groovy. Desde o primeiro dia do projeto deste livro, eu estava consciente de
que, pelo fato de inglês não ser a minha língua materna, eu não seria capaz de escrever um livro
completo sem uma ajuda séria. Esta foi a razão inicial por ter chamado Dr. Paul King e Jon
Skeet para se juntarem ao projeto. Não poderia ter tido uma sorte maior. Acontece que eles não
apenas olharam incansavelmente cada sentença deste livro não deixando nenhuma pedra sem
revirar, mas também clarearam os argumentos do livro, tornaram o texto mais acessível e corrigiram
erros e fraquezas. Eles também sugeriram exemplos mais convincentes e, por último, mas não
menos importante, contribuíram com o conteúdo. Este livro jamais poderia ter sido realizado
sem o seu aplicado e cuidadoso trabalho.
Mesmo que nunca aconteça o dia em que vamos escutar o Richard dizer que “Groovy é usado
para controlar os vôos no espaço e resolveu o problema da fome mundial”, eu estaria satisfeito se
Groovy, e este livro, ajudassem a empurrar a nossa profissão de desenvolvimento de software um
centímetro para frente.
Dierk König
APÊNDICE C
Referências rápidas de GDK API
XVII
agradecimentos
Estou muito satisfeito por ter tido a oportunidade de escrever este livro. Isso me ajudou a afiar
minhas habilidades de programação em Groovy e Java. Agradeço aos meus co-autores e editores,
especialmente ao meu editor de desenvolvimento Jackie Carter, eu também aprendi muito sobre
escrever. E mais importante de tudo, eu adorei trabalhar com tantas pessoas brilhantes!
Estou profundamente agradecido à nossa equipe de revisão: Jonas Trindler, Jochen Theodorou,
Jeremy Rayner, Christopher DeBracy, Bob McWhirter, Sam Pullara, John Stump, Graeme Rocher,
Jeff Cunningham, Bas Vodde, Guillaume Alleon, Doug Warren, Derek Lane, Scott Shaw, Norman
Richards, Stuart Caborn, Glen Smith, John Wilson e Martin C. Martin. O prêmio de “revisor
mais observador” vai para Marc Guillemot!
Outros amigos que ajudaram com o livro de um jeito ou de outro: Denis Antonioli, Christian
Bauer, Gerald Bauer, Tim Bray, Jesse Eichar, Benjamin Feiermann, James Gosling, Martin
Huber, Stephan Huber, Andy Hunt, Vincent Massol, Richard Monson-Haefel, Johannes Link,
Rolf Pfenninger, Franck Rasolo, Stefan Roock, Rene Schönfeldt, Tomi Schütz, Scott Stirling,
Roman Strobl, Frank Westphal, John Wilson, Dr. Russel Winder, todo o pessoal do Groovy,
assim como os participantes do programa Manning’s Early Access Program.
Agradecimento especial ao Jochen Theodorou, a liderança técnica do projeto Groovy e ao John
Wilson, o mestre Groovy em programação dinâmica, por estarem sempre disponíveis quando
precisamos de conselhos sobre o funcionamento interno do Groovy. Além disso, Jochen foi
revisor técnico deste livro, e verificou o código pela última vez bem antes do livro ser impresso.
Finalmente, um agradecimento especial ao James Gosling por ter escrito a introdução ao Groovy
em ação.
O livro jamais teria chegado às prateleiras sem o suporte e orientação de todos da Manning
Publications, especialmente os nossos editores Marjan Bace e Jackie Carter. Gostaríamos também
de agradecer ao restante da equipe na Manning: Benjamin Berg, Denis Dalinnik, Gabriel
Dobrescu, Dottie Marsico, Mary Piergies, Iain Shigeoka, Hieu Ta, Tiffany Taylor, Karen Tegtmeyer,
Katie Tennant, Ron Tomich, Helen Trimes, Lianna Wlasiuk e Megan Yockey.
Minha família, especialmente os meus pais, que sempre me apoiaram quando os tempos foram
difíceis e – mais importante – encorajaram-me a perseguir as minhas idéias. Muito obrigado.
XVIII Groovy em Ação
sobre este livro
Guia de viagem
Groovy em ação descreve a linguagem Groovy, apresenta as classes e os métodos da biblioteca que
o Groovy adiciona ao Java Development Kit padrão, e o leva por uma série de assuntos que
muito provavelmente você encontrará no seu trabalho diário com o desenvolvimento. O livro é
composto destas três partes:
Parte 1: A linguagem Groovy
Parte 2: Ao redor da biblioteca Groovy
Parte 3: Groovy cotidiano
Um capítulo introdutório explica o que é Groovy e então a parte 1 começa com uma ampla visão
dos recursos da linguagem Groovy, antes de se aprofundar mais sobre os tipos de dados escalares
e coletivos. A descrição da linguagem inclui uma explanação do conceito de closure que é
onipresente no Groovy, descrevendo como ele se relaciona com e como se diferencia das estruturas
de controle. A parte 1 termina com o modelo de orientação a objetos do Groovy e seu Protocolo
Meta-Object, o qual faz do Groovy a linguagem dinâmica que é.
A parte 2 começa a descrição da biblioteca com a apresentação do conceito de builder do Groovy,
suas diversas implementações e sua relação com os motores de templates, junto com o seu uso
em Groovlets para as aplicações web simples. Segue então uma explanação sobre GDK, com os
aprimoramentos do Groovy para a biblioteca Java padrão. Essa é a parte mais importante da
descrição da biblioteca na parte 2. A biblioteca Groovy brilha com o simples, porém poderoso
suporte para programação para banco de dados e manipulação de XML, e incluímos uma
explanação detalhadas sobre ambos os tópicos. Outra grande vantagem do Groovy é a sua completa
e transparente integração com Java e nós explicamos as opções oferecidas pela biblioteca Groovy
para fazer com que isso funcione.
Se a parte 1 fosse um tutorial e parte 2 uma referência, então a parte 3 seria um livro de receitas.
Ela começa com dicas e truques, avisos sobre as armadilhas e idéias erradas mais comuns,
pedaços de código e soluções para tarefas comuns e então o leva através do aspecto organizacional
do seu trabalho diário com Groovy. Uma grande parte do trabalho diário são os testes unitários
e nós descrevemos em detalhes como Groovy ajuda com isso. E, como muitos programadores
trabalham na plataforma Windows, nós descrevemos como você pode aproveitar o seu
conhecimento do Groovy na integração com os componentes COM e ActiveX.
Um capítulo final de bônus traz uma visão sobre como usar Grails, o framework Groovy para
aplicações web. Grails é o exemplo perfeito para entender e apreciar Groovy. Ele explora
completamente as capacidades dinâmicas do Groovy para injetar os recursos em tempo de
execução enquanto usa as bases sólidas da plataforma corporativa Java e o desempenho e a
escalabilidade das bibliotecas de terceiros como Spring e Hibernate. Grails vale ser estudado por
si só; nós o incluímos na parte 3 para demonstrar como a engenharia consciente pode levar a
novos níveis de produtividade ao se apoiar nos ombros dos gigantes.
APÊNDICE C
Referências rápidas de GDK API
XIX
O livro termina com uma série de apêndices cuja função é servir como um guia rápido.
Quem deveria ler este livro?
Este livro é para todos que querem aprender Groovy como uma nova linguagem de programação
ágil. Os usuários Groovy existentes podem usá-lo para aprofundar os seus conhecimentos; e
tanto os programadores novatos como os experientes podem usá-lo como um guia de referência.
Nós nos encontramos olhando o nosso próprio livro para encontrar os detalhes que esquecemos.
Os novatos irão precisar do conhecimento básico do Java, já que o Groovy depende totalmente
dele; esse assunto não é coberto neste livro.
O conhecimento prévio de alguns tópicos irá facilitar a leitura e o entendimento, mas eles não
são pré-requisitos obrigatórios: padrões de design orientado a objetos, Ant, Maven, JUnit, HTML,
XML e Swing. É benéfico – mas não requerido – que tenha tido o contato com alguma outra
linguagem de script. Isso vai lhe possibilitar juntar o que você já sabe com o que está lendo.
Quando apropriado, nós apontamos as semelhanças e as diferenças entre Groovy e outras
linguagens de script.
Convenções de código
Este livro provê exemplos abundantes que mostram como você pode fazer o uso de cada assunto
abordado. O código fonte nas listagens ou em texto aparece em uma fonte tipográfica como esta
para que seja separada do restante do texto. Além disso, nomes de classes e métodos, propriedades
dos objetos e outros termos e conteúdos do texto relacionados ao código são apresentados com
a mesma fonte tipográfica.
Ocasionalmente, o código é itálico, como em reference.dump(). Nesse caso reference não deve ser
informado literalmente, mas substituído com o conteúdo que é requerido, tal como uma referência
apropriada.
Onde o texto contém pronomes “eu” e “nós”, “nós” se refere a todos os autores. “Eu” se refere
ao autor principal de cada capítulo: Guillaume Laforge para capítulos 11 e 15, Andrew Glover,
para capítulo 14 e Dierk König para os outros capítulos.
A maioria dos exemplos de código contém código Groovy. O código é muito compacto e por isso
o apresentamos “do jeito que é” sem nenhuma omissão. A não ser que seja declarado diferente,
você pode copiar e colar em um novo arquivo e executá-lo na mesma hora. Em casos raros onde
isso não foi possível, nós utilizamos ... reticências.
Java, HTML, XML e entradas de linha de comando podem ser muito verbosos. Em muitos
casos, o código fonte original (disponível on-line) foi reformatado; nós adicionamos quebras de
linha e refizemos os recuos para acomodar o espaço de página disponível no livro. Em casos
raros, quando nem isso foi possível, as marcações de continuação da linha foram adicionadas.
As anotações de código acompanham muitas das listagens, destacando os conceitos importantes.
Em alguns casos, pequenas bolas com números indicam uma explicação adicional que acompanha
a listagem.
Você pode efetuar o download do código fonte de todos os exemplos do livro pelo site da editora
em www.altabooks.com.br.
XX
Groovy em Ação
Mantendo-se atualizado
O mundo não pára de girar quando você termina de escrever o livro, e fazer o livro ser produzido
também leva tempo. Por isso, algumas informações em qualquer livro técnico se tornam
desatualizadas rapidamente, especialmente no mundo dinâmico de linguagens ágeis.
Este livro aborda o Groovy 1.0. Groovy irá ver inúmeros aprimoramentos e quando você estiver
lendo isto, é possível que uma versão mais atualizada esteja disponível. As novas versões do
Groovy sempre vêm com uma lista detalhada de alterações. É bem improvável que qualquer
conceito fundamental do Groovy abordado neste livro mude significativamente antes do Groovy
2.0; e mesmo então, a ênfase estará provavelmente em conceitos e recursos adicionais. Desse
ponto de vista o livro é um investimento sábio, mesmo em um mundo que muda tão rapidamente.
Nós faremos o máximo para manter os recursos on-line deste livro razoavelmente atualizados e
oferecer as informações sobre as mudanças da linguagem e da biblioteca conforme o projeto
segue em frente. Por favor, verifique as atualizações na página web do livro em www.manning.com/
koenig.
Fórum Author Online
A aquisição do livro Groovy em ação inclui o acesso gratuito a um fórum privado gerenciado por
Manning Publications onde você pode fazer os comentários sobre o livro, fazer perguntas técnicas
e receber ajuda dos autores e outros usuários (em inglês). Para acessar o fórum e se inscrever, vá
para a página www.manning.com/koenig. Essa página contém as informações sobre como entrar
no fórum depois que estiver registrado, que tipo de ajuda está disponível e as regras de conduta
do fórum. Ela também contém os links do código fonte dos exemplos do livro, errata e outros
downloads.
O comprometimento da Manning com os nossos leitores é de prover um ponto de encontro
onde os diálogos significantes entre os leitores individuais e entre os leitores e os autores devem
ter o seu lugar. Isso não é o comprometimento para uma determinada quantidade de participação
pela parte dos autores, cuja contribuição permanece voluntária (e gratuita). Nós sugerimos que
você tente fazer aos autores algumas perguntas desafiadoras a fim de despertar a sua participação!
O fórum Author Online e os arquivos das discussões prévias estarão acessíveis pelo site da
editora enquanto o livro estiver em produção.
APÊNDICE C
Referências rápidas de GDK API
XXI
sobre os autores
DIERK KÖNIG é formado em administração de empresas e ciência de computação, e trabalhou
com Java durante dez anos como desenvolvedor de software profissional, mentor e instrutor.
Ele é um revisor reconhecido e/ou colaborador de diversos livros, incluindo os clássicos Extreme
Programming Explained (Kent Beck), Test-Driven Development (Kent Beck), Agile Development in the
Large (Eckstein/Josuttis), JUnit (Johannes Link), JUnit and Fit (Frank Westphal) e Refactorings
(Roock/Lippert).
Dierk publica nas principais revistas alemãs sobre desenvolvimento de software e palestra em
conferências internacionais. Recentemente, Skillmatter London ofereceu o seu curso de
treinamento Groovy e Grails e os eventos relacionados. Ele trabalhou na empresa Canoo
Engineering AG em Basle, Suíça, desde 2000 onde ele é sócio-fundador e membro do comitê
executivo. Dierk fundou o projeto open source Canoo WebTest e tem sido seu gerente desde
2001. As suas atividades de consultoria e engenharia são relacionadas às práticas de
desenvolvimento ágil de software e automatização de testes. Ele se juntou ao projeto Groovy em
2004 e trabalha como colaborador desde então.
ANDREW GLOVER é um especialista reconhecido em frameworks e ferramentas de automatização
de testes. É autor de muitas publicações on-line, incluindo DeveloperWorks da IBM e os portais
ONJava e ONLamp de O’Reilly. É co-autor de Java Testing Patterns. Andrew é um palestrante
freqüente em Grupos de Usuários Java ao redor do país e também é palestrante do grupo No
Fluff Just Stuff Software Symposium. O seu interesse em trazer a qualidade para dentro do
software com tecnologias que diminuem os bugs, reduzem o tempo de integração e testes e
melhoram a estabilidade geral do código o levou a fundar Vanward Technologies em 2001.
Vanward foi comprada pela JNetDirect em 2005 e mudou o nome para Stelligent em 2006. Ele
tem um blog ativo sobre a qualidade de software em thediscoblog.com e testearly.com.
DR. PAUL KING tem uma carreira que abrange os cargos técnicos e gerenciais em uma série de
organizações, apoiada com o profundo conhecimento da tecnologia da informação e dos mercados
de telecomunicações e a paixão pela criação de organizações inovadoras. Durante a sua carreira,
Paul prestou serviços de consultoria técnica e estratégica para centenas de organizações na
América do Norte e Ásia. A primeira fase da carreira do Paul se destaca pela sua contribuição
em vários campos de pesquisa, incluindo desenvolvimento de software orientado a objetos,
métodos formais, telecomunicações e sistemas distribuídos. Ele teve várias publicações em
conferências internacionais e em jornais e revistas da área. É um autor premiado e palestrante
cogitado em conferências.
Atualmente, Paul lidera ASERT (Advanced Software Engineering, Research & Training), a qual
é reconhecida como um centro mundial especialista nas áreas de tecnologia middleware,
desenvolvimento ágil e desenvolvimento e deploy das aplicações para Internet. ASERT adquiriu
experiência em ensinar para milhares de estudantes em mais de 15 países, e forneceu serviços de
consultoria por toda a Ásia Pacífica até os sites governamentais e de e-commerce de alto nível.
No seu tempo livre, Paul é taxista e assistente de dever de casa para os sete filhos.
XXII Groovy em Ação
GUILLAUME LAFORGE tem sido o gerente oficial do projeto Groovy desde o fim de 2004,
depois de ter sido colaborador e desenvolvedor do núcleo do projeto. Ele é também o líder da
especificação JSR-241, o esforço contínuo para padronizar a linguagem Groovy através de Java
Community Process da Sun. Guillaume é a “cara pública” do Groovy e freqüentemente é
entrevistado a respeito do Groovy e apresenta o seu projeto em conferências como JavaOne
2006, onde ele falou sobre como linguagens de script podem simplificar o desenvolvimento
corporativo. Na sua vida profissional, Guillaume é arquiteto de software na empresa OCTO
Technology, uma consultoria francesa focada na arquitetura de software e sistemas de informação,
assim com em metodologias ágeis.
JON SKEET é um adepto recente do Groovy, mas esteve ajudando os desenvolvedores de
software através dos esforços da comunidade durante vários anos, principalmente por meio dos
grupos de notícias, do seu site de artigos sobre C# e Java e, mais recentemente, pelo seu blog
sobre as práticas de desenvolvimento de software. Jon é MVP Microsoft desde 2003 pela sua
contribuição à comunidade C#, e adora ver como os mundos .NET e Java têm constantemente
aprendido algo um do outro. Um dia talvez exista um equivalente para C# em Groovy. No meio
tempo, Jon está aguardando pelo tão distante dia quando poderá ensinar a programação em
pares para os seus filhos gêmeos, que nasceram enquanto este livro estava sendo escrito. Até
então, Jon espera que o seu filho mais velho, Tom, saiba mais sobre a computação do que o seu
pai.
APÊNDICE C
Referências rápidas de GDK API
XXIII
sobre o título
Combinando as introduções, visões gerais e exemplos de como fazer, a série de livros Em Ação
(in Action) são desenhados para ajudar a aprender e lembrar. De acordo com os estudos da
ciência cognitiva, as coisas que as pessoas lembram são aquelas que elas descobriram durante a
exploração automotivada.
Embora na editora ninguém seja cientista cognitivo, estamos convencidos de que, para o
aprendizado se tornar permanente, ele deve passar por estágios de exploração, brincadeira e,
interessantemente, recontar o que está sendo aprendido. As pessoas entendem e lembram as
coisas novas, mas apenas as dominam depois de explorá-las ativamente. Os humanos aprendem
em ação. A parte essencial de um guia Em Ação é que ele é guiado por exemplos. Isso encoraja
o leitor a experimentar as coisas, brincar com o código novo e explorar novas idéias.
Existe outra razão, mais cotidiana, para o título deste livro: nossos leitores são ocupados. Eles
usam os livros para fazer um trabalho ou para resolver um problema. Eles precisam de livros
que lhes permitem entrar e sair rapidamente e aprender somente aquilo que querem. Eles
precisam de livros que os ajudem em ação. Os livros desta série são feitos para esses leitores.
XXIV Groovy em Ação
sobre a ilustração da capa
A figura na capa de Groovy em ação é uma “Danzerina del Japón”, uma dançarina japonesa
tomada de um compêndio de roupas regionais publicado pela primeira vez em Madrid em
1799. Embora o artista possa ter capturado “o espírito” de uma dançarina japonesa, a ilustração
não é precisa nos olhares, roupas ou comportamento de uma mulher japonesa ou gueixa daquela
época, quando comparada aos desenhos japoneses do mesmo período. O trabalho artístico desta
coleção certamente não foi pesquisado detalhadamente!
A página de título do livro diz:
Coleccion general de los Trages que usan actualmente todas las Nacionas Del Mundo desubierto, dibujados
y grabados con la mayor exactitud por R.M.V.A.R. Obra muy util y en special para los que tienen la del
viajero universal.
O que nós traduzimos, tão literalmente quanto possível, como:
Coleção geral de trajes que usam todas as nações do mundo conhecido, desenhados e impressos
com a maior exatidão por R.M.V.A.R. Obra muito útil especialmente para aqueles que se têm
como viajantes universais.
Embora não se saiba nada sobre os desenhistas, gravadores e trabalhadores que ilustraram essa
coleção à mão, a “exatidão” da sua execução é evidente neste desenho. A “Danzerina del Japón”
é apenas uma das figuras dessa coleção colorida. Viajar por prazer era um fenômeno relativamente
novo naquela época e os livros como esse eram populares; apresentando tanto ao turista como ao
viajante os habitantes exóticos, reais e imaginários, de outras partes do mundo.
As maneiras de se vestir mudaram desde então e a sua diversidade nacional e regional, tão rica
naquele tempo, desapareceu. É freqüentemente difícil hoje em dia diferenciar o habitante de
um continente do outro. Talvez, olhando de um ponto de vista mais otimista, tenhamos trocado
a diversidade cultural e visual por uma vida pessoal mais variada. Ou por uma vida intelectual
e tecnológica mais variada e interessante.
Nós da Manning celebramos a criatividade, a iniciativa e a diversão do negócio computacional
com a abrangência do livro baseada na rica diversidade da vida regional de dois séculos atrás,
trazida de volta à vida pelas imagens desta coleção.
Download