ocultación de datos
Alguien me puede explicar en que consiste la ocultación de datos en Java y cuales son sus ventajas?
Nos permite hacer que el software sea más tolerante a los cambios. El ejemplo típico es el siguiente:
Mal diseño:
public class Persona{
public String nombre;
public byte edad;
}
Buen diseño:
public class Persona{
protected String nombre;
protected byte edad;
public String getNombre() {
return nombre;
}
public byte getEdad(){
return edad;
}
}
Me preguntarás ¿para qué quieres ocultar la información? Pues por ejemplo, imagina que quieres
hacer que la clase Persona, sea modificable. Con propiedades públicas ya lo es, pero también puedes asignarle a una persona una edad negativa, lo que puede generar comportamientos extraños realizar operaciones, como por ejemplo, calcular la media de las edades de las personas. Modificando mínimamente la clase o heredando de ella, se puede hacer que una Persona sea modificable. Otro ejemplo. Imagina que quieres que objetos de la clase Persona se almacenen en disco. Mientras se almacena y se recupera una Persona puede que haya cambiado su edad, de modo que la clase mal diseñada sería incoherente. Sin embargo un objeto de la clase bien diseñada o una subclase de la misma, puede añadir una propiedad Date fechaNacimiento y redefinir el método getEdad de modo que reste la fecha actual a la fecha de nacimiento y devuelva la diferencia. Por ello se recomienda que se empleen propiedades privadas, protegidas si van a accederse de subclases o dentro del paquete y públicas en muy pocas ocasiones. Espero haberte aclarado la ventaja del ocultamiento de datos.
Mal diseño:
public class Persona{
public String nombre;
public byte edad;
}
Buen diseño:
public class Persona{
protected String nombre;
protected byte edad;
public String getNombre() {
return nombre;
}
public byte getEdad(){
return edad;
}
}
Me preguntarás ¿para qué quieres ocultar la información? Pues por ejemplo, imagina que quieres
hacer que la clase Persona, sea modificable. Con propiedades públicas ya lo es, pero también puedes asignarle a una persona una edad negativa, lo que puede generar comportamientos extraños realizar operaciones, como por ejemplo, calcular la media de las edades de las personas. Modificando mínimamente la clase o heredando de ella, se puede hacer que una Persona sea modificable. Otro ejemplo. Imagina que quieres que objetos de la clase Persona se almacenen en disco. Mientras se almacena y se recupera una Persona puede que haya cambiado su edad, de modo que la clase mal diseñada sería incoherente. Sin embargo un objeto de la clase bien diseñada o una subclase de la misma, puede añadir una propiedad Date fechaNacimiento y redefinir el método getEdad de modo que reste la fecha actual a la fecha de nacimiento y devuelva la diferencia. Por ello se recomienda que se empleen propiedades privadas, protegidas si van a accederse de subclases o dentro del paquete y públicas en muy pocas ocasiones. Espero haberte aclarado la ventaja del ocultamiento de datos.