Encapsulamento
Encapsulamento significa que os dados ou atributos de uma classe ( o seu estado) e os métodos que os tratam devem escondidos na classe negando o acesso direto a esses dados a partir do exterior da classe. A classe, nesta situação, comporta-se como uma cápsula escondendo o seu interior, daí a designação “encapsulamento”. O acesso aos atributos da classe passa a fazer-se de forma controlada e não direta.
Benefícios do encapsulamento
- Ocultação de dados: ao restringir o acesso ao estado interno do objeto, o encapsulamento protege os dados do objeto de modificações não intencionais ou prejudiciais.
- Acesso controlado: o encapsulamento fornece acesso controlado aos dados usando métodos getter e setter, que podem incluir validação ou outra lógica.
- Maior manutenibilidade: alterações na implementação interna podem ser feitas sem afetar o código externo que usa a classe.
- Maior flexibilidade: o encapsulamento permite que alterações sejam feitas no funcionamento interno de uma classe sem afetar a interface externa.
- Modularidade: o encapsulamento leva a uma melhor modularidade e separação de preocupações, tornando o código mais fácil de entender e manter.
Implementação do encapsulamento em Java
Para garantirmos o encapsulamento de uma classe temos de fazer o seguinte:
- Declarar os campos como privados: tornar os dados (campos) privados para restringir o acesso direto de fora da classe.
- Forneça métodos getter e setter públicos: use métodos públicos para fornecer acesso controlado aos campos privados. Esses métodos são chamados getters (para recuperar o valor) e setters (para modificar o valor).
Exemplo:
public class Empregado {
private String nome; //campo privado
//getter e setter públicos
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
}
Getters e Setters
Um getter é um método público que retorna o valor de um campo. O seu nome é formado
pela palavra get mais o nome da propriedade em maiúscula. O seu tipo de dados é o tipo de
dados do campo.
Um setter é um método público que permite modificar o valor de um campo. O seu nome é
formado pela palavra set mais o nome do campo em maiúscula. É um método void que tem
um parâmetro do mesmo tipo de dados do campo.
Exemplo:
public class Aluno {
// Campos privados
private String nome;
private int idade;
// Construtor
public Aluno(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
// Getter publico para 'nome'
public String getNome() {
return nome;
}
// Setter publico para 'nome'
public void setNome(String nome) {
this.nome = nome;
}
// Getter publico para 'idade'
public int getIdade() {
return idade;
}
// Setter publico para 'idade' com validação
public void setIdade(int idade) {
if (idade > 0) { // Validação para garantir que a idade é positiva
this.idade = idade;
} else {
System.out.println("Digite uma idade válida");
}
}
public void displayInfo() {
System.out.println("Nome: " + nome + ", Idade: " + idade);
}
}
Podemos ter campos em que só é permitida a consulta dos seus dados e não a sua alteração. Neste caso esses campos teriam um getter mas não um setter. Podemos igualmente ter campos só com setter.
