3. Encapsulamento
Separa a
interface de um
objeto dos
detalhes de seu
funcionamento
interno
3/27
4. Encapsulamento
Permite que uma aplicação seja construída a partir de um conjunto
de componentes que realizam seu trabalho de forma independente.
Cada componente contém tudo que precisa para realizar seu
trabalho independentemente dos outros componentes.
Estimula a divisão de responsabilidades: cada objeto faz apenas o
que deve fazer, não realizando tarefas extras.
4/27
5. Encapsulamento
A independência entre os objetos é obtida escondendo detalhes
internos do funcionamento de cada componente, tornando o uso do
componente acessível apenas através de uma interface externa.
Facilita o controle ao acesso de informações do estado interno do
objeto.
Você não precisa saber como um telefone realmente funciona, para
poder usá-lo. Só precisamos saber para que ele serve, e conhecer
sua interface, ou seja a forma de nos comunicarmos com ele.
5/27
6. Encapsulamento
Se a companhia telefônica mudar seus processos, você
vai continuar usando o aparelho normalmente
A implementação de uma classe, pode ser alterada sem
afetar a sua interface. Se um novo telefone for criado,
como um telefone digital, a implementação foi alterada,
mas a interface permanece a mesma
6/27
7. Interface
Lista de serviços oferecidos por um componente
Funciona como um “contrato” que o componente
estabelece com o mundo exterior que define exatamente
como este pode fazer uso do componente
Funciona como um “painel de controle” do componente.
7/27
8. Interface
Formada por métodos e atributos públicos.
Ausência de informações sobre como o trabalho é
realizado.
Liberdade para modificar o funcionamento do
componente sem “quebra de contrato” com o mundo
exterior.
8/27
9. Exemplo Encapsulamento
Telefone
interface pública- botões utilizados para interagir com
o objeto
implementação - as operações internas, o propósito
do objeto
Carro
interfaces
públicas - pedais, direção, câmbio
implementação - o funcionamento do carro
9/27
10. Encapsulamento em Java - Métodos
de acesso
Junto com os métodos modificadores, viabilizam o
encapsulamento.
Métodos de acesso permitem acessar os atributos do
objeto.
10/27
11. Métodos de acesso
Tipo de retorno Nome do método Lista de
Modificador de parâmetros
visibilidade (vazia)
public String getNome()
{
return nome; Instrução de retorno
}
Início e fim do corpo do método (bloco)
11/27
12. Encapsulamento em Java - Métodos
modificadores
Utilizados para modificar o estado de um objeto.
Alcançados por meio da modificação do valor de um ou
mais atributos do objeto.
Geralmente contêm instruções de atribuição.
Geralmente recebem parâmetros.
12/27
13. Métodos modificadores
Modificador de
Tipo de retorno (void)
visibilidade
Nome do método Parâmetro
public void setNome(String nome_produto)
{
nome = nome_produto; Atribuição
}
Atributo sendo alterado
13/27
14. Exemplo Encapsulamento
class Cliente {
private double credito;
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome_cliente) {
nome = nome_cliente;
}
public void imprimaDadosCliente(Cliente c) {
imprimir(c.nome, c.credito);
}
private void imprimir(String nome, double credito) {
System.out.println(“Cliente: “ + nome + “ Crédito: R$ “ + credito);
}
}
14/27
15. Interface da classe Cliente
public String getNome()
public void setNome(String nomeCliente)
public void imprimaDadosCliente(Cliente c)
Note que o método privado imprimir
não faz parte da interface!
15/27
16. Vantagens do encapsulamento
Reutilização – Uma vez que o componente é independente, ele
pode ser utilizado em diferentes programas com facilidade.
Divisão de responsabilidades – Cada objeto faz apenas o que lhe é
devido, não assumindo funções extras.
Facilidade de modificação – Uma vez que o mundo exterior não
conhece a implementação do componente, esta pode ser alterada
sem problemas.
Ausência de efeitos colaterais – Uma vez que o componente não
depende de partes do seu programa para funcionar, não há risco
dele modificar o funcionamento do programa.
16/27
21. Encapsulamento
Exercício
Corrija a classe do exemplo anterior (vista abaixo). Esta classe
deverá usar encapsulamento, possuir um construtor, um método
que calcula o preço a vista bem como um método setDesconto,
que recebe o valor do desconto, e se o mesmo for superior a
100 ou menor que zero, configurar o desconto como zero.
class ProdutoSemEncapsulamento {
public int codigo;
public String nome;
public double preco;
public double desconto_a_vista;
}
21/27
24. Exercício
Crie uma classe para representar uma conta bancária.
Esta classe deverá:
Usar encapsulamento;
Possuir dois atributos, código e saldo;
Possuir um construtor que receba o número da conta e o saldo
inicial. Se for passado um valor negativo para o saldo,utilizar
zero como saldo inicial;
Possuir métodos para creditar um valor, sacar um valor e
imprimir o saldo.
Se o valor a ser sacado for maior do que o saldo, sacar apenas
o valor correspondente ao saldo (saldo será igual a zero),
retornando o valor sacado em seguida.
24/27
25. Solução
class Conta {
private double saldo;
private long numero;
public Conta(long num, double val) {
numero = num;
if (val > 0)
saldo = val;
}
public void creditar(double val) {
saldo = saldo + val;
}
25/27
26. Solução
public double debitar(double val) {
if (val > saldo)
val = saldo;
saldo = saldo - val;
return val;
}
public void imprimaSaldo() {
System.out.println(“Conta: “ + numero + “Saldo: R$ “ +
saldo);
}
}
26/27