SlideShare a Scribd company logo
1 of 57
Download to read offline
POO, em Java,
com Eclipse e Netbeans
Tópicos da aula



1.   A pilha e a heap
2.   Criando objetos
3.   Herança
4.   Exemplo de herança
A pilha e a heap
A Lição de anatomia do Dr. Tulp
Pilha         A pilha e a heap




        Onde as
         coisas
        residem       Heap
Pilha

Pilha
Heap




Heap
Um monte de bicicletas
Tipos de variáveis

                         Declaradas dentro de
                         um método, inclusive
             Locais      como parâmetros do
                               método


Variáveis

                         Declaradas dentro de
                         uma classe, mas não
            Instância       dentro de um
                               método
Tipos de variáveis




                                      São inicializadas
                                     automaticamente




         Variáveis       Precisam ser
          locais     inicializadas sempre
Pilha                     A pilha e a heap

                        Na heap residem
                         os objetos e as
                          variáveis de
                            instância


 Na pilha residem as
   variáveis locais,
referências a objetos
    e chamadas a
       métodos
                                           Heap
Criando objetos
A criação de Adão
Criando um
objeto de uma           Ou criando
                      instanciando a
    classe                 classe



        nome da
  new             (                    )
         classe

                         lista de
                       argumentos
Criando bicicletas
As três etapas do
milagre da criação




  a


      pilha          heap
Chamando um construtor
      de outro




         Ele precisa ser o primeiro comando
         Ele só pode ser usado em construtores
Exemplo
Exemplo
A auto-referência this

  Cada objeto pode acessar uma
referência a si próprio por meio da
        palavra-chave this




     this.< nomeDaVariávelDeInstância >
Exemplo com this
Exemplo com this
Herança
Herança
               Classe mãe
                   ou
              Super-classe
 Classe A

            Classe filha
                ou
 Classe B   Sub-classe     Conforme os atributos
                           de visibilidade, a sub-
                              classe herda as
                             características da
                                super-classe
Herança – como descobrir ?


  Classe A     Classe B


                             B é sub-classe de A ?
                                     isto é,
                                 B estende A ?
             Faça o teste:
             B é uma A?
Herança
                                 Classe A
    Super-classes de
           C
                            Classe B   Classe G


Sub-classes de              Classe C
      C

                 Classe D

                                   Classe F
                 Classe E
A classe Object
É a classe mãe de
 todas as outras
 classes em Java          Object



         Classe B
                        Classe C



                    Classe D
A classe Object




             Por exemplo:
             • getClass( )
             • equals( )
             • toString( )
Herança e visibilidade
           Acesso
          permitido

                                  Private   Default   Protected   Public


             Mesma classe          Sim       Sim        Sim        Sim
Herança
          Outra classe, mesmo
                                   Não       Sim        Sim        Sim
                 pacote

            Sub-classe, outro
                                   Não       Não        Sim        Sim
                 pacote

           Fora de sub-classe,
                                   Não       Não        Não        Sim
              outro pacote
Herança – reutilização de campos

      Classe A
                          Campo 1
                            ...
                          Campo N

Classe B    Classe D


Classe C
Herança – reutilização de campos


Classe A    Campo 1           Herda os campos
            Campo 2              Campo 1
                                 Campo 2
                            o Campo 3 é novo
Classe B

           Campo 3
                          Podem ser criados campos novos,
                        inclusive com o mesmo nome. Nesse
                       caso campo correspondente da super-
                                   classe é ocultado
Herança – reutilização de métodos

      Classe A
                            Método 1
                              ...
                            Método N



Classe B    Classe D


Classe C
Herança – reutilização de métodos

                            Sub-classes precisam
                            implementar apenas
Classe A     Método 1      aquilo que acrescentam
             Método 2           à super-classe

Classe B

Classe C                       A Classe C herda o
                            Método 1 e o Método 2
              Método 3          da Classe A e o
                             Método 3 da Classe B


               Método 4
Herança – sobrescrevendo/ocultando



 Classe A   Método 1
            Método 2


 Classe B

            Método 2
Quando sobrescrever
     métodos
Como derivar sub-classes ?

                              Classe
                               mãe

                     Pessoa
Classe                                    Classe
 filha                                     filha


         Estudante            Professor
Declaração da
                             classe mãe
public class Pessoa{

    protected String nome;
    protected String endereco;
    ...
}                      palavra-chave        Classe
                                             mãe

public class Estudante extends Pessoa {
         ...
}
     Declaração da
      classe filha
Os construtores
  public class Pessoa{               Construtor de
     protected String nome;            Pessoa
     protected String endereco;

      public Pessoa(){
           System.out.println(“Construtor, a partir
                           de Pessoa”);
           nome = ""; endereco = "";
      }
      . . . .
  }
                                              Construtor de
  public class Estudante extends Pessoa {
                                              Estudante

      public Estudante(){
           System.out.println(“Construtor, a partir
                           de Estudante”);
      }
      . . . .
  }
