Devo usar o modificador de acesso padrão ou não - prática de codificação?

8

Normalmente, ao criar novas variáveis ​​globais, não defino seu modificador de acesso. Portanto, conforme o java, ele adotará o modificador de acesso padrão da propriedade. Quando preciso acessar essa variável fora do escopo padrão, altero seu modificador de acesso, caso contrário, deixe-a como está. Portanto, minha pergunta é: " Estou fazendo o caminho certo? É normal ter variáveis ​​de acesso padrão? Ou devo usar privado / público para elas? É uma boa prática de codificação não usar modificadores de acesso? "

Harry Joy
fonte

Respostas:

13

2 coisas aqui:

  1. não use globals :)
  2. é comum / prática recomendada assumir que todos os campos são privados, a menos que haja um motivo primordial para torná-los qualquer outra coisa; nesse caso, o acesso mais restritivo deve ser escolhido (geralmente protegido).

É claro que sempre há exceções à regra, mas esse é o básico para começar.

jwenting
fonte
Alguma razão específica para a 1ª coisa? "Não use globais".
Harry Joy
12
Globals podem ser acessados ​​e modificados de qualquer lugar na base de código inteira. Mais do que um punhado deles é suficiente para explodir a complexidade potencial de um programa além das capacidades mentais de uma pessoa sã.
tdammers
Se eles agem como staticno .NET, eles também quebram a testabilidade da unidade; A unidade sincea que a utiliza SEMPRE dependerá delas e não há como falsificá-las para isolar a unidade em teste.
StuperUser
1
e é claro que eles rapidamente se tornam um pesadelo de manutenção. Teve que fazer uma alteração "pequena" uma vez para um aplicativo cheio de centenas de globais (um valor precisava permitir uma entrada mais longa, algo assim). Acabamos tendo que mudar não uma ou duas, mas centenas de fontes, cada uma em dezenas de locais.
Jwenting
Desculpe escolher nit-pick, mas no seu segundo ponto, você sugere que o acesso mais restritivo é protegido. O acesso mais restritivo é o modificador de acesso padrão, não protegido!
oOTesterOo
5

Alguns princípios gerais de programação aqui:

  • Simples é melhor
  • Não indique o óbvio

...mas também:

  • Explícito é melhor que implícito

Não sou especialista em Java, mas a regra geral deve ser: Se o que acontece for óbvio para alguém familiarizado com a linguagem sem ser explícito, use o comportamento implícito. Se, no entanto, isso puder colocar alguém no caminho errado, então seja explícito.

tdammers
fonte
2
No Java, o acesso padrão é um tipo separado de acessos; portanto, se você adicionar um modificador de acesso, não os restabelecerá, poderá alterá-lo para outra coisa. É por isso que se você realmente precisa de acesso padrão explícito, a única maneira de torná-lo explícito é usar um comentário.
Malcolm
-1

O Java não possui propriedades automáticas; portanto, todos os membros da classe em geral devem ser privados com os métodos get / set para uso público, se necessário.

De acordo com a fonte (Oracle java Docs), esta é a abordagem recomendada.

"Use o nível de acesso mais restritivo que faça sentido para um membro em particular. Use privado, a menos que você tenha um bom motivo para não fazê-lo. Evite campos públicos, exceto constantes. Os campos públicos tendem a vinculá-lo a uma implementação específica e limitar sua flexibilidade em alterar seu código ".

http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Nickz
fonte
1
Mas e se você quiser compartilhar o acesso apenas com algumas coisas e não com tudo (como publicfaz)?