Mind map
Encapsulamiento
Map content
Encapsulamiento
En encapsulamiento es un principio del lenguaje Java cuya filosofía es hacer que los atributos de las clases se puedan editar sólo a través de métodos.
- De manera general, se hace teniendo las propiedades como privadas y métodos que la controlan públicos. Comúnmente, se crean un grupo de métodos llamados getters (se encargan de obtener el valor de la propiedad) y setters (se encargan de setearla).
Mantener las clases con el principio de encapsulamiento nos permite controlar el cambio de valor que pueda producirse en ellas añadiendo validaciones. De cualquier manera, es una convención dentro de la programación orientada a objetos aunque no se esté realizando una operación adicional al cambio de valor. Veamos un ejemplo:
- public class Gato { public String nombre; public int patas; } //Mi método main... Gato g = new Gato(); g.nombre = "Nemo"; g.patas = 4; System.out.println("Mi gato se llama: " + g.nombre); System.out.println("El número de patas de mi gato es: " + g.patas);
- En este caso, no se ha aplicado el principio de encapsulamiento, por lo que cualquier otro desarrollador con visibilidad de nuestra clase, puede cambiar las propiedades del mismo tan sólo con acceder a ellas, de manera muy simple.
- Veamos la misma clase, con el principio de encapsulamiento
- public class Gato { private String nombre; private int patas; public getNombre(){ return nombre;} public getPatas(){ return patas;} public setNombre(String nuevoNombre){ nombre = nuevoNombre;} public setPatas(int numeroPatas){ patas = numeroPatas;} } //Mi método main... Gato g = new Gato(); g.setNombre("Nemo"); g.setPatas(3); System.out.println("Mi gato se llama: " + g.getNombre()); System.out.println("El número de patas de mi gato es: " + g.getPatas());
- Tras aplicar el principio de encapsulamiento, ya no tenemos acceso a las propiedades directamente, por lo que tenemos que usar los métodos (que son públicos y sí tenemos acceso a ellos) para poder acceder a las variables, tanto para modificarlas como para obtenerlas. El comportamiento es el mismo, aunque lleve un código adicional
- public class Gato { private String nombre; private int patas; public getNombre(){ return nombre;} public getPatas(){ return patas;} public setNombre(String nuevoNombre){ nombre = nuevoNombre;} public setPatas(int numeroPatas){ patas = numeroPatas;} } //Mi método main... Gato g = new Gato(); g.setNombre("Nemo"); g.setPatas(3); System.out.println("Mi gato se llama: " + g.getNombre()); System.out.println("El número de patas de mi gato es: " + g.getPatas());
- Veamos la misma clase, con el principio de encapsulamiento
- En este caso, no se ha aplicado el principio de encapsulamiento, por lo que cualquier otro desarrollador con visibilidad de nuestra clase, puede cambiar las propiedades del mismo tan sólo con acceder a ellas, de manera muy simple.
- public class Gato { public String nombre; public int patas; } //Mi método main... Gato g = new Gato(); g.nombre = "Nemo"; g.patas = 4; System.out.println("Mi gato se llama: " + g.nombre); System.out.println("El número de patas de mi gato es: " + g.patas);
¿Por qué debemos aplicar el principio de encapsulamiento?
- Por mantenibilidad, estabilidad y seguridad principalmente. Un segundo equipo va a usar nuestra aplicación y por tanto nuestras clases. Nosotros conocemos perfectamente la funcionalidad, y entre todas las cosas que sabemos y asumimos, una de ellas es que los gatos no tienen más de 4 patas (o menos de 0). Pero sin embargo, según la estructura del lenguaje Java, no hay nada que no impida a un desarrollador hacer esto (No con nuestra clase actual):
- g.setPatas(10); g.setPatas(-50);
- Por lo tanto, se nos ocurre, actualizar el método «setPatas» de nuestra clase Gato para que quede así:
- public void setPatas(int numeroPatas){ if(numeroPatas>=0 && numeroPatas<5){ patas = numeroPatas; } else { throw new IllegalArgumentException("Número de patas no válido"); } }
- Con esta actualización del método, el segundo (tercer, cuarto, quinto..) equipo que use nuestra clase gato, no va a variar su código (estabilidad) , seguirá llamando al método setPatas (mantenibilidad), y nosotros controlaremos que el número sea entre 0 y 4 (seguridad). Si volvemos a la primera versión de la clase, no nos permitiría añadir este tipo de controles a posteriori sin hacer cambiar todos los usos de nuestra clase.
- Aunque parezca un ejemplo tonto (y un poco cruel para los gatos) no es raro en Java encontrarte que tienes que trabajar con librerías que no conoces, que respetan el principio de encapsulamiento y que gracias a él puedes hacer un correcto funcionamiento de la misma, ya que controlará que no te salgas del tiesto, con valores inválidos, errores o incluso validando los datos con los que se crea.
- Con esta actualización del método, el segundo (tercer, cuarto, quinto..) equipo que use nuestra clase gato, no va a variar su código (estabilidad) , seguirá llamando al método setPatas (mantenibilidad), y nosotros controlaremos que el número sea entre 0 y 4 (seguridad). Si volvemos a la primera versión de la clase, no nos permitiría añadir este tipo de controles a posteriori sin hacer cambiar todos los usos de nuestra clase.
- public void setPatas(int numeroPatas){ if(numeroPatas>=0 && numeroPatas<5){ patas = numeroPatas; } else { throw new IllegalArgumentException("Número de patas no válido"); } }
- Por lo tanto, se nos ocurre, actualizar el método «setPatas» de nuestra clase Gato para que quede así:
- g.setPatas(10); g.setPatas(-50);
- Por mantenibilidad, estabilidad y seguridad principalmente. Un segundo equipo va a usar nuestra aplicación y por tanto nuestras clases. Nosotros conocemos perfectamente la funcionalidad, y entre todas las cosas que sabemos y asumimos, una de ellas es que los gatos no tienen más de 4 patas (o menos de 0). Pero sin embargo, según la estructura del lenguaje Java, no hay nada que no impida a un desarrollador hacer esto (No con nuestra clase actual):
Information
- Description
- Mind Map on Encapsulamiento, created by Oscar Fernando Sanchez Perez on 09/11/2020.
- Created by
- Oscar Fernando Sanchez Perez
- Views
- 2
- Rating