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
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]
-------------------------------------------------------------------------