Plain Old Java Object – POJO

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