SlideShare uma empresa Scribd logo
1 de 27
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

Mais conteúdo relacionado

Mais procurados

Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoHelder Lopes
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoArthur Emanuel
 
Java: strings e arrays
Java: strings e arraysJava: strings e arrays
Java: strings e arraysArthur Emanuel
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Leinylson Fontinele
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Leinylson Fontinele
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticosCentro Paula Souza
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoMauro Pereira
 
Lista de exercicios vetores, matrizes, registros e sub-algoritmos
Lista de exercicios   vetores, matrizes, registros e sub-algoritmosLista de exercicios   vetores, matrizes, registros e sub-algoritmos
Lista de exercicios vetores, matrizes, registros e sub-algoritmosMauro Pereira
 

Mais procurados (20)

Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumo
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acesso
 
Java: strings e arrays
Java: strings e arraysJava: strings e arrays
Java: strings e arrays
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
08 modificadores static
08   modificadores static08   modificadores static
08 modificadores static
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Lista de exercicios vetores, matrizes, registros e sub-algoritmos
Lista de exercicios   vetores, matrizes, registros e sub-algoritmosLista de exercicios   vetores, matrizes, registros e sub-algoritmos
Lista de exercicios vetores, matrizes, registros e sub-algoritmos
 

Destaque

Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Felipe Valcanaia
 
Java Básico :: Modificadores de acesso
Java Básico :: Modificadores de acessoJava Básico :: Modificadores de acesso
Java Básico :: Modificadores de acessoWesley R. Bezerra
 
Criando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberansCriando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberansMony Pinheiro
 
Pasos para crear un Video en Picovico
Pasos para crear un Video en PicovicoPasos para crear un Video en Picovico
Pasos para crear un Video en PicovicoVeronica Zonteponte
 
Exercicios java basico_algoritmo_i
Exercicios java basico_algoritmo_iExercicios java basico_algoritmo_i
Exercicios java basico_algoritmo_iLucas Freire
 
Wordpress :: Plugins - visão geral
Wordpress :: Plugins - visão geralWordpress :: Plugins - visão geral
Wordpress :: Plugins - visão geralWesley R. Bezerra
 
Introdução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENACIntrodução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENACDavid Arty
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesRodrigo Cascarrolho
 

Destaque (14)

Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4
 
Java Básico :: Modificadores de acesso
Java Básico :: Modificadores de acessoJava Básico :: Modificadores de acesso
Java Básico :: Modificadores de acesso
 
POO Herança
POO HerançaPOO Herança
POO Herança
 
Criando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberansCriando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberans
 
Pasos para crear un Video en Picovico
Pasos para crear un Video en PicovicoPasos para crear un Video en Picovico
Pasos para crear un Video en Picovico
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
Exercicios java basico_algoritmo_i
Exercicios java basico_algoritmo_iExercicios java basico_algoritmo_i
Exercicios java basico_algoritmo_i
 
POO - 08 - Prática de Encapsulamento
POO - 08 - Prática de EncapsulamentoPOO - 08 - Prática de Encapsulamento
POO - 08 - Prática de Encapsulamento
 
Exercicios de JAVA
Exercicios de JAVAExercicios de JAVA
Exercicios de JAVA
 
Wordpress :: Plugins - visão geral
Wordpress :: Plugins - visão geralWordpress :: Plugins - visão geral
Wordpress :: Plugins - visão geral
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
Introdução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENACIntrodução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENAC
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 

Semelhante a Java Encapsulamento

Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Elaine Cecília Gatto
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016Leandro Silva
 
Alg aula 08 - modularizacao
Alg   aula 08 - modularizacaoAlg   aula 08 - modularizacao
Alg aula 08 - modularizacaoThalles Anderson
 
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A ObjetosSap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A ObjetosMarcelo Ramos
 

Semelhante a Java Encapsulamento (20)

Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Refactoring
RefactoringRefactoring
Refactoring
 
Solid
SolidSolid
Solid
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Php05
Php05Php05
Php05
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Tutorial Java: Interface
Tutorial Java: InterfaceTutorial Java: Interface
Tutorial Java: Interface
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
 
Alg aula 08 - modularizacao
Alg   aula 08 - modularizacaoAlg   aula 08 - modularizacao
Alg aula 08 - modularizacao
 
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A ObjetosSap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 

Java Encapsulamento

  • 2. Pilares da programação OO  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 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
  • 17. Exemplo class ProdutoSemEncapsulamento { public int codigo; public String nome; public double preco; public double desconto_a_vista; } 17/27
  • 18. 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
  • 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

Notas do Editor

  1. Programação orientada a objetos com Java
  2. Programação orientada a objetos com Java
  3. Programação orientada a objetos com Java
  4. Programação orientada a objetos com Java
  5. Programação orientada a objetos com Java
  6. Programação orientada a objetos com Java
  7. Programação orientada a objetos com Java