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

POO - 08 - Prática de Encapsulamento

  • 1.
    Programação Orientada aObjetos 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