Utilização de Getters e Setters

Bom dia, pessoal!
Tudo bem?

Observem o pequeno código abaixo.

[code]public class Duvida {

private int id;

public void setId(int id) {
	this.id = id;
}

public int getId() {
	return id;
}

public void acessarId(int idAux) {
	// Situação 1
	int exemplo1 = id;
	int exemplo2 = getId();
	// Situação 2
	id = idAux;
	setId(idAux);
}

}
[/code]

Para cada situação, qual opção é a mais indicada?

Não entendi o que quer fazer.

Quero saber a maneira mais correta para cada situação do exemplo. Qual é a padronização, entendeu?

No exemplo, eu quero manipular os próprios atributos da classe dentro dela mesmo. Logo, quero saber se o padrão é acessar só pelo nome do atributo ou eu tenho que usar o get e o set também.

        int exemplo1 = id;  
        int exemplo2 = getId();  
     
        id = idAux;  
        setId(idAux);  

depende…

as vezes vc tem regra de negócio no seu set ou no seu get… então vc pode setar um objeto inconsistente ou pegar um objeto inconsistente, caso acesse - o diretamente ao invés dos setter e getters

mas se normalmente vc não coloca regra de negócio nesses caras não tem problema vc acessa-lo diretamente…

resumindo não tem um certo ou errado… tem gosto… (na minha opnião) eu tento não acessá-lo diretamente…

pois se acabar tento que colocar uma regra no get ou no set não vou precisar me preocupar com a refatoração…

mas tome cuidado… pq se vc add uma regra nesses caras a IDE não vai te lembrar de alterar onde vc acessou diretamente!

abrassss

Entendi. Dentro da própria classe não é necessário usar os get’s e set’s já que você tem acesso direto à variável.

Acredito que não existe um padrão pra isso.

Não duplique os tópicos! Leia isso.

Hm… Entendi.

Muito obrigado aos dois.

fredericomaia10 realmente não existe um padrão

kadu.m.lino boa sua resposta…

o livro (antigo) do fowler: Refactoring: Improving the Design of Existing Code

fala a respeito do assunto. La ele diz que começa com acesso direto depois se as coisas se tornam complicadas ele refatora para acessp atraves de getters por exemplo.

Um momento em que isso se torna viável é quando vc quer acessar o campo em uma super classe mas quer sobrecarregar esse acesso em uma subclasse. Mas ai já é um tanto “avançado”

abrassss

Normalmente eu acesso atributos dentro da própria classe diretamente, a menos claro que haja regras mais complexas associadas ao get e ao set.

Agora, veja que é importante avaliar se há a necessidade de um set. No caso do id() geralmente é um erro ter um setter publico. Justamente, porque objetos não saem mudando ou recebendo ids de qualquer jeito. Eu procuro evitar ao máximo criar um setter, deixando as classes as mais imutáveis possível. Isso reduz o número de estados possíveis.

Sobre encapsulamento, eu fiz um post um pouco mais elaborado que talvez vocês gostem de ler: