Saltar para o conteúdo

Plain Old Java Objects

Origem: Wikipédia, a enciclopédia livre.

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).

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).

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;
 	}
 }