Continuamos com nosso curso de programação . Neste artigo, implementaremos os níveis de acesso de nosso aplicativo. Antes de nos aprofundarmos em como programar , precisamos ver se o que fizemos até agora está certo ou errado . O que fizemos até agora não é ruim, mas também não se pode dizer que é bom e não é bom porque não está bem programado, mas porque não definimos corretamente os níveis de acesso que cada campo do aplicativo possui. Lembre-se de que começamos com um exemplo inicial , ao qual adicionamos métodos .
Para começar, precisamos definir quais são os níveis de acesso do Java. Os níveis de acesso são as restrições às quais os dados devem ser acessados . Esses níveis de acesso ocorrem tanto nas próprias classes quanto nos objetos instanciados, bem como em seus métodos e atributos.
Um resumo dos níveis de acesso apresentados por Java pode ser:
Como regra geral, definiremos os métodos que são acessados de outra classe como públicos e os métodos usados dentro da classe como privados . Por enquanto, não usaremos o nível de acesso protegido .
As classes são declaradas públicas e os atributos são privados . É muito importante, e algo extremamente básico, declarar os atributos como privados sempre, em qualquer circunstância. Embora tenhamos que perceber que não podemos acessá-los de outra classe, mas podemos acessá-los da própria classe e de outra classe através de métodos que retornam ou modificam o atributo, getters e setters .
Portanto, a primeira coisa que precisamos fazer é modificar as classes que compõem nossa aplicação, neste caso as classes Farm e Animal, para que elas atendam a essas condições.
Primeiro , redefiniremos os métodos e atributos adicionando o nível de acesso apropriado .
A classe Farm será definida como:
import java.util.ArrayList;
public class Granja {
private String nombre;
private int numeroAnimales;
private boolean estaEnVenta;
private ArrayList<Animal> animales = new ArrayList<Animal>();
public Granja(String nombre) {
this.nombre = nombre;
}
public void imprimirNombre() {
System.out.println("El nombre de la granja es: " + nombre);
}
public void añadirAnimal(Animal animal) {
animales.add(animal);
}
public void muestraAnimales() {
for (int i = 0; i < animales.size(); i++)
System.out.println(animales.get(i).nombre + " con peso "
+ animales.get(i).edad);
}
}
A classe Animal como:
public class Animal {
private String nombre;
private int edad;
private double peso;
}
Depois que os níveis de acesso forem refatorados, geraremos os setters e getters para os atributos, para que eles possam ser acessados a partir da classe do iniciador. Temos que perceber que, na grande maioria dos casos, não é necessário gerar todos os getters e setters para todos os atributos da classe, pois eles não são usados fora da classe e, portanto, estaríamos implementando apenas mais, estaríamos gerando código inútil. . Nesse caso, como geramos todos, pensaremos mais tarde se são úteis ou não. Outra opção seria adicioná-los apenas quando usamos os atributos de outra classe.
Para gerar os setters e getters do Eclipse , isso ocorre quase automaticamente, basta acessar:
- Fonte -> Gerar Getter e Setters e aqui marcamos os atributos que queremos que os getters e setters gerem . Vamos marcar todos eles.
- O modificador de acesso é marcado como público (em outras ocasiões, ele será protegido ).
Ao aceitar, já devemos gerar todos os getters e setters para os atributos de nossa classe. Repetimos o processo com a outra classe.
Se olharmos, apesar de termos gerado os setters e getters, teremos alguns erros no código:
Para resolvê-lo, teremos que substituir os métodos nos quais um atributo é acessado diretamente por sua chamada getter, se for lido ou setter, se for gravado. O erro está localizado no método showsAnimals () , devemos modificá-lo para que fique algo assim:
void muestraAnimales() {
for (int i = 0; i < animales.size(); i++)
System.out.println(animales.get(i).getNombre() + " con peso "
+ animales.get(i).getEdad());
}
Se não quisermos modificá-los, nós mesmos podemos escrever sobre o erro e o Eclipse nos mostrará as possíveis soluções.
Temos que ter em mente que nem todas as linguagens usam getters e setters , em muitos destacando C #, e possivelmente Java, isso é feito através do uso de propriedades que facilitam o chamado açúcar sintático , mas que por enquanto não estamos interessados.
Para testar você mesmo, você pode usar o código fonte que usamos para a ocasião.