Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca




           Introdu¸˜o ` Programa¸˜o Orientada a Objetos
                  ca a           ca
                            usando Java

                         Helio Henrique L. C. Monte-Alto
          Disciplina: Paradigma de Programa¸˜o Imperativa e Orientada
                                             ca
                                    a Objetos


                                                           2012
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca




T´picos
 o

       1 Introdu¸˜o
                ca

       2 Classes e objetos

       3 Atributos e M´todos
                      e

       4 Encapsulamento

       5 Relacionamentos
               Associa¸˜es
                      co
               Agrega¸˜o e composi¸˜o
                      ca          ca

       6 Heran¸a e polimorfismo
              c

       7 Interfaces
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Introdu¸˜o
         ca




Introdu¸˜o
       ca


               Orienta¸˜o a objetos (OO) ´ uma aplica¸˜o de tipos abstratos
                      ca                 e           ca
               de dados
               O programa ´ estruturado de forma a representar os objetos e
                            e
               as rela¸˜es entre eles no mundo real
                      co
               Exemplos de linguagens: Java, C++, Python, Ruby,
               Smalltalk, Javascript, C#, Scala, etc.

      Discuss˜o
             a
      Orienta¸˜o a objetos ´ um paradigma de programa¸˜o? Ou seria
             ca            e                         ca
      apenas um estilo de programa¸˜o?
                                  ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Classes e objetos




Classes e objetos

      Classe
           Conjunto de indiv´ıduos (objetos) com atributos e
           comportamentos (m´todos) em comum
                                e
           Ex: classe dos animais mam´ ıferos
                      Comportamentos: respirar, amamentar, locomover-se, etc.
                      Atributos: tempo de vida, tamanho, etc.
              Al´m disso, em LP, uma classe define um tipo de dados, assim
                e
              como sua interface (opera¸˜es / m´todos)
                                       co      e

      Objeto
              Um objeto ´ uma instˆncia (ou concretiza¸˜o) de uma classe
                        e         a                   ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Classes e objetos




Classes e objetos - Exemplos

              A defini¸˜o de uma classe pode ser vista como uma receita de
                     ca
              bolo
              Os bolos criados a partir dessa receita s˜o instˆncias dessa
                                                       a      a
              classe
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Atributos e M´todos
               e




Atributos e M´todos
             e


      Atributos
           Valores dos atributos constituem o estado de um objeto
              Estado diferencia objetos da mesma classe

      M´todos
       e
          M´todos p´blicos constituem a interface (ou protocolo) de
            e       u
          mensagens dos objetos de uma classe
              Diferen¸as na interface (m´todos a mais) e na implementa¸˜o
                     c                  e                                ca
              (polimorfismo) diferenciam objetos de classes pais, filhas e
              irm˜s
                 a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Atributos e M´todos
               e




Exemplo Lampada 1

       c l a s s Lampada {

              // E s t a d o
              p r i v a t e boolean acesa = f a l s e ;

              // I n t e r f a c e
              public void acender () {
                     acesa = true ;
              }

              p u b l i c void apagar () {
                      acesa = f a l s e ;
              }

       }


      Quest˜o
           a
      Quantos objetos distintos pertencem ` classe Lampada?
                                          a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Atributos e M´todos
               e




Exemplo 1.3




      Figura : Atributos (estado): o que objeto conhece. M´todos: o que o
                                                          e
      objeto faz (Sierra e Bates, 2005)
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Encapsulamento




Modificadores de acesso / visibilidade

      Em Java
          private
              public
              package
              protected
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Encapsulamento




Encapsulamento


      Encapsulamento
          Consiste em esconder os membros da classe;
              Utiliza¸˜o do objeto deve ser feita apenas por meio de sua
                     ca
              interface;
              Exemplos:
                      Carro: volante e pedais (interface); motor, rodas
                      (implementa¸˜o)
                                    ca
                      Estrutura de pilha: empilhar, desempilhar e ver o topo
                      (interface); lista est´tica, lista ligada dinˆmica
                                            a                      a
                      (implementa¸˜o)
                                    ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Encapsulamento




