Groovy & GrailsArian Pasquali
quarta-feira, 12 de outubro de 11
Arian Pasquali
24 anos
Formado em Sistemas de Informação
Java, Objective-C, Flex, Groovy
SCJP, SCJA, ACE
6 anos de Java
eu
quarta-feira, 12 de outubro de 11
Plataforma
Orientação a Objetos
Garbage Collector
Máquina virtual
Multi-plataforma
Interplanetária
Just-in-time compilerJava Community Process
quarta-feira, 12 de outubro de 11
Java é fácil?
quarta-feira, 12 de outubro de 11
é simplesimport java.io.*;class FileRead { public static void main(String args[]) { try{ // Open the file that is the first // command line parameter FileInputStream fstream = new FileInputStream("textfile.txt"); // Get the object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine; //Read File Line By Line while ((strLine = br.readLine()) != null) { // Print the content on the console System.out.println (strLine); } //Close the input stream in.close(); }catch (Exception e){//Catch exception if any System.err.println("Error: " + e.getMessage()); } }}
quarta-feira, 12 de outubro de 11
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
• etc, etc, etcquarta-feira, 12 de outubro de 11
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
The Java Virtual Machine
bytecode bytecode
Compilada. Não interpretada.
quarta-feira, 12 de outubro de 11
Uma classe .javaUma classe em Javapublic class HelloWorld { private String name; public String getName() { return name; } public void setName(String message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(String[] args) { HelloWorld hello = new HelloWorld(); hello.setName("Grooooooovy"); System.out.println(hello.message()); }}
quarta-feira, 12 de outubro de 11
Uma classe .groovyUma classe em Javapublic class HelloWorld { private String name; public String getName() { return name; } public void setName(String message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(String[] args) { HelloWorld hello = new HelloWorld(); hello.setName("Grooooooovy"); System.out.println(hello.message()); }}
quarta-feira, 12 de outubro de 11
Se você já programa em Java
Você já programa em
Groovy
quarta-feira, 12 de outubro de 11
a mesma classe em groovy
class HelloWorld { String name def message() { "Hello World of $name" } }def hello = new HelloWorld(name:"Grooovy")println hello.message()
A mesma classeem Groovy
quarta-feira, 12 de outubro de 11
• 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 Mapsold 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-Programmingmas 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}
moonbug.org
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
eventos
validação
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
quarta-feira, 12 de outubro de 11
Top Related