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



     Prática de Implementação

     Encapsulamento e Modificadores de Acesso




             Ludimila Monjardim Casagrande
                         2012
Exercício
          public class Data {
             public int dia;
             public int mes;       Atributos declarados como
             public int ano;       públicos

               public Data () {
               }

               public Data (int dia, int mes, int ano) {         Falha nos construtores!
                     this.dia = dia;                             Ambos permitem a criação de
                     this.mes = mes;                             datas inválidas.
                     this.ano = ano;
               }

               public String toString() {
                     String data = dia + "/" + mes + "/" + ano;
                     return data;
               }
          }
Aula Prática                        ©2012 Ludimila Monjardim Casagrande                        2
Exercício

         public class Principal {
           public static void main (String[] args) {
                  Data d = new Data();
                  d.dia = 40;          Como os atributos são públicos, eles
                  d.mes = 40;          podem ser acessados e alterados
                  d.ano = -40;         diretamente em outra classe
                  System.out.println(d);
           }
         }

         Resultado: 40/40/-40      Não é uma data válida!



Aula Prática                    ©2012 Ludimila Monjardim Casagrande           3
Exercício
    public class Data {
       private int dia;
       private int mes;
       private int ano;                                        public void setDia (int dia) {
                                                                      if(dia >= 1 && dia <= 31) {
                                                                          this.dia = dia;
         public Data () {
                                                                      }
             this.dia = 1;
                                                               }
             this.mes = 1;
             this.ano = 1800;                                  public void setMes (int mes) {
         }                                                            if(mes >= 1 && mes <= 12) {
         public Data (int d, int m, int a) {                              this.mes = mes;
             this();                                                  }
             if((d >= 1 && d <= 31) &&                         }
                (m >= 1 && m <= 12) &&
                                                               public void setAno (int ano) {
                (a >= 1800 && a <= 2100)) {                           if(ano >= 1800 && ano <= 2100) {
                 this.dia = d;                                            this.ano = ano;
                 this.mes = m;                                        }
                 this.ano = a;                                 }
              }                                                …
          }                                               }
          …
Aula Prática                        ©2012 Ludimila Monjardim Casagrande                                  4
Exercício

          public class Principal {
            public static void main (String[] args) {
                   Data d = new Data();
                   d.setDia(40);
                   d.setMes(40);
                   d.setAno(-40);
                   System.out.println(d);
            }
          }

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


Aula Prática                    ©2012 Ludimila Monjardim Casagrande   5
Solução Alternativa
    public class Data {
       private int dia = 1;       Definição de
       private int mes = 1;
                                  valores default              public void setDia (int dia) {
       private int ano = 1800;
                                                                      if(dia >= 1 && dia <= 31) {
                                                                          this.dia = dia;
         public Data () {
                                                                      }
         }
                                                               }

         public Data (int d, int m, int a) {                   public void setMes (int mes) {
             if((d >= 1 && d <= 31) &&                                if(mes >= 1 && mes <= 12) {
                (m >= 1 && m <= 12) &&                                    this.mes = mes;
                                                                      }
                (a >= 1800 && a <= 2100)) {
                                                                }
                 this.dia = d;
                 this.mes = m;                                 public void setAno (int ano) {
                 this.ano = a;                                        if(ano >= 1800 && ano <= 2100) {
              }                                                           this.ano = ano;
          }                                                           }
          …
                                                                }
                                                                …
                                                          }

Aula Prática                        ©2012 Ludimila Monjardim Casagrande                                  6
Exercício

       Implemente as classes Hora e Data (cada uma em um
           arquivo separado, porém no mesmo projeto).
          Crie duas pastas, chamadas hora e data, ambas na raiz
           (src) e coloque as respectivas classes nas pastas.
          Declare as packages das classes corretamente.
          Implemente uma classe Principal com o método main e
           salve-a na raiz do projeto.
          Na classe Principal crie e altere objetos das classes
           Hora e Data, explorando o uso dos vários construtores
           disponíveis.
          A cada alteração do objeto, imprima-o na tela e observe
           os resultados.

Aula Prática               ©2012 Ludimila Monjardim Casagrande       7
Atenção

       Ao fazer seu exercício, explore o uso das
           packages criando novas packages, movendo as
           classes de lugar e observando os efeitos
           provocados.
       Explore também o uso dos diferentes
           modificadores de acesso nas classes Hora e
           Data e observe os efeitos colaterais na classe
           Principal.
       Não espere a professora pedir, aprimore você
           mesmo o seu estudo. 
Aula Prática             ©2012 Ludimila Monjardim Casagrande   8

Mais conteúdo relacionado

Mais procurados

Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de softwareLeonardo Melo Santos
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos Raquel Machado
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 

Mais procurados (20)

Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
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
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
 
Java modulo 01 - Introdução
Java modulo 01 - IntroduçãoJava modulo 01 - Introdução
Java modulo 01 - Introdução
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Complexidade Ciclomática
Complexidade CiclomáticaComplexidade Ciclomática
Complexidade Ciclomática
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Algoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e MatrizesAlgoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e Matrizes
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
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
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 

Destaque (14)

