Search
Thursday 23 November 2017
  • :
  • :

Brincando com Groovy – POJOs vs POGOs

groovy-logo-medium

Groovy é uma linguagem de programação baseada em JAVA, porem muito mais simples, e desburocratizada.

POJO( Plain Old Java Objects) para quem não sabe sobre Java, definem essencialmente o padrao JavaBeans.
JavaBeans na verdade não é uma API, e sim um conjunto de regras que devem ser aplicadas as classes JAVA.

Por exemplo:
–Toda classe Java deve possuir construtor publico (public class algumacoisa….)
–Todas as propriedades de uma classe sao acessíveis por metodos get, set e is (is para boolean)
entre outras regrinhas.

Em Groovy, nós temos o POGO (Plain Old Groovy Objects)
Vamos ver na pratica como Groovy descomplica as coisas.
ps.: Se vc programa em Java, vai ficar com raiva…..

vamos escrever uma classe simples em Java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package domain;
/**
* Created by vinny on 12/12/15.
*/
public class Pessoa implements java.io.Serializable {
   private String nome;
   private String sobreNome;
   private boolean ativo;
 
   public String getNome() {
     return nome;
   }
 
   public void setNome(String nome) {
     this.nome = nome;
   }
 
   public boolean isAtivo() {
     return this.ativo;
   }
 
   public void setAtivo(boolean valor) {
     this.ativo = valor;
   }
 }

Uma classe básica que todos conhecem.
Mas e em Groovy, como ficaria? Agora vai dar raiva:

class Pessoa implements Serializable{//repare a primeira diferença
     String nome //sem pontovirgula
     String sobreNome //cadê os gets e sets?
     boolean ativo
}

Explicando…
Todo atributo definido na classe groovy possui visibilidade pública. Calma, não acessaremos estes atributos diretamente.
veja este exemplo:

1
2
3
4
   Pessoa pessoa = new Pessoa()
   pessoa.setNome("Vinny")
 
   printnl pessoa.getNome()

Oxe, de onde vem esse get e set? Vem automatico meu broder, Groovy gera automaticamente getters and setters.
Observe q a classe groovy faz exatamente o que a classe Java faz, com menos da metade do codigo.

Certo Vinny, e se eu quiser sobrescrever o metodo get por exemplo, eu posso? Claro q pode, veja este exemplo:

1
2
3
4
5
6
7
8
9
class Pessoa implementes Serializable{
    String nome
    String sobreNome
    boolean ativo
 
    String getNome(){
     "meu nome é $nome"
    }
 }

Usando a nova classe

1
2
3
4
5
   Pessoa pessoa = new Pessoa()
   pessoa.setNome("vinny")
 
   printnl pessoa.getNome();
// este ultimo codigo vai imprimir, "meu nome é vinny"

Tem como simplificar mais:

1
2
3
4
    Pessoa pessoa = new Pessoa()
    pessoa.nome = "vinny"
 
    println pessoa.nome

No momento da referencia ao atributo “nome” e o que eu estou fazendo com ele, diz para o Groovy
como agir. Então se eu digo que pessoa.setNome(“vinny”), Grovvy ja sabe q tem de usar o metodo
Set(). Quando eu digo println pessoa.nome Groovy ja sabe q tem de usar o metodo Get().

Vamos agora brincar com os construtores. Vamos ver construtores dinâmicos.
Ex.:

1
2
3
4
   Pessoa pessoa = new Pessoa(nome: "Vinny", sobreNome: "Parker")
 
   println "${pessoa.nome} ${pessoa.sobreNome}"
   // isto imprime Vinny Parker

O que eu quero mostrar com tudo isso? Existem muito mais exemplos que mostra como groovy é simples de trabalhar.
A questão toda é mostrar que com Groovy há menos burocracia e muito mais produtividade.
Em Java por exemplo toda classe publica deve obrigatoriamente ter o mesmo nome que o arquivo. Em groovy isso não é necessario.
Toda classe em groovy, por padrão é publica, e vc ainda pode declarar inumeras classes dentro do mesmo arquivo. Desde que tenha a extensao.groovy

 

Parte desse código que  usei como exemplo, vem do Livro do Henrique Lobo, que trata de um framework chamado Grails. Quem quiser comprar bastar clicar aqui.