26
Programação Orientada a Objetos Herança e Polimorfismo Prof. Jailton Carlos [email protected] 14/10/2010 1

Slides Heranca Ifrn

Embed Size (px)

Citation preview

  • Programao Orientada a Objetos

    Herana e Polimorfismo

    Prof. Jailton Carlos

    [email protected]

    14/10/2010 1

  • Plano de Aula Abstrao e Encapsulamento

    Herana

    Simples;

    Multiplas;

    Conceito Subtipo;

    Palavra-cha super

    Classe base Object;

    Cadeia de Construtores

    Exerccios de Fixao

    Exerccios em sala de aual

    14/10/2010 2

  • 3

    Abstrao e Encapsulamento So conceitos complementares

    Abstrao foca sobre o comportamento observvel de um objeto, enquanto encapsulamento se concentra na execuo que d origem a esse comportamento

    O encapsulamento proporciona barreiras explcitas entre abstraes diferentes e, portanto, leva a uma separao clara das preocupaes.

  • Abstrao e Encapsulamento Interface

    Viso externa da classe

    O que os objetos da classes fazem

    Definem o contrato da classe

    O que o cliente precisa conhecer da classe

    Implementao

    Viso interna da classe

    Como os objetos fazem as operao

    Representao interna

    14/10/2010 4

  • Abstrao e Encapsulamento Cliente no precisa (nem deve) conhecer a

    implementao

    Realizam o contrato definido pela interface

    Atributos fazem parte da implementao

    Declare-os como private

    Nem todos os mtodos fazem parte da interface

    Mtodos que servem para auxiliar outros mtodos

    Declare-os private

    Deixe public apenas o que o cliente deve saber

    14/10/2010 5

  • 6

    Herana

    Dado um sistema de venda que permita o cadastro de pessoa fsica ou Jurdica.

    Como evita a redundncia?

    O que eles tm em comum?

    Como eles so relacionados?

    PESSOA FSICA

    Atributos:

    Nome Endereco Telefone CPF

    PESSOA JURDICA

    Atributos:

    Nome Endereco Telefone CNPJ Inscrio Estadual Inscrio Municipal

  • Pessoa

    -nome: String-endereco: String-telefone: String

    +calcImpostoDeRenda(): double

    PessoaFisica

    -cpf: String-rg: String-dataNascimento: Calendar

    PessoaJuridica

    -cnpj: String-inscrEstadual: String-inscrMunicipal: String

    7

    Herana

    Pessoa Fsica e Pessoa

    Jurdica herdam os

    atributos e mtodos de

    Pessoa.

    Atributos e

    mtodos existem nas

    subclasses Seta vazada

    indica

    herana

    Soluo: Utilizao de herana

  • 8

    Herana

    Define uma relao entre as classes, onde uma classe compartilha a estrutura ou o comportamento definido e uma ou mais classes.

    Herana representa, portanto, uma hierarquia de abstraes, na qual um subclasse herda de uma ou mais superclasses.

    Duas razes mais comuns parar se usar a herana so:

    Para promover a reutilizao de cdigos;

    Par usar o polimorfismo.

  • Estrutura Hierrquica e modular

    Projeo de classes genricas que podem ser especializadas em classes mais particulares.

    Classes especializadas reutilizam o cdigo das mais genricas.

    A B

    C A

    B A

    B C

    D

    E

    Caractersticas

    Herdadas

    Classe Genrica

    Classe

    Especializada

    Classe

    Especializada

    Herana

  • Classe genrica, classe base, superclasse ou pai: Define variveis de instncia genricas e mtodos.

    Classe especializada, derivada, subclasse ou filha: Especializa, estende ou herda os mtodos genricos de

    uma superclasse;

    Define apenas os mtodos que so especializados.

    Herana

  • 11

    Herana Simples

    Animal

    -nome: String-sexo: String-raca: String

    +emitirSom()+dormir()+caminhar()

    Leao

    Tigre Cachorro

    Gato

    Lobo

  • Animal

    -nome: String-sexo: String-raca: String

    +emitirSom()+dormir()+caminhar()

    Leao

    TigreCachorro

    Gato

    Lobo

    DomestricoSelvagem

    12

    Hierarquias de Herana

    Gato possui todas as

    caractersticas de

    Animal e tambm de

    Domestico.

  • Herana em Java

    14/10/2010 13

    Pessoa

    -nome: String-endereco: String-telefone: String

    +calcImpostoDeRenda(): double

    PessoaFisica

    -cpf: String-rg: String-dataNascimento: Calendar

    class Pessoa {

    private String nome, endereco;

    private String telefone;

    public String getNome(){

    return nome;

    }

    public void setNome(String nome) {

    this.nome = nome;

    }

    }

    class PessoaFisica extends Pessoa {

    private String cpf, rg

    private Calendar dtNascimento;

    public String getCpf() {

    return cpf;

    }

    public void setCpf(String cpf){

    this.cpf = cpf;

    }

    }

    Usamos extends para

    indicar herana em Java

  • Execuo

    14/10/2010 14

    Pessoa

    -nome: String-endereco: String-telefone: String

    +calcImpostoDeRenda(): double

    PessoaFisica

    -cpf: String-rg: String-dataNascimento: Calendar

    public static void main(String[] args) {

    Pessoa p = new Pessoa();

    PessoaFisica pf = new PessoaFisica();

    p.setNome("Joo");

    pf.setNome("Jos");

    pf.setCpf("032...");

    System.out.println(p.getNome());

    System.out.println(pf.getNome());

    System.out.println(pf.getCpf());

    }

    Todos as caractersticas existentes na classe

    Pessoa tambm existem na classe PessoaFisica

    Mtodo herdado da

    classe Pessoa

  • 15

    Subtipos Uma classe que herda de outra um subtipo

    Herana representa relacionamento UM

    Carro UM veculo;

    Pessoa Fsica UMA Pessoa;

    Gato UM Animal.

    Podemos ter uma varivel do tipo Pessoa que referencia um objeto do tipo PessoaFisica

    Pessoa p1,p2; p1 = new Pessoa(); p2 = new PessoaFisica(); p1.setNome("Joo"); p2.setNome("Jos"); //p2.setCPF(032..."); System.out.printf(%s,%s",p1.getNome(),p2.getNome());

    Varivel p2 NO

    executa mtodos da

    classe PessoaFisica,

    pois ela s conhece a

    interface de Pessoa

    Uma referncia a Animal

    sempre poder apontar

    para uma instncia de Gato,

    porque Gato UM Animal.

  • 16

    Subtipos Uma referncia a Pessoa sempre poder apontar

    para uma instncia de PessoaFisica, porque PessoaFiscia UMA Pessoa;

    O que torna possvel a superclasse referenciar uma instncia da subclasse a certeza de que a subclasse pode fazer tudo que a superclasse pode fazer.

  • super Palavra-chave que faz o compilador chamar o mtodo

    ou construtor da superclasse.

    O compilador Java invoca super implicitamente para chamar o construtor da superclasse.

    14/10/2010 17

    public class Ponto { protected int x,y;

    public Ponto (int x, int y) { x = 0; y = 0;

    } } public class Quadrado extends Ponto{ protected double lado;

    public Quadrado(int x, int y, double lado){ super(x,y); this.lado=lado;

    } }

    Chama o construtor

    da classe pai, neste

    caso, o construtor da

    classe Ponto.

  • Classe Object

    Classe base em JAVA

    Tudo herda de Object

    Define alguns mtodos: public String toString()

    public boolean equals()

    entre outros...

    class Animal {

    /* ... */ }

    class Animal extends Object {

    /* ... */ }

    Includo por padro

  • Cadeia de Construtores Toda vez que instanciamos um objetos, o compilador

    Java por padro chama todos os construtores padro das superclasses.

    14/10/2010 19

    Assuma que Gato

    estende Animal. O

    que ocorre quando

    instanciamos Gato?

    Gato g = new Gato()

    1. O construtor de Gato ser chamado.

    2. O construtor de Animal ser chamado.

    3. O construtor de Object ser chamado.

    4. As variveis de instncia de Object recebero

    seus valores explicitos.

    5. A execuo do construtor de Object ser

    concluda.

    6. As variveis de instncia de Animal recebero

    seu valores explcitos (se houver).

    7. A execuo do construtor de Animal ser

    concluda.

    8. As variveis de instncia de Gato recebero

    seus valores explcitos (se houver)

    9. A execuo do construtor de gato ser

    concluda

    Pilhas de chamadas

    4. Object()

    3. Animal() chama super()

    2. Gato chama super()

    1. main chama new Gato()

  • Dvidas

    14/10/2010 20

  • Exerccio de fixao Identifique o erro e explique por qu?

    public class A { public void setX () {} public void setY () {}

    } public class B extends A{

    public void setZ () {} } public static void main(String[] args) { A a = new B(); B b = new B() a.setX(); b.setY(); a.setZ(); }

    O tipo de uma varivel de

    referncia determina os

    mtodos que podem ser

    chamados no objeto o qual

    a varivel est referenciado.

    a.setZ()

  • Exerccio de fixao Identifique o erro:

    public class Animal { private String nome;

    public Animal (String nome) { this.nome = nome;

    } } public class Gato extends Animal{

    public Gato(){ }

    }

    Se a superclasse no tiver

    um construtor sem

    argumentos, as subclasses

    no podero usar o

    construtor padro.

    Erro ao compilar, implcito

    construtor super () no

    definido.

  • Exerccio de fixao Qual o resultado do cdigo a seguir?

    public class Animal { private String nome;

    public Animal() { System.out.print("B"); }

    } public class Cachorro extends Animal { public Cachorro() { System.out.print("C"); } public Cachorro(String s) { System.out.print("E"); } } public static void main(String[] args) { new Cachorro("D"); System.out.println(""); }

    Cadeia de construtores.

    Chamada implcita do

    construtor super()

    BE.

  • Exerccio 1 Pessoa

    -nome: String-endereco: String-telefone: String

    +calcImpostoDeRenda(): double

    PessoaFisica

    -cpf: String-rg: String-dataNascimento: Calendar

    PessoaJuridica

    -cnpj: String-inscrEstadual: String-inscrMunicipal: String

    Passo 1: implementar as classes conforme o diagrama; uso do extends. Passo 2: criar construtores padro para cada classe e imprimir seus respectivos nomes; Passo 3: criar construtores que receba como parmetros variveis para inicializar os atributos; uso do super. Passo 4: criar os mtodos gets e sets; Passo 5: criar uma classe Principal com o mtodo main para criar as instncias p, pF e pJ de sua respectivas classes. Passo 6: Verificar o que ocorre se chamar p.SetCPF() e p.setCNPJ() e explique; Passo 7: Verificar o que ser impresso ao chamar o construtor padro de PessoaFisica e de PessoaJuridica. uso cadeia de construtores.

  • Exerccio 2 Implementar as classes do diagrama:

    Animal

    -nome: String-sexo: String-raca: String

    +emitirSom()+dormir()+caminhar()

    Leao

    TigreCachorro

    Gato

    Lobo

    DomestricoSelvagem

  • Referncias Sierra, K.; Bates, B. SCJP: Certificao Sun para Programador Java 6 Guia de Estudo. Alta Books, 2008. Horstmann, C. S; Cornell, G. Core Java: Volume I Fundamentos. 8 edio. Pearson, 2010. DEITEL, H. M.; DEITEL, P. J. Java: como programar. 8 Edio. Pearson, 2010. Material de aula da disciplina de POO criado pelo prof. Alexandre e Bruno Gomes.

    14/10/2010 26