Modificador de acesso [RESOLVIDO]

6 respostas
D

Boa noite pessoal!!

Eu estou lendo a apostila da Caelum, e na pagina 59 - Capítulo 6 - Modificadores de Acesso e atributos de Classe surgiu uma dúvida.. Tentarei explicar qual é..:

No seguinte código:
package banco;

public class Conta {
	private int numero;
	private double saldo;
	private double limite;
	private Cliente cliente;
	
                //ALGUNS MÉTODOS...
	
	private double getSaldo(){
		return this.saldo + this.limite;
	}
	
	public Cliente getDono(){
		return this.cliente;
	}
	
	public void setDono(Cliente dono){
		this.cliente = dono;
	}
}
A minha dúvida está nesse ponto:
private double getSaldo(){
		return this.saldo + this.limite;
	}

Por que o método getSaldo está private?? Alguém sabe algum motivo pra querer deixar a visualização do saldo como private?? Pois se é private não tem como acessar em outra classe, correto? Então pra que isso?

Bom é isso,
Obrigada...!!

6 Respostas

F

fala meu amigo isso pode ter cido apenas para voce ver como funciona os privates, protects, public saco ?
nesse caso so a mesma classe pode ver esse metodo privado !

Att

D

Aham… entendo…

Mas então, vc concorda comigo que não tem lógica ele ser private ou eu estou pensando errado?

Obrigada pela resposta!

GiancarloBraga

Você tem razão.
Não tem lógica!

Mas isso foi apenas para mostrar que dará erro de compilação se você tentar acessar a este método de outra classe. Nada mais do que uma ‘explicação prática’ sobre os modificadores.

T

dina,

Não sei como está este código completo, mas qual o problema do método ser private ? De certo se é possivel deixar um método private é porque há alguma utilizade nisto!
O Java sempre proibi o que não tem utilizade.

Vamos supor que sua classe possua um método public void toString() que retorna a representação String dos seus campos.
Dai os dados seriam recuperados por este método quando ele fosse chamado por outra classe, e caso desejemos fazer isto vale a pena encapsular até os métodos utilitários da classe.

Mesmo que não seja este o caso, procure reparar que isto é apenas um estudo e pode ter sido intencional eles colocarem assim.

Mas um toque, na prova de certificação Java os nomes de métodos e atributos são bem zuados, simplesmente para gente se confundir mais, o que é bom caso venhamos a nos deparar com um sistema escrito em Java mal e porcamente por alguem que não se deu ao trabalho de estudar os padrões como nós fazemos!

Bom estudo. :smiley:

R

Nesse exemplo não nota-se nenhuma vantagem em dizer que o método getSaldo é private.

Mas vc deve entender qual o maior benefício de dizer que um método é private mesmo que ele não possa ser visto de outras classes.

Vc pode tornar todos os métodos que não fazem parte da API ou “interface” da sua classe. Isto é… sua classe possui métodos públicos que são os serviços que a classe oferece… Porém, as vezes podemos encontrar métodos que tem uma lógica muito complexa e preferimos modularizar, dividindo esse método em métodos menores, para aumentar a coesão entre os métodos.

Esses pequenos métodos, então, são irrelevantes para quem acessa a sua classe, pois para eles não importa os detalhes de um método escrito apenas para auxiliar na execução de um método com maior utilidade.

Em um exemplo, para ficar mais claro:

Se o seu método getSaldo() precisasse fazer alguns cálculos muito complexos de impostos e dar algum desconto baseado em uma taxa fixa. Vc poderia criar um método calculaImpostos() e um método efetuaDesconto() para dividir os propósitos do método getSaldo() em métodos específicos com uma finalidade só.

um trecho do seu código ficaria mais ou menos assim:

//...mais código...

//Note que apenas esse método public, pois a intenção da sua classe 
seria apenas informar o saldo. Quem usa a classe não precisa saber que, por trás de tudo, está sendo
calculado imposto, nem efetuado algum desconto

public double getSaldo(){
   this.calculaImpostos();
   this.efetuaDesconto();
   return this.saldo;
}

//Note que, como o método é private, quem usa a classe a partir de outra classe sequer sabe que está sendo feito algum cálculo auxiliar
private void calculaImpostos(){
   //faz algum calculo que atualiza o valor do atributo saldo.
}

//Note que, como o método é private, quem usa a classe a partir de outra classe sequer sabe que está sendo feito algum cálculo auxiliar
private void efetuaDesconto(){
   //faz algum calculo que atualiza o valor do atributo saldo.
}

//...mais código...

Isso foi apenas um exemplo simples, bem intuitivo. Mas na prática, existem vários casos mais complexos, onde encapsular métodos tornando-os private tem vantagens muito significativas.

[]'s

D

Pessoal,

Mto mto obrigada!!!

Obrigada mesmo!!!
:slight_smile:

Criado 17 de agosto de 2007
Ultima resposta 18 de ago. de 2007
Respostas 6
Participantes 5