Encapsulamento



Programação em Java
Pilares da programação OO

   Encapsulamento

   Herança (Generalização/Especialização)

   Polimorfismo




                             2/27
Encapsulamento

                               Separa a
                        interface de um
                              objeto dos
                        detalhes de seu
                         funcionamento
                                 interno




                 3/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.




                                   4/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.




                                    5/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




                              6/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.




                             7/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.




                             8/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



                                 9/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.




                           10/27
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
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
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
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
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
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
Exemplo
class ProdutoSemEncapsulamento {
      public int codigo;
      public String nome;
      public double preco;
      public double desconto_a_vista;

  }




                                 17/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));
}




                                     18/27
Exemplo




      O que aconteceria se o programador
      tivesse digitado um desconto de 200?



                          19/27
Exemplo




          20/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;
}
                                    21/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;
    }

                                 22/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;
    }
}                                   23/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.

                                     24/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;
   }


                               25/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);
     }
 }




                                  26/27
Encapsulamento



Programação em Java

Prof. Maurício Braga

Encapsulamento em oo

  • 1.
  • 2.
    Pilares da programaçãoOO  Encapsulamento  Herança (Generalização/Especialização)  Polimorfismo 2/27
  • 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 classeCliente 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
  • 17.
    Exemplo class ProdutoSemEncapsulamento { public int codigo; public String nome; public double preco; public double desconto_a_vista; } 17/27
  • 18.
    Exemplo public static voidmain(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.
    Exemplo O que aconteceria se o programador tivesse digitado um desconto de 200? 19/27
  • 20.
    Exemplo 20/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
  • 22.
    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; } 22/27
  • 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.
    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
  • 27.

Notas do Editor

  • #2 Programação orientada a objetos com Java
  • #11 Programação orientada a objetos com Java
  • #12 Programação orientada a objetos com Java
  • #13 Programação orientada a objetos com Java
  • #14 Programação orientada a objetos com Java
  • #22 Programação orientada a objetos com Java
  • #28 Programação orientada a objetos com Java