M´todos de acesso: getters e setters
 e
              Servem para recuperar os dados privados e fazer atribui¸˜o de
                                                                     ca
              maneira confi´vel, por meio de m´todos
                          a                   e
       p u b l i c c l a s s Conta {
               p r i v a t e double s a l d o ;
              // . . . o u t r o s a t r i b u t o s o m i t i d o s

              p u b l i c double getSaldo () {
                      return this . saldo ;
              }
              p u b l i c void s e t S a l d o ( double s a l d o ) {
                      this . saldo = saldo ;
              }
              // . . . o u t r o s metodos o m i t i d o s
       }

      Quest˜o
           a
      ´ uma boa pr´tica fazer getters e setters para todos os atributos?
      E           a
      Por quˆ?
            e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Encapsulamento




Construtores

              Servem para inicializar objetos de uma classe
       p u b l i c c l a s s Conta {
               p r i v a t e i n t numero ;
               private Cliente t i t u l a r ;
               p r i v a t e double s a l d o ;

              p u b l i c Conta ( i n t numero , C l i e n t e   titular ) {
                      t h i s . numero = numero ;
                      this . saldo = 0;
                      this . titular = titular ;
              }
              p u b l i c Conta ( i n t numero , C l i e n t e   t i t u l a r , double
                      saldoinicial ) {
                      t h i s . numero = numero ;
                      this . titular = titular ;
                      this . saldo = s a l d o i n i c i a l ;
              }
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Encapsulamento




Membros de classe


              S˜o atributos e m´todos que n˜o pertencem `s instˆncias,
               a               e           a            a      a
              mas `s classes
                  a
              Tamb´m chamados de membros est´ticos
                  e                         a
       c l a s s Conta {
               private s t a t i c int totalDeContas ;
               // . . .
               p u b l i c Conta ( ) {         // c o n s t r u t o r
                      Conta . t o t a l D e C o n t a s += 1 ;
               }
               p u b l i c s t a t i c i n t getTotalDeContas () {
                       r e t u r n Conta . t o t a l D e C o n t a s ;
               }
       }
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Relacionamentos




Trocas de mensagens


              Em OO, enviar uma mensagem s´   ıncrona a um objeto
              corresponde a chamar um m´todo p´blico desse objeto
                                         e       u
              (lembre-se que os m´todos p´blicos constituem o protocolo da
                                 e       u
              classe)
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Relacionamentos
     Associa¸˜es
            co


Associa¸oes
       c˜



              Definem liga¸˜es entre objetos de diferentes classes
                         co
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Relacionamentos
     Associa¸˜es
            co


Agrega¸˜o e composi¸˜o (associa¸oes do tipo parte-de)
      ca           ca          c˜
      Agrega¸˜o
            ca
          Agrega¸˜o: rela¸˜o ”parte-de”fraca entre objetos.
                ca       ca
              Ex: um computador e seus perif´ricos. Os perif´ricos PODEM
                                             e              e
              existir sem o computador (ligados a outro computador, por
              exemplo).
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Relacionamentos
     Agrega¸˜o e composi¸˜o
           ca           ca


Agrega¸˜o e composi¸˜o (associa¸oes do tipo parte-de)
      ca           ca          c˜

      Composi¸˜o
             ca
         Composi¸˜o: rela¸˜o forte entre objetos. Ex: um mouse e
                 ca       ca
                 o           o    ˜
         seus bot˜es. Os bot˜es NAO PODEM existir independentes
         do mouse para o qual foram fabricados.
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Relacionamentos
     Agrega¸˜o e composi¸˜o
           ca           ca


Agrega¸˜o - Exemplo
      ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Heran¸a - Introdu¸˜o
     c           ca

      Motiva¸˜o
            ca
          Tipos abstratos de dados facilitam o reuso
          Problemas:
                      Ao criar uma nova aplica¸˜o, em quase todos os casos s˜o
                                              ca                            a
                      requeridas modifica¸˜es nos TAD j´ existentes
                                        co             a
                      Tipos sem forma alguma de hierarquia n˜o condizem com a
                                                             a
                      modelagem de muitos espa¸os de problema
                                                c
              Solu¸˜o: heran¸a (especializa¸˜o / generaliza¸˜o)
                  ca        c              ca              ca

      Heran¸a
            c
      Permite que novas classes herdem atributos e m´todos de outra
                                                    e
      classe, podendo modificar alguns desses membros e adicionar
      novos membros espec´ ıficos da nova classe.
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c



      Conceitos
              Uma classe Child que herda / estende uma classe Parent ´ uma especializa¸˜o
                                                                       e                ca
              de Parent, e ´ chamada classe derivada, classe filha ou subclasse de Parent;
                           e
              Uma classe Parent pode ser estendida por uma classe Child e ´ uma
                                                                          e
              generaliza¸˜o de Child, sendo chamada classe m˜e ou superclasse de Child.
                        ca                                   a
              Uma subclasse pode ou n˜o ser subtipo de sua superclasse
                                     a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Exemplo Lampada 2
       c l a s s P i s c a P i s c a e x t e n d s Lampada {

              // E s t a d o
              p r i v a t e boolean piscando = f a l s e ;

              // I n t e r f a c e
              public void a t i v a r P i s c a () {
                     acender () ;
                     piscando = true ;
              }

              public void d e s a t i v a r P i s c a () {
                  piscando = f a l s e ;
              }

       }

      Quest˜o
            a
      E agora? Quantos objetos distintos pertencem ` classe Lampada?
                                                   a
      E ` classe PiscaPisca?
        a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Modificador de acesso Protected




              Um membro protegido ´ vis´ nas classes filhas
                                  e ıvel
              Em Java, a cl´usula protected tamb´m implica que o
                           a                     e
              membro ´ vis´ a todas as classes do mesmo pacote
                      e ıvel
              (package)
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Polimorfismo


              M´todos p´blicos e protegidos da classe m˜e podem ser
                e        u                             a
              sobrescritos pelas classe filha
              A vincula¸˜o dos objetos com os m´todos ´ feita
                       ca                      e      e
              dinamicamente, em tempo de execu¸˜o
                                                ca

      Vantagem
      Permite que outras partes do programa referenciem os objetos
      pertencentes a uma hierarquia de classes de maneira mais
      transparente, facilitando o reuso.
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Classes abstratas


              S˜o classes que n˜o podem ser instanciadas diretamente
               a               a
              As classes filhas implementam os m´todos abstratos da
                                               e
              classe m˜e
                      a

      Exemplos
          Classe abstrata: Forma geom´trica; Classes concretas:
                                     e
          Retˆngulo, Circulo, etc
             a
              Classe abstrata: Funcion´rio; Classes concretas: Gerente,
                                      a
              Secret´rio, etc
                    a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Exemplo Forma Geom´trica
                  e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica?
                               e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                               e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                               e
                      Lobo ´ um Animal?
                           e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                               e
                      Lobo ´ um Animal? SIM!
                           e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                                e
                      Lobo ´ um Animal? SIM!
                           e
                      Banheira ´ um Banheiro?
                               e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                                e
                      Lobo ´ um Animal? SIM!
                           e
                                               ˜
                      Banheira ´ um Banheiro? NAO!
                               e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                                e
                      Lobo ´ um Animal? SIM!
                           e
                                                 ˜
                      Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
                               e
                      Banheira (use agrega¸˜o / composi¸˜o)
                                          ca           ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                                e
                      Lobo ´ um Animal? SIM!
                            e
                                                 ˜
                      Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
                               e
                      Banheira (use agrega¸˜o / composi¸˜o)
                                          ca           ca
                      Pilha ´ uma Lista?
                            e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                                e
                      Lobo ´ um Animal? SIM!
                            e
                                                 ˜
                      Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
                               e
                      Banheira (use agrega¸˜o / composi¸˜o)
                                          ca           ca
                                           ˜
                      Pilha ´ uma Lista? NAO!
                            e
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Heran¸a e polimorfismo
       c




Ser´ que ´ heran¸a mesmo?
   a     e      c

              O uso de heran¸a aumenta o acoplamento entre as classes
                            c
              Usar apenas quando necess´rio, procurando alternativas como
                                       a
              composi¸˜o e Interfaces
                      ca

      Regra b´sica
             a
                                                        ´
              Se uma classe B estende A, ent˜o classe B E-UMA classe A;
                                            a
              Exemplos:
                      Quadrado ´ uma Forma Geometrica? SIM!
                                e
                      Lobo ´ um Animal? SIM!
                            e
                                                 ˜
                      Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
                               e
                      Banheira (use agrega¸˜o / composi¸˜o)
                                          ca           ca
                            e              ˜
                      Pilha ´ uma Lista? NAO! Pilha n˜o tem m´todos add() nem
                                                     a       e
                      remove() (use composi¸˜o)
                                             ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Interfaces




Interfaces

               Uma interface em Java define uma cole¸˜o de m´todos
                                                    ca     e
               p´blicos, sem definir a implementa¸˜o
                u                               ca
               Apenas exp˜e o que o objeto deve fazer, e n˜o como ele
                          o                               a
               faz ou o que ele tem

      Exemplo
          Em Java, para ordenar uma lista usando
          Collection.sort(lista), ´ necess´rio que os membros da
                                       e     a
          lista implementem a interface Comparable.
       p u b l i c i n t e r f a c e Comparable<T> {
               i n t compareTo (T o u t r o ) ;
       }
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Interfaces




Exemplo Funcion´rios
               a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Interfaces




Exemplo Funcion´rios
               a
      Quero que alguns funcion´rios (Diretor e Gerente) consigam se
                                a
      autenticar no sistema interno.
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Interfaces




Exemplo Funcion´rios
               a
      Depois de um tempo, descobri que preciso que o cliente tamb´me
      possa se autenticar no sistema interno, ent˜o fiz a caca abaixo:
                                                 a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Interfaces




Exemplo Funcion´rios
               a
      Depois de refatorar meu sistema usando interfaces, eliminei as
      gambiarras e deixei o sistema menos acoplado e mais manuten´   ıvel.
      (Um prot´tipo do c´digo estar´ nos exemplos.)
              o           o         a
Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
       ca a          ca
  Interfaces




Referˆncias Bibliogr´ficas
     e              a



               Arlow J., Neustadt I. UML and the Unified Process - Practical
               Object-Oriented Analysis and Design. Pearson. 2002
               Caelum. Java e Orienta¸˜o a Objetos. Dispon´ em <
                                     ca                   ıvel
               http://www.caelum.com.br/curso/fj-11-java-orientacao-
               objetos>
               Sierra K., Bates B. Use a Cabe¸a! - Java. 2a Edi¸˜o. O’Reilly
                                             c                 ca
               Media. 2005

Introdução à Programação Orientada a Objetos Usando Java

  • 1.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Introdu¸˜o ` Programa¸˜o Orientada a Objetos ca a ca usando Java Helio Henrique L. C. Monte-Alto Disciplina: Paradigma de Programa¸˜o Imperativa e Orientada ca a Objetos 2012
  • 2.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca T´picos o 1 Introdu¸˜o ca 2 Classes e objetos 3 Atributos e M´todos e 4 Encapsulamento 5 Relacionamentos Associa¸˜es co Agrega¸˜o e composi¸˜o ca ca 6 Heran¸a e polimorfismo c 7 Interfaces
  • 3.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Introdu¸˜o ca Introdu¸˜o ca Orienta¸˜o a objetos (OO) ´ uma aplica¸˜o de tipos abstratos ca e ca de dados O programa ´ estruturado de forma a representar os objetos e e as rela¸˜es entre eles no mundo real co Exemplos de linguagens: Java, C++, Python, Ruby, Smalltalk, Javascript, C#, Scala, etc. Discuss˜o a Orienta¸˜o a objetos ´ um paradigma de programa¸˜o? Ou seria ca e ca apenas um estilo de programa¸˜o? ca
  • 4.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Classes e objetos Classes e objetos Classe Conjunto de indiv´ıduos (objetos) com atributos e comportamentos (m´todos) em comum e Ex: classe dos animais mam´ ıferos Comportamentos: respirar, amamentar, locomover-se, etc. Atributos: tempo de vida, tamanho, etc. Al´m disso, em LP, uma classe define um tipo de dados, assim e como sua interface (opera¸˜es / m´todos) co e Objeto Um objeto ´ uma instˆncia (ou concretiza¸˜o) de uma classe e a ca
  • 5.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Classes e objetos Classes e objetos - Exemplos A defini¸˜o de uma classe pode ser vista como uma receita de ca bolo Os bolos criados a partir dessa receita s˜o instˆncias dessa a a classe
  • 6.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Atributos e M´todos e Atributos e M´todos e Atributos Valores dos atributos constituem o estado de um objeto Estado diferencia objetos da mesma classe M´todos e M´todos p´blicos constituem a interface (ou protocolo) de e u mensagens dos objetos de uma classe Diferen¸as na interface (m´todos a mais) e na implementa¸˜o c e ca (polimorfismo) diferenciam objetos de classes pais, filhas e irm˜s a
  • 7.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Atributos e M´todos e Exemplo Lampada 1 c l a s s Lampada { // E s t a d o p r i v a t e boolean acesa = f a l s e ; // I n t e r f a c e public void acender () { acesa = true ; } p u b l i c void apagar () { acesa = f a l s e ; } } Quest˜o a Quantos objetos distintos pertencem ` classe Lampada? a
  • 8.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Atributos e M´todos e Exemplo 1.3 Figura : Atributos (estado): o que objeto conhece. M´todos: o que o e objeto faz (Sierra e Bates, 2005)
  • 9.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Encapsulamento Modificadores de acesso / visibilidade Em Java private public package protected
  • 10.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Encapsulamento Encapsulamento Encapsulamento Consiste em esconder os membros da classe; Utiliza¸˜o do objeto deve ser feita apenas por meio de sua ca interface; Exemplos: Carro: volante e pedais (interface); motor, rodas (implementa¸˜o) ca Estrutura de pilha: empilhar, desempilhar e ver o topo (interface); lista est´tica, lista ligada dinˆmica a a (implementa¸˜o) ca
  • 11.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Encapsulamento M´todos de acesso: getters e setters e Servem para recuperar os dados privados e fazer atribui¸˜o de ca maneira confi´vel, por meio de m´todos a e p u b l i c c l a s s Conta { p r i v a t e double s a l d o ; // . . . o u t r o s a t r i b u t o s o m i t i d o s p u b l i c double getSaldo () { return this . saldo ; } p u b l i c void s e t S a l d o ( double s a l d o ) { this . saldo = saldo ; } // . . . o u t r o s metodos o m i t i d o s } Quest˜o a ´ uma boa pr´tica fazer getters e setters para todos os atributos? E a Por quˆ? e
  • 12.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Encapsulamento Construtores Servem para inicializar objetos de uma classe p u b l i c c l a s s Conta { p r i v a t e i n t numero ; private Cliente t i t u l a r ; p r i v a t e double s a l d o ; p u b l i c Conta ( i n t numero , C l i e n t e titular ) { t h i s . numero = numero ; this . saldo = 0; this . titular = titular ; } p u b l i c Conta ( i n t numero , C l i e n t e t i t u l a r , double saldoinicial ) { t h i s . numero = numero ; this . titular = titular ; this . saldo = s a l d o i n i c i a l ; }
  • 13.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Encapsulamento Membros de classe S˜o atributos e m´todos que n˜o pertencem `s instˆncias, a e a a a mas `s classes a Tamb´m chamados de membros est´ticos e a c l a s s Conta { private s t a t i c int totalDeContas ; // . . . p u b l i c Conta ( ) { // c o n s t r u t o r Conta . t o t a l D e C o n t a s += 1 ; } p u b l i c s t a t i c i n t getTotalDeContas () { r e t u r n Conta . t o t a l D e C o n t a s ; } }
  • 14.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Relacionamentos Trocas de mensagens Em OO, enviar uma mensagem s´ ıncrona a um objeto corresponde a chamar um m´todo p´blico desse objeto e u (lembre-se que os m´todos p´blicos constituem o protocolo da e u classe)
  • 15.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Relacionamentos Associa¸˜es co Associa¸oes c˜ Definem liga¸˜es entre objetos de diferentes classes co
  • 16.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Relacionamentos Associa¸˜es co Agrega¸˜o e composi¸˜o (associa¸oes do tipo parte-de) ca ca c˜ Agrega¸˜o ca Agrega¸˜o: rela¸˜o ”parte-de”fraca entre objetos. ca ca Ex: um computador e seus perif´ricos. Os perif´ricos PODEM e e existir sem o computador (ligados a outro computador, por exemplo).
  • 17.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Relacionamentos Agrega¸˜o e composi¸˜o ca ca Agrega¸˜o e composi¸˜o (associa¸oes do tipo parte-de) ca ca c˜ Composi¸˜o ca Composi¸˜o: rela¸˜o forte entre objetos. Ex: um mouse e ca ca o o ˜ seus bot˜es. Os bot˜es NAO PODEM existir independentes do mouse para o qual foram fabricados.
  • 18.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Relacionamentos Agrega¸˜o e composi¸˜o ca ca Agrega¸˜o - Exemplo ca
  • 19.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Heran¸a - Introdu¸˜o c ca Motiva¸˜o ca Tipos abstratos de dados facilitam o reuso Problemas: Ao criar uma nova aplica¸˜o, em quase todos os casos s˜o ca a requeridas modifica¸˜es nos TAD j´ existentes co a Tipos sem forma alguma de hierarquia n˜o condizem com a a modelagem de muitos espa¸os de problema c Solu¸˜o: heran¸a (especializa¸˜o / generaliza¸˜o) ca c ca ca Heran¸a c Permite que novas classes herdem atributos e m´todos de outra e classe, podendo modificar alguns desses membros e adicionar novos membros espec´ ıficos da nova classe.
  • 20.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Conceitos Uma classe Child que herda / estende uma classe Parent ´ uma especializa¸˜o e ca de Parent, e ´ chamada classe derivada, classe filha ou subclasse de Parent; e Uma classe Parent pode ser estendida por uma classe Child e ´ uma e generaliza¸˜o de Child, sendo chamada classe m˜e ou superclasse de Child. ca a Uma subclasse pode ou n˜o ser subtipo de sua superclasse a
  • 21.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Exemplo Lampada 2 c l a s s P i s c a P i s c a e x t e n d s Lampada { // E s t a d o p r i v a t e boolean piscando = f a l s e ; // I n t e r f a c e public void a t i v a r P i s c a () { acender () ; piscando = true ; } public void d e s a t i v a r P i s c a () { piscando = f a l s e ; } } Quest˜o a E agora? Quantos objetos distintos pertencem ` classe Lampada? a E ` classe PiscaPisca? a
  • 22.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Modificador de acesso Protected Um membro protegido ´ vis´ nas classes filhas e ıvel Em Java, a cl´usula protected tamb´m implica que o a e membro ´ vis´ a todas as classes do mesmo pacote e ıvel (package)
  • 23.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Polimorfismo M´todos p´blicos e protegidos da classe m˜e podem ser e u a sobrescritos pelas classe filha A vincula¸˜o dos objetos com os m´todos ´ feita ca e e dinamicamente, em tempo de execu¸˜o ca Vantagem Permite que outras partes do programa referenciem os objetos pertencentes a uma hierarquia de classes de maneira mais transparente, facilitando o reuso.
  • 24.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Classes abstratas S˜o classes que n˜o podem ser instanciadas diretamente a a As classes filhas implementam os m´todos abstratos da e classe m˜e a Exemplos Classe abstrata: Forma geom´trica; Classes concretas: e Retˆngulo, Circulo, etc a Classe abstrata: Funcion´rio; Classes concretas: Gerente, a Secret´rio, etc a
  • 25.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Exemplo Forma Geom´trica e
  • 26.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos:
  • 27.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? e
  • 28.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e
  • 29.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? e
  • 30.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e
  • 31.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e Banheira ´ um Banheiro? e
  • 32.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e ˜ Banheira ´ um Banheiro? NAO! e
  • 33.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e ˜ Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA e Banheira (use agrega¸˜o / composi¸˜o) ca ca
  • 34.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e ˜ Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA e Banheira (use agrega¸˜o / composi¸˜o) ca ca Pilha ´ uma Lista? e
  • 35.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e ˜ Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA e Banheira (use agrega¸˜o / composi¸˜o) ca ca ˜ Pilha ´ uma Lista? NAO! e
  • 36.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Heran¸a e polimorfismo c Ser´ que ´ heran¸a mesmo? a e c O uso de heran¸a aumenta o acoplamento entre as classes c Usar apenas quando necess´rio, procurando alternativas como a composi¸˜o e Interfaces ca Regra b´sica a ´ Se uma classe B estende A, ent˜o classe B E-UMA classe A; a Exemplos: Quadrado ´ uma Forma Geometrica? SIM! e Lobo ´ um Animal? SIM! e ˜ Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA e Banheira (use agrega¸˜o / composi¸˜o) ca ca e ˜ Pilha ´ uma Lista? NAO! Pilha n˜o tem m´todos add() nem a e remove() (use composi¸˜o) ca
  • 37.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Interfaces Interfaces Uma interface em Java define uma cole¸˜o de m´todos ca e p´blicos, sem definir a implementa¸˜o u ca Apenas exp˜e o que o objeto deve fazer, e n˜o como ele o a faz ou o que ele tem Exemplo Em Java, para ordenar uma lista usando Collection.sort(lista), ´ necess´rio que os membros da e a lista implementem a interface Comparable. p u b l i c i n t e r f a c e Comparable<T> { i n t compareTo (T o u t r o ) ; }
  • 38.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Interfaces Exemplo Funcion´rios a
  • 39.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Interfaces Exemplo Funcion´rios a Quero que alguns funcion´rios (Diretor e Gerente) consigam se a autenticar no sistema interno.
  • 40.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Interfaces Exemplo Funcion´rios a Depois de um tempo, descobri que preciso que o cliente tamb´me possa se autenticar no sistema interno, ent˜o fiz a caca abaixo: a
  • 41.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Interfaces Exemplo Funcion´rios a Depois de refatorar meu sistema usando interfaces, eliminei as gambiarras e deixei o sistema menos acoplado e mais manuten´ ıvel. (Um prot´tipo do c´digo estar´ nos exemplos.) o o a
  • 42.
    Introdu¸˜o ` Programa¸˜oOrientada a Objetos usando Java ca a ca Interfaces Referˆncias Bibliogr´ficas e a Arlow J., Neustadt I. UML and the Unified Process - Practical Object-Oriented Analysis and Design. Pearson. 2002 Caelum. Java e Orienta¸˜o a Objetos. Dispon´ em < ca ıvel http://www.caelum.com.br/curso/fj-11-java-orientacao- objetos> Sierra K., Bates B. Use a Cabe¸a! - Java. 2a Edi¸˜o. O’Reilly c ca Media. 2005