Programação orientada a objetos: níveis de acesso

acesso_ níveis

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:
acesso_ níveis

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.

Relacionado:  Programação orientada a objetos: entrada / saída de dados

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:

  1. Fonte -> Gerar Getter e Setters e aqui marcamos os atributos que queremos que os getters e setters gerem . Vamos marcar todos eles.
  2. 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:
access_level_events

Relacionado:  Conheça os finalistas que lutarão para ser vencedores este ano no Appcircus Barcelona

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.

modifcar_atributo_con_getter

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.

 

Você pode estar interessado:

Deixe um comentário