Acho q a resposta a esta pergunta vai de opinião pessoal.
 
Baseado na minha experiência em orientação a objetos e Java, eu diria que o fato dos modificadores de controle de acesso (public, private, etc) serem relativos às classes, e não aos objetos não é um problema, e sim uma característica. E esta pode vir a ajudar bastante em termos de praticidade, sem complicar, dificultar, ou ir contra as boas práticas de programação oo.
 
Pode parecer meio "feio" no contexto de encapsulamento, mas: Se a classe Casa contém todos os detalhes de implementação de uma casa, incluindo todos os atributos e objetos, fazer com que a classe Casa só tenha acesso aos seus atributos privados (e não aos das outras instâncias da classe Casa) é o mesmo que dizer: "precisamos esconder os detalhes de implementação entre uma casa e outra".
 
Deixando a análise conceitual de lado, e partindo para algo mais concreto, uma vez eu precisei implementar uma classe do tipo Matriz, que continha todas as operações sobre matrizes (soma, multiplicação, inversão, transposição, etc). Ela declarava os atributos privados:
private double mat[][];
private int linhas,colunas;
 
e os acessos a esta matriz era intermediado pelos métodos get(int i, int j) e set(int i, int j, double valor), e as funções getLinhas() e getColunas(). Assim, os atributos "linhas" e "colunas" não são modificáveis por classes externas.
 
A vantagem (neste caso) do fato que os atributos privados são acessíveis à classe, e não apenas ao objeto é que eu poderia modificar os atributos "linhas" e "colunas" de qualquer objeto do tipo Matriz dentro da classe Matriz (necessário em alguns algoritmos), além da facilidade de utilizar o atributo "mat[][]" diretamente.
 
 
Luiz Felipe Molina
 
 
 
----- Original Message -----
From: "José Augusto Cerqueira Condé" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 08, 2002 5:45 PM
Subject: [java-list] Restrição de acesso em classes x objetos

Colegas,

Recentemente me atentei a uma questão interessante. Os níveis de restrição
de acesso a atributos e métodos de uma classe, implementados pela linguagem
java, se aplicam apenas a classes e não a objetos.

Tomem como exemplo a classe abaixo :


public Casa
{

private boolean alugada;

public casa()
{
}


public Casa criaNovaCasaAlugada()
{
Casa casa = (Casa)this.clone();
casa.alugada = true; 
}

public void setAlugada(boolean alugada)
{
this.alugada = alugada;
}

public boolean isAlugada()
{
return alugada;
}

}

Apesar de parecer estranho o atributo "alugada" estar sendo acessado
externamente, o método "criaNovaCasaAlugada" está correto do ponto de vista
da linguagem java. Mas em relação às boas maneiras da Orientação Objetos,
isto não seria aberração (objetos acessando atributos protegidos de outros
objetos)?

Atenciosamente,

JConde
[EMAIL PROTECTED]

------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns:
http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

Reply via email to