sábado, 8 de julio de 2017

Derechos de acceso en Java

Acceso
El estado de un objeto está dado por el conjunto de valores de sus atributos. Una modificación arbitraria, intencionada o no, puede provocar inconsistencias o comportamientos no deseados de un objeto. Es por este motivo que se debe controlar el acceso a los atributos de los objetos. 
Java proporciona mecanismos de acceso a los elementos de una clase, de forma que se puede determinar el derecho de acceso de cada elemento según las necesidades de los objetos.

Acceso privado: Los elementos privados solo se pueden utilizar dentro de la clase que los define. Para indicar el acceso privado se utiliza private.

Acceso de paquete: El acceso a estos componentes es libre dentro del paquete en el que se define la clase. El acceso de paquete no se indica expresamente.

Acceso protegido: Los elementos protegidos solo se pueden utilizar dentro de la clase que los define, aquellas clases que la extiendan y cualquier clase definida en el mismo paquete. Para indicar el acceso protegido se utiliza protected.

Acceso público: Los elementos públicos se pueden utilizar libremente. Para indicar expresamente el acceso público se utiliza public. No es necesario, el acceso público se utiliza como valor por defecto mientras no se indique private o protected.

Para limitar el acceso a los atributos de la clase Vehiculo se utiliza private. Al utilizar este tipo de acceso, solo los métodos "get" y "set" de la clase pueden acceder a ellos.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;
}

Con esta declaración, todos los atributos de la clase tienen acceso private y el diagrama de clases muestra un signo menos delante del identificador del atributo para indicar que es privado.

La clase Vehiculo con sus métodos "get" y "set".

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;
public String getMatricula() {
return this.matricula;
}
public String getMarca() {
return this.marca;
}
public String getModelo() {
return this.modelo;
}
public String getColor() {
return this.color;
}
public double getTarifa() {
return this.tarifa;
}
public boolean getDisponible() {
return this.disponible;
}
public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}
public void setDisponible(boolean disponible) {
this.disponible = disponible;
}
}


La clase Vehiculo define métodos "get" para los atributos matrícula, marca, modelo, color, tarifa y disponible. Los métodos "set" solo son aplicables a los atributos tarifa y disponible porque se considera que el resto de atributos de la clase no pueden modificar su valor una vez que se ha creado el objeto.

La responsabilidad de modificar los atributos de los objetos es de los métodos "set". Estos métodos deben verificar que el valor que se desea asignar a un atributo es válido y cumple con las restricciones de diseño de la clase.