Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Encapsulamento em oo

  • Be the first to comment

Encapsulamento em oo

  1. 1. EncapsulamentoProgramação em Java
  2. 2. Pilares da programação OO Encapsulamento Herança (Generalização/Especialização) Polimorfismo 2/27
  3. 3. Encapsulamento Separa a interface de um objeto dos detalhes de seu funcionamento interno 3/27
  4. 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. 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. 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. 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. 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. 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. 10. Encapsulamento em Java - Métodosde acesso  Junto com os métodos modificadores, viabilizam o encapsulamento.  Métodos de acesso permitem acessar os atributos do objeto. 10/27
  11. 11. Métodos de acesso Tipo de retorno Nome do método Lista deModificador de parâmetrosvisibilidade (vazia) public String getNome() { return nome; Instrução de retorno } Início e fim do corpo do método (bloco) 11/27
  12. 12. Encapsulamento em Java - Métodosmodificadores 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. 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. 14. Exemplo Encapsulamentoclass 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. 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. 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
  17. 17. Exemploclass ProdutoSemEncapsulamento { public int codigo; public String nome; public double preco; public double desconto_a_vista; } 17/27
  18. 18. Exemplopublic 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));} 18/27
  19. 19. Exemplo O que aconteceria se o programador tivesse digitado um desconto de 200? 19/27
  20. 20. Exemplo 20/27
  21. 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
  22. 22. Soluçãoclass 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; } 22/27
  23. 23. 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; }} 23/27
  24. 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. 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. 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
  27. 27. EncapsulamentoProgramação em JavaProf. Maurício Braga

×