Como não aprender Programação Orientada a Objetos: Getters e Setters
Por Andreia Oliveira
Uma das disciplinas ministradas em todos os cursos na área de Computação, é a disciplina de Programação Orientado a Objetos. Muitos alunos ficam se perguntando: “Como fixar esse novo paradigma?”. Há várias maneiras de aprender, creio que tenha diversas formas, porém, existem maneiras equivocadas de aprender.
Uma das práticas mais contraditórias que aprendemos logo de início é a geração indiscriminada e equivocada de getters e setters. Os exemplos básicos de centenas de materiais Java estão recheados com getters e setters da pior espécie, aqueles que não fazem sentido algum.
Observe a classe Livros:
public class Livros { private String nome; private String descricao; private double valor; private String isbn; private Autor autor; private double porcentagem; public Livros(Autor autor) { this.autor = autor; this.isbn = "000-00-00000-00-0"; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public double getValor() { return valor; } public void setValor(double valor) { this.valor = valor; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public Autor getAutor() { return autor; } public void setAutor(Autor autor) { this.autor = autor; } public double getPorcentagem(){ return porcentagem; } public void setPorcentagem(){ this.porcentagem = porcentagem; }
Geralmente, os tutoriais explicam que o modificador de acesso “private” é o adequado para o encapsulamento e que devemos usar getters e setters para acessá-la. Para que esse setDescricao? Você vai chegar a usar todos esses métodos? Isso só está quebrando o seu encapsulamento!
Não crie um getter ou setter sem sentir uma grande necessidade por ele. E isso vale para qualquer método, mas particularmente os getters e setters, pois muitos deles nunca serão sequer invocados, e grande parte do restante poderia ser substituído por métodos de regras de negócios.
public class Livros { private String nome; private String descricao; private double valor; private String isbn; private Autor autor; public Livros(Autor autor) { this.autor = autor; this.isbn = "000-00-00000-00-0"; } public boolean aplicaDesconto(double porcentagem) { if (porcentagem > 0.3) { return false; } this.valor -= this.valor * porcentagem; return true; } boolean obterAutor(){ return this.autor != null; } }
Testando a classe Livros rapidamente você perceberia que alguns dos getters e setters anteriores não têm uso algum, e logo sentiria falta de alguns métodos mais voltados a lógica das regras de negócio, como o aplicaDesconto.
Existem outras más práticas, como a utilização de ids para relacionar os objetos, arrays não encapsuladas como estruturas, milhares de métodos estáticos, entre outros. Todas essas práticas são muito comuns quando estamos iniciando o “desapego ao paradigma procedural” e sem dúvida a maioria dos profissionais já foram praticantes disso.
Você só vai utilizar bem o paradigma da orientação a objetos depois de programar muito, mas nada melhor que começar já com uma boa prática. Pense nisso !
Fonte: Profissionais TI
Texto original:
http://www.profissionaisti.com.br/2015/05/como-nao-aprender-programacao-orientada-a-objetos-getters-e-setters/