Pop encapsulação
Pop   encapsulaçãoPop   encapsulação
Pop encapsulação
 
Farmacotécnica
FarmacotécnicaFarmacotécnica
Farmacotécnica
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
POO Herança
POO HerançaPOO Herança
POO Herança
 
Cálculos i e ii
Cálculos  i e iiCálculos  i e ii
Cálculos i e ii
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de Classe
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
36854375 apostila-pratica-farmacotecnica
36854375 apostila-pratica-farmacotecnica36854375 apostila-pratica-farmacotecnica
36854375 apostila-pratica-farmacotecnica
 
98230944 farmacotecnica-apostila
98230944 farmacotecnica-apostila98230944 farmacotecnica-apostila
98230944 farmacotecnica-apostila
 
Apostila Farmacotécnica II - Prática 2016
Apostila Farmacotécnica II - Prática 2016Apostila Farmacotécnica II - Prática 2016
Apostila Farmacotécnica II - Prática 2016
 
Apostila-calculos-1-pdf
Apostila-calculos-1-pdfApostila-calculos-1-pdf
Apostila-calculos-1-pdf
 

Mais de Ludimila Monjardim Casagrande

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
 

Mais de Ludimila Monjardim Casagrande (19)

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 - 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 - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
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
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
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 - 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
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
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 - 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
 

POO e encapsulamento

  • 1. Programação Orientada a Objetos Prática de Implementação Encapsulamento e Modificadores de Acesso Ludimila Monjardim Casagrande 2012
  • 2. Exercício public class Data { public int dia; public int mes; Atributos declarados como public int ano; públicos public Data () { } public Data (int dia, int mes, int ano) { Falha nos construtores! this.dia = dia; Ambos permitem a criação de this.mes = mes; datas inválidas. this.ano = ano; } public String toString() { String data = dia + "/" + mes + "/" + ano; return data; } } Aula Prática ©2012 Ludimila Monjardim Casagrande 2
  • 3. Exercício public class Principal { public static void main (String[] args) { Data d = new Data(); d.dia = 40; Como os atributos são públicos, eles d.mes = 40; podem ser acessados e alterados d.ano = -40; diretamente em outra classe System.out.println(d); } } Resultado: 40/40/-40  Não é uma data válida! Aula Prática ©2012 Ludimila Monjardim Casagrande 3
  • 4. Exercício public class Data { private int dia; private int mes; private int ano; public void setDia (int dia) { if(dia >= 1 && dia <= 31) { this.dia = dia; public Data () { } this.dia = 1; } this.mes = 1; this.ano = 1800; public void setMes (int mes) { } if(mes >= 1 && mes <= 12) { public Data (int d, int m, int a) { this.mes = mes; this(); } if((d >= 1 && d <= 31) && } (m >= 1 && m <= 12) && public void setAno (int ano) { (a >= 1800 && a <= 2100)) { if(ano >= 1800 && ano <= 2100) { this.dia = d; this.ano = ano; this.mes = m; } this.ano = a; } } … } } … Aula Prática ©2012 Ludimila Monjardim Casagrande 4
  • 5. Exercício public class Principal { public static void main (String[] args) { Data d = new Data(); d.setDia(40); d.setMes(40); d.setAno(-40); System.out.println(d); } } Resultado: 1/1/1800  Tentativas de alterações inválidas não são aceitas. Aula Prática ©2012 Ludimila Monjardim Casagrande 5
  • 6. Solução Alternativa public class Data { private int dia = 1; Definição de private int mes = 1; valores default public void setDia (int dia) { private int ano = 1800; if(dia >= 1 && dia <= 31) { this.dia = dia; public Data () { } } } public Data (int d, int m, int a) { public void setMes (int mes) { if((d >= 1 && d <= 31) && if(mes >= 1 && mes <= 12) { (m >= 1 && m <= 12) && this.mes = mes; } (a >= 1800 && a <= 2100)) { } this.dia = d; this.mes = m; public void setAno (int ano) { this.ano = a; if(ano >= 1800 && ano <= 2100) { } this.ano = ano; } } … } … } Aula Prática ©2012 Ludimila Monjardim Casagrande 6
  • 7. Exercício  Implemente as classes Hora e Data (cada uma em um arquivo separado, porém no mesmo projeto).  Crie duas pastas, chamadas hora e data, ambas na raiz (src) e coloque as respectivas classes nas pastas.  Declare as packages das classes corretamente.  Implemente uma classe Principal com o método main e salve-a na raiz do projeto.  Na classe Principal crie e altere objetos das classes Hora e Data, explorando o uso dos vários construtores disponíveis.  A cada alteração do objeto, imprima-o na tela e observe os resultados. Aula Prática ©2012 Ludimila Monjardim Casagrande 7
  • 8. Atenção  Ao fazer seu exercício, explore o uso das packages criando novas packages, movendo as classes de lugar e observando os efeitos provocados.  Explore também o uso dos diferentes modificadores de acesso nas classes Hora e Data e observe os efeitos colaterais na classe Principal.  Não espere a professora pedir, aprimore você mesmo o seu estudo.  Aula Prática ©2012 Ludimila Monjardim Casagrande 8