Plain Old Java Object – POJO
Plain Old Java Object ou POJO, são objetos Java que seguem um desenho extremamente simplificado. Um POJO é um JavaBean que segue definições rígidas de estrutura, sendo elas:
- Possui um construtor default (padrão - sem argumentos) ou não declarar construtor (assim o compilador Java criara um construtor default automaticamente);
- Possui todos os seus atributos, sejam eles tipos primitivos ou objetos, com a visibilidade privada;
- Não possui métodos específicos, exceto aqueles que seguem o padrão de getter e setter para seus respectivos atributos
OBS: O padrão getter é a forma de pegar o valor do atributo e o padrão setter é a forma de alterar o valor do atributo.
Este padrão é baseado na idéia 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 por que as pessoas eram contra o uso de objetos regulares em seus sistemas e concluímos que era devido à 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.
O termo ganhou aceitação por causa da necessidade de um termo comum e facilmente inteligível que contrasta com os complicados frameworks de objetos. É mais atrativo do que o termo bean do Java devido à confusão gerada pela semelhança dos termos JavaBeans e dos EJB (Enterprise JavaBeans).
Segue abaixo alguns exemplos do que pode ser considerado um POJO:
/**
* Este é um exemplo típico de um POJO. Perceba que está classe possui
* apenas 2 atributos e um método GET e outro SET para cada um deles.
*/
public class Carro {
private String nome;
private String 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;
}
}
/**
* Esta classe mesmo fazendo referência a classe anterior,
* continua sendo um POJO.
*/
public class Oficina {
private Carro[] carrosParaManutencao;
private String nome;
public Carro[] getCarrosParaManutencao() {
return carrosParaManutencao;
}
public void setCarrosParaManutencao(Carro[] carrosParaManutencao) {
this.carrosParaManutencao = carrosParaManutencao;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}