Uso dos métodos acessadores na própria classe

6 respostas
sobreira

Saudações amigos do GUJ!

Essa dúvida me surgiu hoje. A implementação dos métodos da classe devem utilizar os acessadores de seus atributos ou o atributo em si? No exemplo abaixo seria (mais) correto utilizar o caso 1 ou 2?

public class MinhaClasse {
    private int atributo = 1;

    public int getAtributo() {
        return atributo;
    }

    public void setAtributo(int value) {
        this.atributo = value;
    }

    public void printPropriedade() {
        //caso 1: usando o campo privado
        System.out.println(atributo);

        //caso 2: usando o acessador publico
        System.out.println(getAtributo());
    }
}

6 Respostas

LuksS

depende … se vc implementar regras p/ o acesso e leitura dos atributos, o ideal é usar getters e setters, que irão encapsular sua lógica.

marcosharbs

bem nesse caso como vc esta acessando dentro da classe não teria diferença, mas eu sempre uso os metodos para acessar

LuksS

Ñ ?

M

Exatamente o que foi dito: se você tivesse algo assim:

public class ABC {
    private JButton botao;

    public JButton getBotao() {
        if (botao == null) {
            botao = new JButton("Olá mundo!");
        }
        return botao;
    }

    .........
    // e em outro método:
    new JFrame().add(getBotao(), BorderLayout.CENTER);
    // repare que chamamos o método, e não a variável, pois isso garante que não haverá um NullPointerException

}

Porém no seu caso é indiferente.

B

Olhe por este lado:

Acessar atributos diretamente ou via métodos acessores dá na mesma coisa, mesmo que o atributo seja public, e uma classe externa o acesse.

O problema surge a partir do momento em que você tem que implementar regras para controlar o acesso:

:arrow: se você tiver utilizando atributos, você terá que reimplementar toda a classe (caso eles fossem public, todo o sistema)
:arrow: se você tiver utilizando métodos, somente precisará reimplementar um único método.

Pense nisso.

sobreira

Obrigado pelas respostas!

Então… o encapsulamento deve ser aproveitado inclusive na própria classe. Isto me garantirá uma manutenção menos traumática no futuro, mesmo em casos como no exemplo, onde a principio não haveria regras de controle de acesso.

Eu levantei a questão porque aqui no serviço tenho classes grandes onde há uma mistureba na forma como as variáveis privadas são acessadas dentro da própria classe, mesmo quando há métodos acessadores e isto tem dado um pouco de dor de cabeça na manutencão.

Criado 20 de janeiro de 2009
Ultima resposta 20 de jan. de 2009
Respostas 6
Participantes 5