Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Encapsulamento 
 
Programação em Java 
 
Prof. Maurício Braga 
 
 
2/27 
Pilares da programação OO 
 Encapsulamento 
 
 Herança (Generalização/Especialização) 
 
 Polimorfismo 
3/27 
Encapsulamento 
Separa a 
interface de um 
objeto dos 
detalhes de seu 
funcionamento 
interno 
4/27 
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. 
5/27 
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. 
6/27 
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 
7/27 
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. 
8/27 
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. 
 
 
9/27 
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 
10/27 
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. 
11/27 
Métodos de acesso 
public String getNome() 
{ 
 return nome; 
} 
Tipo de retorno Nome do método Lista de 
parâmetros 
(vazia) 
Início e fim do corpo do método (bloco) 
Instrução de retorno 
Modificador de 
 visibilidade 
12/27 
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. 
13/27 
Métodos modificadores 
public void setNome(String nome_produto) 
{ 
 nome = nome_produto; 
} 
Tipo de retorno (void) 
Nome do método Parâmetro 
Modificador de 
visibilidade 
Atribuição 
Atributo sendo alterado 
14/27 
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); 
 } 
} 
15/27 
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! 
 
16/27 
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. 
17/27 
Exemplo 
class ProdutoSemEncapsulamento { 
 public int codigo; 
 public String nome; 
 public double preco; 
 public double desconto_a_vista; 
 
 } 
18/27 
Exemplo 
public static void main(String[] args) { 
 
 ProdutoSemEncapsulamento p = new 
ProdutoSemEncapsulamento(); 
 
 p.codigo = 1; 
 p.nome = "Samsung 17 polegadas"; 
 p.preco = 500; 
 p.desconto_a_vista = 10; 
 
 System.out.println("Preço à prazo: " + p.preco); 
 System.out.println("Preço à vista: " + (p.preco – 
p.preco*p.desconto_a_vista/100)); 
} 
19/27 
Exemplo 
O que aconteceria se o programador 
tivesse digitado um desconto de 200? 
20/27 
Exemplo 
21/27 
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; 
} 
 
22/27 
Solução 
class Produto { 
 private int codigo; 
 private String nome; 
 private double preco; 
 private double desconto_a_vista; 
 
 public Produto(int cod_prod, String nome_prod, double 
preco_prod, double desc) { 
 codigo = cod_prod; 
 nome = nome_prod; 
 preco = preco_prod; 
 desconto_a_vista = desc; 
 } 
23/27 
Solução 
 public double getPreco() { 
 return preco; 
 } 
 public double getPrecoAVista() { 
 double preco_a_vista; 
 preco_a_vista = preco - preco*desconto_a_vista/100; 
 return preco_a_vista; 
 } 
 public void setDesconto(double desc) { 
 if ((desc > 100) || (desc < 0)) 
 desconto_a_vista = 0; 
 else 
 desconto_a_vista = desc; 
 } 
} 
24/27 
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. 
25/27 
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; 
 } 
 
26/27 
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); 
 } 
} 
Encapsulamento 
 
Programação em Java 
 
Prof. MaurícioBraga

Mais conteúdos dessa disciplina