Plain Old Java Objects

Plain Old Java Objects (Os Singelos Clássicos Objetos Java), ou POJOs, são objetos Java que seguem um desenho simplificado em contraposição aos EJBs, por exemplo. Um JavaBean é um POJO que segue definições rígidas de estrutura (construtor default sem argumentos e métodos que seguem o padrão de getters e setters para seus atributos).

Este padrão é baseado na ideia de que quanto mais simples o projeto, melhor. O termo foi inventado por Martin Fowler, Rebecca Parsons e Josh MacKenzie em Setembro de 2000. "Nós queríamos saber porque as pessoas eram contra o uso de objetos regulares em seus sistemas e concluímos que era devido a falta de um nome extravagante para eles. Assim nós demos-lhes um, e funcionou muito bem.". O termo segue o padrão de atribuir um nome para tecnologias que não possuem nenhuma característica nova, como POTS (Plain Old Telephone Service).

O termo ganhou aceitação por causa da necessidade de um termo comum e facilmente inteligível que contrasta com complicados frameworks de objetos. É mais atrativo do que o termo bean do Java devido à confusão gerada pela semelhança dos termos JavaBeans e os EJB (Enterprise JavaBeans). O primeiro é predominantemente um POJO que segue rigorosas convenções para nomear métodos, e o último é um modelo de componente (EJB 3 reduz o grau de diferença entre eles).

Definição editar

Falando idealmente, um POJO é um objeto de Java não limitado por alguma restrição outra que esses forçados por Java Language Specification. Em outras palavras, um POJO deve:

  1. Não estender classes pre-especificadas, como em
    public class Foo extends javax.servlet.http.HttpServlet { ...
    
  2. Não implementar interfaces pre-especificadas, como em
    public class Bar implements javax.ejb.EntityBean { ...
    
  3. Não conter anotações pre-especificadas, como em
    @javax.persistence.Entity public class Baz { ...
    

No entanto, por causa das dificuldades técnicas e outras razões, muitos produtos de software ou muitos framework descritos como acordantes com POJO ainda pedem efectivamente o uso das anotações pre-especificadas para tais características como persistência para funcionar correctamente. A ideia é que se o objeto (efectivamente a classe) foi um POJO dantes de que algumas anotações foram acrescentadas, e regressaria no estado de POJO se as anotações são tiradas, então pode estar considerado como um POJO. Então o objeto básico fica um POJO no sentido que não tem características especiais (como uma interface implementada) que o fazem "Specialized Java Object" (SJO ou (sic) SoJO).

Exemplo editar

Este exemplo mostra uma classe POJO que segue o padrão JavaBean.

 public class Carro implements java.io.Serializable {  
 
 	private String  nome;
 
 	private String cor;
 
 	public Carro() {
 	}
 
 	public Carro(String nome, String cor) {
 	     this.nome = nome;
 	     this.cor = cor;
 	}
 
 	public String getCor() {
 	     return cor;
 	}
 
 	public void setCor(String cor) {
 	     this.cor = cor;
 	}
 
 	public String getNome() {
 	     return nome;
 	}
 
 	public void setNome(String nome) {
 	     this.nome = nome;
 	}
 }