El volumen no puede ser 500
Subes el volumen de tu móvil. El móvil te deja llegar a 100 y ahí para.
Nadie puede ponerlo en 500 o en menos 20. Algo vigila el número antes de aceptarlo.
Hoy aprendes a poner ese vigilante en tus objetos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| private | Un atributo privado solo se puede usar dentro de su propia clase. | private int volume; |
| Getter | Un método que devuelve el valor de un atributo privado. Empieza por get. | getVolume() |
| Setter | Un método que cambia un atributo privado. Empieza por set y puede comprobar el valor. | setVolume(50) |
| Encapsular | Cerrar los datos de un objeto y dejar solo una puerta con vigilante. | private y set |
| Valor válido | Un valor que tiene sentido para ese dato. | volumen de 0 a 100 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El problema: nadie vigila
class Phone {
int volume;
}
public class Main {
public static void main(String[] args) {
Phone phone = new Phone();
phone.volume = 50;
System.out.println("Volumen: " + phone.volume);
// Nada impide un valor que no tiene sentido.
phone.volume = 500;
System.out.println("Volumen: " + phone.volume);
}
}
Cerrar la puerta y poner un portero
Si el atributo es private, nadie de fuera lo toca. Ni para leer ni para cambiar.
Entonces escribimos dos métodos dentro de la clase. Uno lee: getVolume. Otro cambia: setVolume.
El método que cambia puede mirar el valor antes. Si no vale, lo rechaza.
Pruébalo: el volumen vigilado
class Phone {
private int volume;
int getVolume() {
return volume;
}
void setVolume(int volume) {
if (volume >= 0 && volume <= 100) {
this.volume = volume;
}
}
}
public class Main {
public static void main(String[] args) {
Phone phone = new Phone();
phone.setVolume(50);
phone.setVolume(500);
System.out.println("Volumen: " + phone.getVolume());
// Prueba phone.volume = 70; y lee el error.
}
}
Ejemplo resuelto: qué guarda el móvil
| Llamada | Volumen antes | Es válido | Volumen después |
|---|---|---|---|
| setVolume(50) | 0 | Sí | 50 |
| setVolume(500) | 50 | No | 50 |
| setVolume(0) | 50 | Sí | 0 |
| setVolume(-20) | 0 | No | 0 |
| setVolume(100) | 0 | Sí | 100 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Repaso rápido
Inténtalo
Repaso rápido
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Por qué merece la pena
Con private, la clase decide qué valores son posibles. Todo el programa depende de eso.
Si mañana el volumen llega a 200, cambias un solo método. No tienes que revisar cien líneas.
Los nombres siguen una costumbre: get más el nombre del dato, y set más el nombre del dato.
Pruébalo: un dato que solo se lee
class Student {
private String name;
Student(String name) {
this.name = name;
}
// Solo hay getter: el nombre no se cambia desde fuera.
String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("Marta");
System.out.println("Hola, " + student.getName());
// Quitar el setter también es una forma de proteger.
}
}