groovy & grails

Post on 11-Jun-2015

587 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

arian.pasquali@informant.com.br

quarta-feira, 12 de outubro de 11

top related