Encapsulation: private fields, getters, setters · Encapsulamento: 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.
Proteger seus dados
- Encapsulamento significa esconder os dados de um objeto e alterá-los apenas através de métodos.
- Isso mantém os dados seguros. Outro código não pode colocar um valor ruim neles.
- As ferramentas principais são as palavras
privateepublic.
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
- Marque as variáveis de instância como
privatepara que o código fora da classe não possa tocá-las diretamente. - Métodos dentro da mesma classe ainda podem usá-las.
- Este é o estilo normal para AP CSA: campos são
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().
Acessores (getters)
- Um campo é privado, então adicionamos um método
publicpara ler ele. - Um método que retorna um campo é chamado de acessor ou getter.
- Geralmente começa com
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)
- Um método que altera um campo é chamado de mutador ou setter.
- Ele pode verificar o novo valor primeiro e recusar um mau.
- Abaixo,
depositignora um valor negativo, então o 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 instance
- Um campo de instance pertence a um objeto. Cada objeto tem o seu próprio.
- Um campo
staticpertence à classe em si — ele é compartilhado por todos os objetos. - Abaixo,
countaumenta em 1 toda vez que qualquerRoboté construído.
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()retorna texto que descreve o objeto.- O Java o chama automaticamente quando você imprime o objeto ou o junta com
+. - Ele não recebe parâmetros e retorna um
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.
Erros comuns
- Torne os campos
privatee acesse-os através de getters e setters. - Um setter pode verificar um valor antes de armazená-lo.
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.
Agora você tenta
- Preencha cada classe para que seus dados privados sejam alterados apenas através de métodos seguros.
- Um Harness oculto constrói o objeto, chama os métodos e verifica os resultados.
- Pressione Run para compilar, depois 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 · e not more than the balance (no overdraft). getBalance() returns the balance. · Complete BankAccount. Mantenha balance privado. deposit(amount) adiciona o valor apenas se for maior que 0. withdraw(amount) subtrai apenas se o valor for maior que 0 e não exceder o saldo (sem superdraw). getBalance() retorna o saldo.
Click Run to see the output here. · Clique em Executar para ver a saída aqui.
Complete Temperature. The constructor stores an int degrees in a private field. toString() returns the degrees followed by C — for 21 it returns 21C. · Complete Temperature. O construtor armazena um int degrees em um campo privado. toString() retorna os graus seguidos por C — para 21 ele retorna 21C.
Click Run to see the output here. · Clique em Executar para ver a saída aqui.
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. · Complete Widget. Um campo privado static count começa em 0. Toda vez que um Widget é construído, o construtor adiciona 1 a count. O método static getCount() retorna quantos widgets foram construídos.
Click Run to see the output here. · Clique em Executar para ver a saída aqui.