Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
La encapsulación impide la manipulación externa de algunas partes de los objetos.
- Fuerza al usuario a utilizar un método para acceder a los datos.
- Hace que el código sea más fácil de mantener
Esto mejora la estabilidad de la aplicación, ya que el cambio directo de una variable puede afectar al correcto funcionamiento de la misma.
Esto permite un código más reutilizable, ya que este se encuentra encapsulado en módulos independientes.
Para ello declararé los métodos como public y las variables como private.
Ejemplo
Al hacer un pedido, no pueden venir más de 10 paquetes. Por tanto si vienen menos de 10 paquetes el número de paquetes en el almacén se modifica, pero pero si vienen más de 10 saltaría un mensaje de error.
public class E_encapsulamiento {
public static void main(String[] args){
Almacen almacen = new Almacen();
almacen.setNumCajasAlmacen(12);
System.out.println(almacen.getNumCajasAlmacen());
}
}
class Almacen{
private int numCajasAlmacen;
public int getNumCajasAlmacen() {
return numCajasAlmacen;
}
public void setNumCajasAlmacen(int numCajasAlmacen) {
if(numCajasAlmacen>10){
System.out.println("No se admiten entregas de más de 10 unidades");
}else{
this.numCajasAlmacen = numCajasAlmacen;
}
}
}
POJO (Plain Old Java Object)
- Debe tener al menos un constructor sin argumentos
- Los atributos de la clase deben ser privados
- Dichos atributos deben ser accesibles mediante métodos get y set
Bean
Es un POJO que además implementa la interfaz serializable.
public class Alumno implements Serializable {
private String nombre;
private int edad;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}
Implementar serializable
Serializar es el proceso de convertir el objeto a bytes, para poder enviarlo a través de red, y después reconstruirlo al otra lado de la red.
Para que un objeto sea serializable basta con que implemente la interfaz Serializable.
Notas
La clase Exception implementa la interfaz Serializable.
serialVersionUID
Es posible que cuando envío un objeto serializado a un lado y a otro de la red tenga diferentes versiones del mismo. Si sucede esto, la reconstrucción de la clase en el lado que recibe es imposible.
Para comparar las versiones de las clases utilizamos el atributoprivate static final long serialVersionUID.
Este nos indica el número de versión de la clase. Debemos ir actualizándolo con las modificaciones de la clase que vayamos haciendo.
Si las versiones de dos clases que implementan Serializable no coinciden, obtendremos una InvalidClassException al deserializar.