Programación en Java: Fundamentos y Objetos

¿Te gustaría Java desde cero?
Tenemos los diplomados que necesitas. ¡Haz clic aquí!

Para empezar tenemos que definir que son los niveles de acceso de Java. Los niveles de acceso son las restricciones que tiene un dato para ser accedido. Estos niveles de acceso se dan tanto en las propias clases, como en los objetos instanciados de ellas, como sus métodos y atributos.

Un resumen de los niveles de acceso que presenta Java puede ser:

niveles_acceso

Por norma general definiremos los métodos que sean accedidos desde otra clase como public y los métodos que sean usados dentro de la propia clase como private. Por ahora no utilizaremos el nivel de acceso protected.

Las clases se declaran public y los atributos como private. Es muy importante, y algo extremadamente básico, declarar los atributos como private siempre, bajo cualquier circunstancia. Aunque tenemos que darnos cuenta que no podremos acceder a ellos desde otra clase, pero podremos acceder a ellos desde la propia clase, y desde otra clase a través de métodos que devuelvan o modifiquen el atributo, getters y setters.

Por tanto lo primero que tenemos que hacer es modificar las clases que forman nuestra aplicación, en este caso las clases Granja y Animal, para que cumplan estas condiciones.

Curso gratuito de Java en el Punto Digital de Villa Mitre | | Bahía Blanca

Primero vamos a redefinir los métodos y atributos añadiéndole el nivel de acceso adecuado.

La clase Granja quedará 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);
    }
}

La clase Animal como:

public class Animal {

    private String nombre;
    private int edad;
    private double peso;
}

Una vez refactorizados los niveles de acceso vamos a generar los setters y getters para los atributos, para que puedan ser accedidos desde la clase lanzador. Tenemos que darnos cuenta que en la gran mayoría de los casos no es necesario generar todos getters y setters para todos los atributos de la clase ya que igual no son utilizados fuera de la clase y por ello solo estaríamos implementando de más, estaríamos generando código inútil. En este caso los generamos todos, ya pensaremos luego si son útiles o no. Otra opción sería, solo añadirlos cuando utilicemos los atributos desde otra clase.

Para generar los setters y getters Eclipse lo hace prácticamente de manera automática simplemente tenemos que ir a:

  1. Source -> Generate Getter and Setters y aquí marcamos los atributos que queramos que generen los getters y setters. Nosotros los marcaremos todos.
  2. El Access modifier lo marcamos como public (en otras ocasiones será protected).

Al aceptar ya deberíamos generados todos los getters y setters para los atributos de nuestra clase. Repetimos el proceso con la otra clase.

errores_niveles_acceso

Si nos fijamos aunque hallamos generado los setters y getters tendremos unos errores en el código:

Para solucionarlo tendremos que sustituir los métodos donde se accede directamente a un atributo por su llamada getter si es de lectura o setter si es de escritura. El error lo localizamos en el método muestraAnimales()debemos modificarlo de forma que quede algo así:

void muestraAnimales() {
    for (int i = 0; i < animales.size(); i++)
        System.out.println(animales.get(i).getNombre() + " con peso "
                + animales.get(i).getEdad());
}

Si no queremos modificarlos escribiéndolo nosotros mismos podemos pasar por encima del error y Eclipse nos mostrara las posibles soluciones.

Tenemos que tener en cuenta que no en todos los lenguajes se usan getters y setters, en muchos destacando C#, y posiblemente Java lo haga, se hace mediante el uso de propiedades que facilitan el llamado azúcar sintáctico.

Te esperamos en los siguientes artículos en donde hablaremos más acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.

¿Te gustaría Java desde cero?
Tenemos los diplomados que necesitas. ¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax