SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Programação Orientada a Objetos



           Encapsulamento
      Pacotes e Modificadores de Acesso



            Ludimila Monjardim Casagrande
                        2012
Aplicação de Modificadores de Acesso

      Esse exemplo apresenta uma classe modelada
         em UML na qual existe um atributo privado e
         dois métodos públicos:

                                                       -     private
                                                       +     public
                                                       #     protected
                                                       ~     default




Encapsulamento         ©2012 Ludimila Monjardim Casagrande               2
O Conceito de Pacote

      Em Java, a visibilidade ou grau de acesso a um
         atributo ou método está intimamente ligado ao
         conceito de pacote ou simplesmente package.

      A identificação de uma package corresponde à
         hierarquia de diretórios na qual a classe está
         inserida.
           Exemplo de declaração de package:
                  package br.com.salesiano;                        Raiz do projeto.




Encapsulamento               ©2012 Ludimila Monjardim Casagrande                        3
O Conceito de Pacote

      Em um código-fonte escrito em Java, a declaração da
         package deve sempre anteceder a declaração da
         classe.
      Normalmente a declaração da package é a primeira
         informação contida no arquivo.
      Na composição do nome da package os nomes dos
         diretórios devem ser separados por “.”.
      Deve-se ter cuidado para que os nomes dos diretórios
         que compõem uma package sejam nomes válidos para
         todas as plataformas.


Encapsulamento            ©2012 Ludimila Monjardim Casagrande   4
O Conceito de Pacote

      package br.com.salesiano;

      public class Conta {
          private double saldo;
          public void creditar (double valor) {
                 saldo = saldo + valor;
          }                                                            Classe contida
          public void debitar (double valor) {                         no subdiretório
                 saldo = saldo - valor;                                salesiano.
          }
      }

Encapsulamento                   ©2012 Ludimila Monjardim Casagrande                     5
Importações

      Para fazer uso de uma package em uma classe
         é necessário importá-la.
      A sintaxe para importação é:
           import <pkg_name>[.<sub_pkg_name>].<class_name>;
           import <pkg_name>[.<sub_pkg_name>].*;
           É possível importar uma única classe, usando o nome da
            package seguido do nome da classe, ou importar toda
            uma package, usando o nome da package com um
            asterisco no final.



Encapsulamento            ©2012 Ludimila Monjardim Casagrande        6
Pacotes e Importações nas Classes

      A estrutura básica de um arquivo-fonte em Java
         deve ser:
           Declaração da package
           Importações (imports)
           Definição da(s) classe(s)

      Essa ordem é relevante, portanto, deve ser
         respeitada.


Encapsulamento           ©2012 Ludimila Monjardim Casagrande   7
Exemplo: Entrada.java
   package br.com;

   import java.util.Scanner;
   //import java.util.*; //também poderia ser usado

   public class Entrada{
    public static void main(String[] args){

           Scanner entrada = new Scanner(System.in);
           String nome;

           System.out.println("Informe seu nome: ");
           nome = entrada.next();

           System.out.println("Seu nome é: " + nome);
       }                                                             * Requer J2SDK 1.5 ou
   }                                                                        superior
Encapsulamento                 ©2012 Ludimila Monjardim Casagrande                           8
Modificadores de Acesso

      Os modificadores de acesso definem quais
         classes podem usar ou ter acesso a um
         determinado elemento.

      Esses elementos podem ser:
           Uma classe;
           As variáveis de uma classe (atributos);
           Os métodos e os construtores de uma classe.



Encapsulamento            ©2012 Ludimila Monjardim Casagrande   9
Modificadores de Acesso

      Em Java, os modificadores de acesso são:
           public
           protected
           private

      O modificador de acesso considerado “default”
         corresponde à ausência de qualquer um dos
         modificadores citados.


Encapsulamento          ©2012 Ludimila Monjardim Casagrande   10
O Modificador: Public

      O modificador de acesso public é aquele que
         permite o maior grau de visibilidade e de acesso
         aos diferentes elementos.

      Classes, variáveis de classes, construtores e
         métodos declarados como públicos podem ser
         usados sem restrições.

      Public pode ser aplicado a qualquer um dos
         elementos citados.

Encapsulamento         ©2012 Ludimila Monjardim Casagrande   11
O Modificador: Private

      O modificador private é o mais restritivo de
         todos.
      Variáveis ou métodos declarados como private
         só podem ser acessados diretamente por
         instâncias da classe a qual pertencem.
      Nem mesmo subclasses possuem acesso direto
         a elementos declarados como private na sua
         superclasse.
      O modificador private não se aplica a classes.

Encapsulamento        ©2012 Ludimila Monjardim Casagrande   12
O Modificador: Protected

      Os elementos declarados como protected
         podem ser acessados por classes da mesma
         package ou pelas subclasses da classe na qual
         estão contidos.
      Esse modificador não se aplica a classes.
      É aplicado normalmente a variáveis e métodos.
      Elementos declarados como protegidos
         possuem um grau de acesso maior do que os
         declarados como “default”.

Encapsulamento         ©2012 Ludimila Monjardim Casagrande   13
Ausência de Modificador de Acesso

      A ausência de um modificador de acesso na declaração
         de um elemento indica um grau de acessibilidade
         considerado “default”.
      Esse grau de acessibilidade é mais restritivo do que o
         protected uma vez que torna os elementos visíveis
         somente para a própria classe e para as outras classes
         contidas na mesma package.
      Os elementos declarados com “default” não podem ser
         usados pelas subclasses da classe na qual estão
         contidos, caso essas pertençam a outras packages.


Encapsulamento           ©2012 Ludimila Monjardim Casagrande      14
Modificadores e Membros da Classe

      A tabela indica a quais elementos da classe os
         vários modificadores de acesso podem ser
         aplicados:
                        Classe             Atributos         Construtores    Métodos
     public               sim                  sim                    sim      sim
     protected            não                  sim                    sim*     sim
     default              sim                  sim                    sim      sim
     private              não                  sim                    sim*     sim

     * Pouco utilizado nesses casos.




Encapsulamento                  ©2012 Ludimila Monjardim Casagrande                    15
Níveis de Acesso

      A tabela indica os níveis de acesso (ou graus de
         visibilidade) definidos por cada modificador de
         acesso:
                        Classe             Package             Subclasse*   Global**
     public               sim                  sim                    sim     sim
     protected            sim                  sim                    sim     não
     default              sim                  sim                    não     não
     private              sim                  não                    não     não

     * Subclasse contida em outra package.
     ** Acesso por classes de outros projetos ou sistemas.



Encapsulamento                  ©2012 Ludimila Monjardim Casagrande                    16
Possível Distribuição de Classes
    Packages:




Encapsulamento   ©2012 Ludimila Monjardim Casagrande   17
Encapsulamento

      Encapsulamento é um dos conceitos
         fundamentais da programação orientada a
         objetos.
      O encapsulamento, também referido como
         ocultamento de informações, consiste em
         separar os aspectos externos de um objeto, os
         quais são acessíveis a outros objetos, dos
         detalhes internos de sua implementação, os
         quais permanecem ocultos para os outros
         objetos.

Encapsulamento         ©2012 Ludimila Monjardim Casagrande   18
Principais Vantagens

      O uso de encapsulamento permite que a
         implementação de um objeto possa ser
         modificada sem afetar as aplicações que usam
         este objeto, ou seja, o encapsulamento evita
         que um programa se torne tão interdependente
         que uma pequena mudança tenha grandes
         efeitos colaterais.




Encapsulamento        ©2012 Ludimila Monjardim Casagrande   19
Principais Vantagens

      O encapsulamento também evita que dados
         específicos de uma classe possam ser
         acessados ou usados diretamente e faz com
         que isso aconteça somente por meio das
         operações cuja responsabilidade é a
         manipulação desses dados.
      Tais operações são consideradas a interface
         dos objetos, que permite a comunicação entre
         os mesmos.


Encapsulamento         ©2012 Ludimila Monjardim Casagrande   20
Exemplo
         public class Hora {
             public int hora;
                                        Atributos declarados como
             public int minuto;
                                        públicos
             public int segundo;
             public Hora() {
             }
             public Hora(int h, int m, int s) {
               this.hora = h;
               this.minuto = m;                        Falha no construtor!
               this.segundo = s;
             }                                                                    A classe é
                                                                            responsável por
             public String toString( ) {
                                                                                   manter a
               String str = hora + ":" + minuto + ":" + segundo;              consistência e
               return str;                                                correção das suas
             }                                                                   instâncias.
         }
Encapsulamento                    ©2012 Ludimila Monjardim Casagrande                          21
Exemplo

        public class Principal {
          public static void main (String[] args) {
                 Hora h = new Hora();
                 h.hora = 30;         Como os atributos são públicos, eles
                 h.minuto = 80;       podem ser acessados e alterados
                 h.segundo = -40;     diretamente em outra classe
                 System.out.println(h);
          }
        }

        Resultado: 30:80:-40      Não é uma hora válida!



Encapsulamento                 ©2012 Ludimila Monjardim Casagrande           22
Solução para o Problema

      Usar encapsulamento para controlar os valores
         atribuídos às variáveis da classe, de forma que
         a todo momento os dados mantidos pela classe
         sejam válidos e consistentes.

      Uma classe deve conhecer quais são os valores
         válidos para os seus atributos. As demais
         classes não são obrigadas a saber esses
         detalhes.


Encapsulamento         ©2012 Ludimila Monjardim Casagrande   23
Solução para o Problema
  public class Hora {
    private int hora;
    private int minuto;
                                                                      public void setHora(int hora) {
    private int segundo;
                                                                        if(hora >= 0 && hora <= 23) {
    public Hora(){                                                         this.hora = hora;
    }                                                                   }
    public Hora(int h, int m, int s) {                                }
      if((h >= 0 && h <= 23) &&                                       public void setMinuto(int minuto) {
         (m >= 0 && m <= 59) &&                                         if(minuto >= 0 && minuto <= 59) {
         (s >= 0 && s <= 59)) {                                            this.minuto = minuto;
             this.hora = h;                                             }
             this.minuto = m;                                         }
             this.segundo = s;
                                                                     public void setSegundo(int segundo) {
      }
                                                                       if(segundo >= 0 && segundo <= 59) {
    }
                                                                          this.segundo = segundo;
    public String toString( ) {                                        }
      String str = hora + ":" + minuto + ":" + segundo;              }
      return str;                                                  …
    }                                                              }
    …
Encapsulamento                           ©2012 Ludimila Monjardim Casagrande                                24
Solução para o Problema

         public class Principal {
           public static void main (String[] args) {
                  Hora h = new Hora();
                  h.setHora(30);
                  h.setMinuto(80);
                  h.setSegundo(-40);
                  System.out.println(h);
           }
         }

         Resultado: 0:0:0  Tentativas de alterações inválidas não são aceitas.



Encapsulamento                 ©2012 Ludimila Monjardim Casagrande           25
Ocultamento de Implementação

        public class Principal {
          public static void main (String[ ] args) {
               Incrementa5 inc = new Incrementa5();
               int resultado = inc.incrementa5(10);
               System.out.println(resultado);
          }
        }

        Resultado: 15



Encapsulamento           ©2012 Ludimila Monjardim Casagrande   26
Ocultamento de Implementação
  public class Incrementa5 {

      /*public int incrementa5 (int numero) {
           int i = 0;
           while (i < 5) {
               numero++;                                            As implementações podem
               i++;                                                ser substituídas sem efeitos
           }                                                         colaterais para as classes
           return numero;                                               que utilizam o método.
      }*/

      public int incrementa5 (int numero) {
           return numero + 5;
      }
  }



Encapsulamento               ©2012 Ludimila Monjardim Casagrande                                  27
Leituras Recomendadas

      FJ-11: Java e Orientação a Objetos.
         Caelum Ensino e Soluções em Java.
         http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/

      Java: Como Programar.
         Autores: H. M. Deitel e P. J. Deitel.
         Editora: Pearson – 6ª Edição.




Encapsulamento               ©2012 Ludimila Monjardim Casagrande         28

Mais conteúdo relacionado

Mais procurados

Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfacesRafael Pinheiro
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
Poo encapsulamento
Poo encapsulamentoPoo encapsulamento
Poo encapsulamentoSedu
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0César Augusto Pessôa
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em javaManoel Afonso
 

Mais procurados (20)

POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfaces
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
Poo encapsulamento
Poo encapsulamentoPoo encapsulamento
Poo encapsulamento
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em java
 

Destaque (11)

POO Herança
POO HerançaPOO Herança
POO Herança
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acesso
 
Php do Jeito Certo
Php do Jeito CertoPhp do Jeito Certo
Php do Jeito Certo
 
ICC : modelo OSI
ICC : modelo OSIICC : modelo OSI
ICC : modelo OSI
 
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 - 08 - Prática de Encapsulamento
POO - 08 - Prática de EncapsulamentoPOO - 08 - Prática de Encapsulamento
POO - 08 - Prática de Encapsulamento
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Java - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresJava - Aula 3 - Construtores
Java - Aula 3 - Construtores
 
Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 

Semelhante a POO Encapsulamento

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
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
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
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaWanderlei Silva do Carmo
 
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16marcusNOGUEIRA
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoAnderson Ledo
 
A04_Orientacao a Objetos 02.pdf
A04_Orientacao a Objetos 02.pdfA04_Orientacao a Objetos 02.pdf
A04_Orientacao a Objetos 02.pdfJadna Almeida
 
Aula 4 acessibilidade
Aula 4   acessibilidadeAula 4   acessibilidade
Aula 4 acessibilidadeDanilo Alves
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9PeslPinguim
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)George Mendonça
 

Semelhante a POO Encapsulamento (20)

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
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
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 ...
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
 
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
 
Herança
HerançaHerança
Herança
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Java11
Java11Java11
Java11
 
A04_Orientacao a Objetos 02.pdf
A04_Orientacao a Objetos 02.pdfA04_Orientacao a Objetos 02.pdf
A04_Orientacao a Objetos 02.pdf
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Aula 4 acessibilidade
Aula 4   acessibilidadeAula 4   acessibilidade
Aula 4 acessibilidade
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
 

Mais de Ludimila Monjardim Casagrande (14)

Gerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com ScrumGerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com Scrum
 
POO - 23 - Coleções da API do Java
POO -  23 - Coleções da API do Java POO -  23 - Coleções da API do Java
POO - 23 - Coleções da API do Java
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
POO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de DadosPOO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de Dados
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
POO - 15 - Passagem de Argumentos
POO - 15 - Passagem de ArgumentosPOO - 15 - Passagem de Argumentos
POO - 15 - Passagem de Argumentos
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
POO - 12 - A Classe Object
POO - 12 - A Classe ObjectPOO - 12 - A Classe Object
POO - 12 - A Classe Object
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
POO - 04 - Variávies em Java
POO - 04 - Variávies em JavaPOO - 04 - Variávies em Java
POO - 04 - Variávies em Java
 
POO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - DatasPOO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - Datas
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 

POO Encapsulamento

  • 1. Programação Orientada a Objetos Encapsulamento Pacotes e Modificadores de Acesso Ludimila Monjardim Casagrande 2012
  • 2. Aplicação de Modificadores de Acesso  Esse exemplo apresenta uma classe modelada em UML na qual existe um atributo privado e dois métodos públicos: - private + public # protected ~ default Encapsulamento ©2012 Ludimila Monjardim Casagrande 2
  • 3. O Conceito de Pacote  Em Java, a visibilidade ou grau de acesso a um atributo ou método está intimamente ligado ao conceito de pacote ou simplesmente package.  A identificação de uma package corresponde à hierarquia de diretórios na qual a classe está inserida.  Exemplo de declaração de package:  package br.com.salesiano;  Raiz do projeto. Encapsulamento ©2012 Ludimila Monjardim Casagrande 3
  • 4. O Conceito de Pacote  Em um código-fonte escrito em Java, a declaração da package deve sempre anteceder a declaração da classe.  Normalmente a declaração da package é a primeira informação contida no arquivo.  Na composição do nome da package os nomes dos diretórios devem ser separados por “.”.  Deve-se ter cuidado para que os nomes dos diretórios que compõem uma package sejam nomes válidos para todas as plataformas. Encapsulamento ©2012 Ludimila Monjardim Casagrande 4
  • 5. O Conceito de Pacote package br.com.salesiano; public class Conta { private double saldo; public void creditar (double valor) { saldo = saldo + valor; } Classe contida public void debitar (double valor) { no subdiretório saldo = saldo - valor; salesiano. } } Encapsulamento ©2012 Ludimila Monjardim Casagrande 5
  • 6. Importações  Para fazer uso de uma package em uma classe é necessário importá-la.  A sintaxe para importação é:  import <pkg_name>[.<sub_pkg_name>].<class_name>;  import <pkg_name>[.<sub_pkg_name>].*;  É possível importar uma única classe, usando o nome da package seguido do nome da classe, ou importar toda uma package, usando o nome da package com um asterisco no final. Encapsulamento ©2012 Ludimila Monjardim Casagrande 6
  • 7. Pacotes e Importações nas Classes  A estrutura básica de um arquivo-fonte em Java deve ser:  Declaração da package  Importações (imports)  Definição da(s) classe(s)  Essa ordem é relevante, portanto, deve ser respeitada. Encapsulamento ©2012 Ludimila Monjardim Casagrande 7
  • 8. Exemplo: Entrada.java package br.com; import java.util.Scanner; //import java.util.*; //também poderia ser usado public class Entrada{ public static void main(String[] args){ Scanner entrada = new Scanner(System.in); String nome; System.out.println("Informe seu nome: "); nome = entrada.next(); System.out.println("Seu nome é: " + nome); } * Requer J2SDK 1.5 ou } superior Encapsulamento ©2012 Ludimila Monjardim Casagrande 8
  • 9. Modificadores de Acesso  Os modificadores de acesso definem quais classes podem usar ou ter acesso a um determinado elemento.  Esses elementos podem ser:  Uma classe;  As variáveis de uma classe (atributos);  Os métodos e os construtores de uma classe. Encapsulamento ©2012 Ludimila Monjardim Casagrande 9
  • 10. Modificadores de Acesso  Em Java, os modificadores de acesso são:  public  protected  private  O modificador de acesso considerado “default” corresponde à ausência de qualquer um dos modificadores citados. Encapsulamento ©2012 Ludimila Monjardim Casagrande 10
  • 11. O Modificador: Public  O modificador de acesso public é aquele que permite o maior grau de visibilidade e de acesso aos diferentes elementos.  Classes, variáveis de classes, construtores e métodos declarados como públicos podem ser usados sem restrições.  Public pode ser aplicado a qualquer um dos elementos citados. Encapsulamento ©2012 Ludimila Monjardim Casagrande 11
  • 12. O Modificador: Private  O modificador private é o mais restritivo de todos.  Variáveis ou métodos declarados como private só podem ser acessados diretamente por instâncias da classe a qual pertencem.  Nem mesmo subclasses possuem acesso direto a elementos declarados como private na sua superclasse.  O modificador private não se aplica a classes. Encapsulamento ©2012 Ludimila Monjardim Casagrande 12
  • 13. O Modificador: Protected  Os elementos declarados como protected podem ser acessados por classes da mesma package ou pelas subclasses da classe na qual estão contidos.  Esse modificador não se aplica a classes.  É aplicado normalmente a variáveis e métodos.  Elementos declarados como protegidos possuem um grau de acesso maior do que os declarados como “default”. Encapsulamento ©2012 Ludimila Monjardim Casagrande 13
  • 14. Ausência de Modificador de Acesso  A ausência de um modificador de acesso na declaração de um elemento indica um grau de acessibilidade considerado “default”.  Esse grau de acessibilidade é mais restritivo do que o protected uma vez que torna os elementos visíveis somente para a própria classe e para as outras classes contidas na mesma package.  Os elementos declarados com “default” não podem ser usados pelas subclasses da classe na qual estão contidos, caso essas pertençam a outras packages. Encapsulamento ©2012 Ludimila Monjardim Casagrande 14
  • 15. Modificadores e Membros da Classe  A tabela indica a quais elementos da classe os vários modificadores de acesso podem ser aplicados: Classe Atributos Construtores Métodos public sim sim sim sim protected não sim sim* sim default sim sim sim sim private não sim sim* sim * Pouco utilizado nesses casos. Encapsulamento ©2012 Ludimila Monjardim Casagrande 15
  • 16. Níveis de Acesso  A tabela indica os níveis de acesso (ou graus de visibilidade) definidos por cada modificador de acesso: Classe Package Subclasse* Global** public sim sim sim sim protected sim sim sim não default sim sim não não private sim não não não * Subclasse contida em outra package. ** Acesso por classes de outros projetos ou sistemas. Encapsulamento ©2012 Ludimila Monjardim Casagrande 16
  • 17. Possível Distribuição de Classes Packages: Encapsulamento ©2012 Ludimila Monjardim Casagrande 17
  • 18. Encapsulamento  Encapsulamento é um dos conceitos fundamentais da programação orientada a objetos.  O encapsulamento, também referido como ocultamento de informações, consiste em separar os aspectos externos de um objeto, os quais são acessíveis a outros objetos, dos detalhes internos de sua implementação, os quais permanecem ocultos para os outros objetos. Encapsulamento ©2012 Ludimila Monjardim Casagrande 18
  • 19. Principais Vantagens  O uso de encapsulamento permite que a implementação de um objeto possa ser modificada sem afetar as aplicações que usam este objeto, ou seja, o encapsulamento evita que um programa se torne tão interdependente que uma pequena mudança tenha grandes efeitos colaterais. Encapsulamento ©2012 Ludimila Monjardim Casagrande 19
  • 20. Principais Vantagens  O encapsulamento também evita que dados específicos de uma classe possam ser acessados ou usados diretamente e faz com que isso aconteça somente por meio das operações cuja responsabilidade é a manipulação desses dados.  Tais operações são consideradas a interface dos objetos, que permite a comunicação entre os mesmos. Encapsulamento ©2012 Ludimila Monjardim Casagrande 20
  • 21. Exemplo public class Hora { public int hora; Atributos declarados como public int minuto; públicos public int segundo; public Hora() { } public Hora(int h, int m, int s) { this.hora = h; this.minuto = m; Falha no construtor! this.segundo = s; } A classe é responsável por public String toString( ) { manter a String str = hora + ":" + minuto + ":" + segundo; consistência e return str; correção das suas } instâncias. } Encapsulamento ©2012 Ludimila Monjardim Casagrande 21
  • 22. Exemplo public class Principal { public static void main (String[] args) { Hora h = new Hora(); h.hora = 30; Como os atributos são públicos, eles h.minuto = 80; podem ser acessados e alterados h.segundo = -40; diretamente em outra classe System.out.println(h); } } Resultado: 30:80:-40  Não é uma hora válida! Encapsulamento ©2012 Ludimila Monjardim Casagrande 22
  • 23. Solução para o Problema  Usar encapsulamento para controlar os valores atribuídos às variáveis da classe, de forma que a todo momento os dados mantidos pela classe sejam válidos e consistentes.  Uma classe deve conhecer quais são os valores válidos para os seus atributos. As demais classes não são obrigadas a saber esses detalhes. Encapsulamento ©2012 Ludimila Monjardim Casagrande 23
  • 24. Solução para o Problema public class Hora { private int hora; private int minuto; public void setHora(int hora) { private int segundo; if(hora >= 0 && hora <= 23) { public Hora(){ this.hora = hora; } } public Hora(int h, int m, int s) { } if((h >= 0 && h <= 23) && public void setMinuto(int minuto) { (m >= 0 && m <= 59) && if(minuto >= 0 && minuto <= 59) { (s >= 0 && s <= 59)) { this.minuto = minuto; this.hora = h; } this.minuto = m; } this.segundo = s; public void setSegundo(int segundo) { } if(segundo >= 0 && segundo <= 59) { } this.segundo = segundo; public String toString( ) { } String str = hora + ":" + minuto + ":" + segundo; } return str; … } } … Encapsulamento ©2012 Ludimila Monjardim Casagrande 24
  • 25. Solução para o Problema public class Principal { public static void main (String[] args) { Hora h = new Hora(); h.setHora(30); h.setMinuto(80); h.setSegundo(-40); System.out.println(h); } } Resultado: 0:0:0  Tentativas de alterações inválidas não são aceitas. Encapsulamento ©2012 Ludimila Monjardim Casagrande 25
  • 26. Ocultamento de Implementação public class Principal { public static void main (String[ ] args) { Incrementa5 inc = new Incrementa5(); int resultado = inc.incrementa5(10); System.out.println(resultado); } } Resultado: 15 Encapsulamento ©2012 Ludimila Monjardim Casagrande 26
  • 27. Ocultamento de Implementação public class Incrementa5 { /*public int incrementa5 (int numero) { int i = 0; while (i < 5) { numero++; As implementações podem i++; ser substituídas sem efeitos } colaterais para as classes return numero; que utilizam o método. }*/ public int incrementa5 (int numero) { return numero + 5; } } Encapsulamento ©2012 Ludimila Monjardim Casagrande 27
  • 28. Leituras Recomendadas  FJ-11: Java e Orientação a Objetos. Caelum Ensino e Soluções em Java. http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/  Java: Como Programar. Autores: H. M. Deitel e P. J. Deitel. Editora: Pearson – 6ª Edição. Encapsulamento ©2012 Ludimila Monjardim Casagrande 28