1. Groovy & Grails
Arian Pasquali
quarta-feira, 12 de outubro de 11
2. eu
Arian Pasquali
24 anos
Formado em Sistemas de
Informação
Java, Objective-C, Flex,
Groovy
SCJP, SCJA, ACE
6 anos de Java
quarta-feira, 12 de outubro de 11
3. Orientação a Objetos
Plataforma
Multi-plataforma
Garbage Collector
Interplanetária
Máquina virtual
Java Community Process Just-in-time compiler
quarta-feira, 12 de outubro de 11
5. é simples
import java.io.*;
class FileRead
{
public static void main(String args[])
{
try{
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("textfile.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}
quarta-feira, 12 de outubro de 11
6. Java como linguagem
• Força Orientação a Objetos
• Não dá pra fazer script
• Fortemente tipada
• Não suporta programação
funcional
• Verbose syntax
• Difícil de aprender
• A evolução da linguagem é lenta
quarta-feira, 12 de outubro de 11
7. linguagens dinâmicas
ganhando popularidade
• Python
• Ruby
quarta-feira, 12 de outubro de 11
8. Java como plataforma
• Máquina virtual
• Gestão de ambiente
• Segurança
• Performance
• Mão de obra
quarta-feira, 12 de outubro de 11
12. Groovy extends Java
é Java com super poderes
quarta-feira, 12 de outubro de 11
13. Groovy
• Linguagem dinâmica baseada em Java que
roda na JVM
• Com mais recursos
• Syntax mais simples
• MOP - Meta Object Protocol
• Tipagem dinâmica opcional
• Clojures
• DSLs
•
quarta-feira, 12 de outubro de 11
etc, etc, etc
14. Curva de aprendizado
• Baseado no Java
• Baixa curva de
aprendizado para
desenvolvedores Java/
Ruby/Python
• Integração transparente
com qualquer código
Java existente
quarta-feira, 12 de outubro de 11
16. Compilado
file.groovy file.java
bytecode bytecode
The Java Virtual Machine
Compilada. Não interpretada.
quarta-feira, 12 de outubro de 11
17. Uma classe 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. Uma classe .groovy
Uma classe em Java
public class HelloWorld {
private String name;
public String getName() {
return name;
}
public void setName(String message) {
this.name = message;
}
public String message() {
return "Hello World of "+this.name;
}
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
hello.setName("Grooooooovy");
System.out.println(hello.message());
}
}
quarta-feira, 12 de outubro de 11
19. Se você já programa
em Java
Você já
programa em
Groovy
quarta-feira, 12 de outubro de 11
20. A mesma classe
a mesma classe em groovy
em Groovy
class HelloWorld {
String name
def message() {
"Hello World of $name"
}
}
def hello = new HelloWorld(name:"Grooovy")
println hello.message()
quarta-feira, 12 de outubro de 11
21. • Tipos dinâmicos usando “def”
• Tudo em Groovy é public a não ser que você informe
• Auto getters and setters
• ; no final da linha é opcional
• “return“ é opcional
• () é opcional
quarta-feira, 12 de outubro de 11
22. Lists e Maps
old way
groovy way
quarta-feira, 12 de outubro de 11
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
52. Aplicações
• Scripting (builds, banco de dados, geração
de código)
• Domain Specific Languages
• Externalização de regra de negócio
• Ex: Fórmulas matemáticas
• Web
quarta-feira, 12 de outubro de 11
53. Então
você
quer
usar
groovy?
quarta-feira, 12 de outubro de 11
58. Princípios e mantras
• Full-stack
• Convenções no lugar de configurações
• Inspirado no Ruby on Rails, Django e TurboGears
• Não reinventar a roda
• Hibernate, Spring, JEE
• Ser o mais simples possível
• Reduzindo complexidade
• Pra Aumentar produtividade
• “Java”
quarta-feira, 12 de outubro de 11
59. Full-stack web
framework
• Mapeamento Objeto Relacional basedado no Hibernate
• Camada de View - GSP, SiteMesh
• Injeção de Dependiencia
• Camada de Controller baseado no SpringMVC
• Scaffolding (CRUD)
• Internacionalização (i18n)
• Webserver embutido - tomcat ou jetty
• Build (gerenciamento de dependências) - Maven, Ivy
• Gerenciamento de configurações por ambiente
• Testes - jUnit
quarta-feira, 12 de outubro de 11