Encapsulation: private fields, getters, setters · Encapsulamiento: campos privados, getters, setters
Protect your data
- Encapsulation means hiding an object's data and only changing it through methods.
- This keeps the data safe. Other code cannot put a bad value into it.
- The main tools are the words
privateandpublic.
Protege tus datos
- Encapsulación significa ocultar los datos de un objeto y modificarlos únicamente a través de métodos.
- Esto mantiene los datos a salvo. Otro código no puede introducir valores incorrectos en ellos.
- Las herramientas principales son las palabras
privateypublic.
private fields
- Mark instance variables
privateso code outside the class cannot touch them directly. - Methods inside the same class can still use them.
- This is the normal style for AP CSA: fields are
private.
Campos private
- Marca las variables de instancia como
privatepara que el código fuera de la clase no pueda accederles directamente. - Los métodos dentro de la misma clase todavía pueden usarlas.
- Este es el estilo normal para AP CSA: los campos son
private.
public class BankAccount {
private double balance; // hidden from outside code
public BankAccount(double start) {
this.balance = start;
}
}
Accessors (getters)
- A field is private, so we add a
publicmethod to read it. - A method that returns a field is called an accessor or getter.
- It usually starts with
get, likegetBalance().
Accedores (getters)
- Un campo es privado, por lo que añadimos un método
publicpara leerlo. - Un método que devuelve un campo se llama accesor o getter.
- Generalmente comienza con
get, comogetBalance().
public class BankAccount {
private double balance;
public BankAccount(double start) {
this.balance = start;
}
public double getBalance() {
return this.balance;
}
}
Mutators (setters)
- A method that changes a field is called a mutator or setter.
- It can check the new value first and refuse a bad one.
- Below,
depositignores a negative amount, so the balance stays safe.
Mutadores (setters)
- Un método que modifica un campo se llama mutador o setter.
- Puede comprobar el nuevo valor primero y rechazar uno inválido.
- A continuación,
depositignora una cantidad negativa, por lo que el saldo permanece seguro.
public class BankAccount {
private double balance;
public BankAccount(double start) {
this.balance = start;
}
public void deposit(double amount) {
if (amount > 0) {
this.balance = this.balance + amount;
}
}
public double getBalance() {
return this.balance;
}
}
static vs instance
- An instance field belongs to one object. Each object has its own.
- A
staticfield belongs to the class itself — it is shared by all objects. - Below,
countrises by 1 every time anyRobotis built.
static vs instancia
- Un campo de instancia pertenece a un solo objeto. Cada objeto tiene el suyo propio.
- Un campo
staticpertenece a la clase en sí — está compartido por todos los objetos. - A continuación,
countaumenta en 1 cada vez que se construye cualquierRobot.
public class Robot {
private static int count = 0; // shared by all robots
public Robot() {
count = count + 1;
}
public static int getCount() {
return count;
}
}
toString()
toString()returns text that describes the object.- Java calls it automatically when you print the object or join it with
+. - It takes no parameters and returns a
String.
toString()
toString()devuelve texto que describe al objeto.- Java lo llama automáticamente cuando imprimes el objeto o lo concatenas con
+. - No toma parámetros y devuelve un
String.
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "(" + this.x + ", " + this.y + ")";
}
}
Common mistakes
- Make fields
privateand reach them through getters and setters. - A setter can check a value before storing it.
Errores comunes
- Haz que los campos sean
privatey accede a ellos a través de get y set. - Un setter puede verificar un valor antes de almacenarlo.
Now you try
- Fill in each class so its private data is changed only through safe methods.
- A hidden Harness builds the object, calls the methods, and checks the results.
- Press Run to compile, then Check answer.
Ahora tú prueban
- Rellena cada clase para que sus datos privados se modifiquen únicamente a través de métodos seguros.
- Un Harness oculto construye el objeto, llama a los métodos y verifica los resultados.
- Pulsa Run para compilar, luego Check answer.
Complete BankAccount. Keep balance private. deposit(amount) adds the amount only if it is greater than 0. withdraw(amount) subtracts only if the amount is greater than 0 and · y not more than the balance (no overdraft). getBalance() returns the balance. · Completa BankAccount. Mantén balance como privado. deposit(amount) suma la cantidad solo si es mayor que 0. withdraw(amount) resta solo si la cantidad es mayor que 0 y no supera el saldo (sin sobregiro). getBalance() devuelve el saldo.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Complete Temperature. The constructor stores an int degrees in a private field. toString() returns the degrees followed by C — for 21 it returns 21C. · Completa Temperature. El constructor almacena un int degrees en un campo privado. toString() devuelve los grados seguidos de C — para 21 devuelve 21C.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Complete Widget. A private static field · campo count starts at 0. Every time a Widget is built, the constructor adds 1 to count. The static method · método getCount() returns how many widgets have been built. · Completa Widget. Un campo static privado count comienza en 0. Cada vez que se construye un Widget, el constructor suma 1 a count. El método static getCount() devuelve cuántos widgets han sido construidos.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.