Chamadas aos construtores                          Criando
                                                  gilberto
                                                 um objeto da
 public static main( String[] args ) {
                                                    classe
                                                 Estudante
     Estudante gilberto = new Estudante();

 }


                   Construtor, a partir de Pessoa
                   Construtor, a partir de Estudante


          Quando um objeto de uma sub-classe é instanciado,
                o construtor default da super-classe,
                      é invocado implicitamente,
            antes do construtor da sub-classe ser invocado
A palavra-chave super
  Uma sub-classe pode,
    também, chamar
   explicitamente um
construtor da super-classe
 imediatamente superior


  Tal chamada resultará na execução
   do construtor relevante (aquele
 associado aos parâmetros passados)
           da super-classe
Usando super                       Passagem dos parâmetros
                                      nome e endereco
                                 de acordo com a assinatura do
                                  construtor da super-classe,
                                           Pessoa
public Estudante(){

    super( “Gustavo", “Av. Getúlio Vargas, 300" );

    System.out.println(“Construtor de Pessoa,
                            a partir de Estudante");
}

                A chamada a super() precisa ser
                 o primeiro comando no construtor

             A chamada a super() só pode ser
                 feita a partir de um construtor
Usando super

  public Student() {

      super.nome = “Gustavo”;
      super.endereco = “Av. Getúlio Vargas, 300”;

  }



           Outra forma de usar super é empregar
         a sintaxe do . para referenciar os membros
           da super-classe ( semelhante a this )
Exemplo - herança
Construiremos a seguir
                            Um exemplo Animal !
 um exemplo mais longo,
 envolvendo a criação de
 objetos, os conceitos de   O exemplo envolve três
      herança e o de          classes no seguinte
  polimorfismo (sobre o      esquema de herança
    método show( ) ).
Demonstraremos também                                Animal
   a utilização de super,
      super( ) e this .                              Cachorro

                                                     Cocker
Chamando o main
O resultado do main
A classe Animal

Animal
tipo
cor
Animal( tipo, cor )
show( )
getCor( )




                      Eu sou um <tipo> <cor>
Código da classe Animal
A subclasse Cachorro
Cachorro
nome                                  Naturalmente a subclasse
raça                                  Cachorro herda da classe
                                     mãe, Animal, os campos tipo
Cachorro( nome, cor)                   e cor e pode utilizar os
Cachorro( nome, raça, cor )          métodos show( ) e getCor( )
show( )                                  definidos na Animal




                                    Eu sou um <tipo> <cor>




                       <nome> é um <raça>
Código da
                classe
               Cachorro
       Chamadas ao
    construtor da classe
           mãe




 Chamada ao método
show( ) da classe mãe
A subclasse Cocker                            Naturalmente a subclasse
                                            Cocker herda da classe mãe,
                                            Cachorro , os campos nome e
         Cocker                             raça e herda da classe avó os
         vacina                                   campos tipo e cor

         Cocker( nome, cor, vacina)
         show( )


 O método show( ) exibirá na
 tela:
 • as mensagens que herda da
    classe mãe
 • e também uma mensagem              Eu sou um <tipo> <cor>
   que depende do valor do            <nome> é um <raça>
   campo vacina


            Se vacina = true:          Se vacina = false:
           Cachorro vacinado !         Vacinar cachorro !
Código da
               classe
               Cocker



           Chamada ao
        construtor da classe
             Cachorro




Chamada ao método
 show( ) da classe
    Cachorro
Exercício 1
Criar uma classe Pessoa com:
• Atributos:
    –   nome;
    –   endereço,;
    –   email;
    –   telefone
• Construtores:
    – default;
    – que receba nome e email;
    – que receba nome, endereço, email e telefone (lembre-se que podemos
      chamar outros construtores da própria classe através do this)
• Utilizar encapsulamento.
• Sobrescrever o método toString() que pertence a classe Object para
  imprimir os dados no formato:
   (Nome: xxx /n Email: xxx /n etc...)
• Criar classe com método main e instanciar 5 pessoas e imprimir as
  instâncias
Exercício 2
Estender a classe Pessoa para duas outras classes
• PessoaFisica
   – Possui o atributo CPF
• PessoaJuridica
   – Possui o atributo CNPJ
• Sobrescrever o método toString() para imprimir
  os dados adicionais alem dos da classe “mãe”
• Utilizar a super nos construtores das classes filhas
• Criar uma classe com método main e instanciar 3
  pessoas de cada
Exercício 3
 Nosso sistema possui uma classe chamada Manobrista
 que possui um método chamado estacionar. Este
 método recebe um objeto e realiza as seguintes
 operações:
     • acelerar;
     • freiar;
     • virar(direção);
     • engatarMarcha(marcha);
 Sabendo que osistema pode receber vários tipos de
 veículos (carros, motos, caminhões, ônibus), crie uma
 hierarquia de classes para resolver o problema do
 manobrista.
Exercício 4

 Nosso estacionamento recebe um novo
 cliente chamado James Bond. Ele trouxe dois
 carros para estacionar. Como seriam as classes
 para estes carros? Qual classe estes carros
 devem estender e quais atributos devemos
 modificar?
 Sabendo que os carros de Bond sempre tem
 algo diferente de outros carros, qual a solução
 ideal para resolvermos este problema?

More Related Content

Similar to POO em Java com herança e polimorfismo

http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Resolucao exercicios
Resolucao exerciciosResolucao exercicios
Resolucao exerciciosVis Rodrigues
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classesCarlos Melo
 

Similar to POO em Java com herança e polimorfismo (7)

http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Resolucao exercicios
Resolucao exerciciosResolucao exercicios
Resolucao exercicios
 
Java 07
Java 07Java 07
Java 07
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classes
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 

POO em Java com herança e polimorfismo

  • 1. POO, em Java, com Eclipse e Netbeans
  • 2. Tópicos da aula 1. A pilha e a heap 2. Criando objetos 3. Herança 4. Exemplo de herança
  • 3. A pilha e a heap
  • 4. A Lição de anatomia do Dr. Tulp
  • 5. Pilha A pilha e a heap Onde as coisas residem Heap
  • 8. Um monte de bicicletas
  • 9. Tipos de variáveis Declaradas dentro de um método, inclusive Locais como parâmetros do método Variáveis Declaradas dentro de uma classe, mas não Instância dentro de um método
  • 10. Tipos de variáveis São inicializadas automaticamente Variáveis Precisam ser locais inicializadas sempre
  • 11. Pilha A pilha e a heap Na heap residem os objetos e as variáveis de instância Na pilha residem as variáveis locais, referências a objetos e chamadas a métodos Heap
  • 13. A criação de Adão
  • 14. Criando um objeto de uma Ou criando instanciando a classe classe nome da new ( ) classe lista de argumentos
  • 16. As três etapas do milagre da criação a pilha heap
  • 17. Chamando um construtor de outro Ele precisa ser o primeiro comando Ele só pode ser usado em construtores
  • 20. A auto-referência this Cada objeto pode acessar uma referência a si próprio por meio da palavra-chave this this.< nomeDaVariávelDeInstância >
  • 24.
  • 25. Herança Classe mãe ou Super-classe Classe A Classe filha ou Classe B Sub-classe Conforme os atributos de visibilidade, a sub- classe herda as características da super-classe
  • 26. Herança – como descobrir ? Classe A Classe B B é sub-classe de A ? isto é, B estende A ? Faça o teste: B é uma A?
  • 27. Herança Classe A Super-classes de C Classe B Classe G Sub-classes de Classe C C Classe D Classe F Classe E
  • 28. A classe Object É a classe mãe de todas as outras classes em Java Object Classe B Classe C Classe D
  • 29. A classe Object Por exemplo: • getClass( ) • equals( ) • toString( )
  • 30. Herança e visibilidade Acesso permitido Private Default Protected Public Mesma classe Sim Sim Sim Sim Herança Outra classe, mesmo Não Sim Sim Sim pacote Sub-classe, outro Não Não Sim Sim pacote Fora de sub-classe, Não Não Não Sim outro pacote
  • 31. Herança – reutilização de campos Classe A Campo 1 ... Campo N Classe B Classe D Classe C
  • 32. Herança – reutilização de campos Classe A Campo 1 Herda os campos Campo 2 Campo 1 Campo 2 o Campo 3 é novo Classe B Campo 3 Podem ser criados campos novos, inclusive com o mesmo nome. Nesse caso campo correspondente da super- classe é ocultado
  • 33. Herança – reutilização de métodos Classe A Método 1 ... Método N Classe B Classe D Classe C
  • 34. Herança – reutilização de métodos Sub-classes precisam implementar apenas Classe A Método 1 aquilo que acrescentam Método 2 à super-classe Classe B Classe C A Classe C herda o Método 1 e o Método 2 Método 3 da Classe A e o Método 3 da Classe B Método 4
  • 35. Herança – sobrescrevendo/ocultando Classe A Método 1 Método 2 Classe B Método 2
  • 37. Como derivar sub-classes ? Classe mãe Pessoa Classe Classe filha filha Estudante Professor
  • 38. Declaração da classe mãe public class Pessoa{ protected String nome; protected String endereco; ... } palavra-chave Classe mãe public class Estudante extends Pessoa { ... } Declaração da classe filha
  • 39. Os construtores public class Pessoa{ Construtor de protected String nome; Pessoa protected String endereco; public Pessoa(){ System.out.println(“Construtor, a partir de Pessoa”); nome = ""; endereco = ""; } . . . . } Construtor de public class Estudante extends Pessoa { Estudante public Estudante(){ System.out.println(“Construtor, a partir de Estudante”); } . . . . }
  • 40. Chamadas aos construtores Criando gilberto um objeto da public static main( String[] args ) { classe Estudante Estudante gilberto = new Estudante(); } Construtor, a partir de Pessoa Construtor, a partir de Estudante Quando um objeto de uma sub-classe é instanciado, o construtor default da super-classe, é invocado implicitamente, antes do construtor da sub-classe ser invocado
  • 41. A palavra-chave super Uma sub-classe pode, também, chamar explicitamente um construtor da super-classe imediatamente superior Tal chamada resultará na execução do construtor relevante (aquele associado aos parâmetros passados) da super-classe
  • 42. Usando super Passagem dos parâmetros nome e endereco de acordo com a assinatura do construtor da super-classe, Pessoa public Estudante(){ super( “Gustavo", “Av. Getúlio Vargas, 300" ); System.out.println(“Construtor de Pessoa, a partir de Estudante"); } A chamada a super() precisa ser o primeiro comando no construtor A chamada a super() só pode ser feita a partir de um construtor
  • 43. Usando super public Student() { super.nome = “Gustavo”; super.endereco = “Av. Getúlio Vargas, 300”; } Outra forma de usar super é empregar a sintaxe do . para referenciar os membros da super-classe ( semelhante a this )
  • 45. Construiremos a seguir Um exemplo Animal ! um exemplo mais longo, envolvendo a criação de objetos, os conceitos de O exemplo envolve três herança e o de classes no seguinte polimorfismo (sobre o esquema de herança método show( ) ). Demonstraremos também Animal a utilização de super, super( ) e this . Cachorro Cocker
  • 48. A classe Animal Animal tipo cor Animal( tipo, cor ) show( ) getCor( ) Eu sou um <tipo> <cor>
  • 50. A subclasse Cachorro Cachorro nome Naturalmente a subclasse raça Cachorro herda da classe mãe, Animal, os campos tipo Cachorro( nome, cor) e cor e pode utilizar os Cachorro( nome, raça, cor ) métodos show( ) e getCor( ) show( ) definidos na Animal Eu sou um <tipo> <cor> <nome> é um <raça>
  • 51. Código da classe Cachorro Chamadas ao construtor da classe mãe Chamada ao método show( ) da classe mãe
  • 52. A subclasse Cocker Naturalmente a subclasse Cocker herda da classe mãe, Cachorro , os campos nome e Cocker raça e herda da classe avó os vacina campos tipo e cor Cocker( nome, cor, vacina) show( ) O método show( ) exibirá na tela: • as mensagens que herda da classe mãe • e também uma mensagem Eu sou um <tipo> <cor> que depende do valor do <nome> é um <raça> campo vacina Se vacina = true: Se vacina = false: Cachorro vacinado ! Vacinar cachorro !
  • 53. Código da classe Cocker Chamada ao construtor da classe Cachorro Chamada ao método show( ) da classe Cachorro
  • 54. Exercício 1 Criar uma classe Pessoa com: • Atributos: – nome; – endereço,; – email; – telefone • Construtores: – default; – que receba nome e email; – que receba nome, endereço, email e telefone (lembre-se que podemos chamar outros construtores da própria classe através do this) • Utilizar encapsulamento. • Sobrescrever o método toString() que pertence a classe Object para imprimir os dados no formato: (Nome: xxx /n Email: xxx /n etc...) • Criar classe com método main e instanciar 5 pessoas e imprimir as instâncias
  • 55. Exercício 2 Estender a classe Pessoa para duas outras classes • PessoaFisica – Possui o atributo CPF • PessoaJuridica – Possui o atributo CNPJ • Sobrescrever o método toString() para imprimir os dados adicionais alem dos da classe “mãe” • Utilizar a super nos construtores das classes filhas • Criar uma classe com método main e instanciar 3 pessoas de cada
  • 56. Exercício 3 Nosso sistema possui uma classe chamada Manobrista que possui um método chamado estacionar. Este método recebe um objeto e realiza as seguintes operações: • acelerar; • freiar; • virar(direção); • engatarMarcha(marcha); Sabendo que osistema pode receber vários tipos de veículos (carros, motos, caminhões, ônibus), crie uma hierarquia de classes para resolver o problema do manobrista.
  • 57. Exercício 4 Nosso estacionamento recebe um novo cliente chamado James Bond. Ele trouxe dois carros para estacionar. Como seriam as classes para estes carros? Qual classe estes carros devem estender e quais atributos devemos modificar? Sabendo que os carros de Bond sempre tem algo diferente de outros carros, qual a solução ideal para resolvermos este problema?