Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são...

23
Polimorfismo em Java TM por Jorge H C Fernandes ([email protected]) CESAR-DI-UFPE Recife, 1999

Transcript of Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são...

Page 1: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Polimorfismo em JavaTM

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 2: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Polimorfismo

�Técnica para criação de código adaptável a mudanças, o que reduz o esforço de manutenção de código

�Baseia-se na separação entre a interface e a implementação de métodos, e no uso de herança

Page 3: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Ferramentas Convencionais

Page 4: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Um Kit de Soquetes

Page 5: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Polimorfismo e o Kit de Soquetes

�Usando ferramentas convencionais�Vantagens do Kit de Soquetes�Uma definição polimórfica para o “Kit”�Uma interpretação orientada a objetos para o

“Kit”�Uma implementação em Java do “Kit”�Avaliando o impacto de alterações no “Kit”

Page 6: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Uma Definição Polimórficapara o “Kit”

�O ato de girar uma chave de torção acoplada a um soquete pode ser usado em várias situações distintas

�Todos os soquetes tem uma mesma interface com a chave, que neste caso é um orifício quadrado

�Sem conhecimento da chave de torção, cada soquete tem um acoplador especial, adaptado a porcas de tamanho diferente

�Para usar a mesma chave e método de torção ao se criar um novo formato de porca é preciso apenas criar um novo soquete

Page 7: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Uma Interpretação Orientada a Objetos para o “Kit”

� porca = objeto� caixa de porcas de

mesmo tamanho = classe� soquete = método� cada soquete (método)

se aplica a uma única caixa de porca (classe)

� torçer a chave = método polimórfico

� todos os soquetes tem a mesma interface (assinatura de método) com a chave de torção (método polimótfico)

� cada soquete (método) tem um acoplador (implementação de méotodo) diferente que se adapta a uma classe de porcas

Page 8: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Uma Implementação em Java do “Kit de Soquetes” (1)

�Criar uma classe (abstrata) chamada Porca, para agrupar todas as classes de porca.

abstract class Porca {

int faces;

/* Método abstrato (sem implementação) */

abstract void acopleETorca();

}

Page 9: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Uma Implementação em Java do “Kit de Soquetes” (2)

�Uma classe chamada ChaveDeTorcao, que implementa um método polimórfico.

class ChaveDeTorcao {

/* Aperta qualquer porca */

void aperte(Porca porca) {

porca.acopleETorca();

}

}

Page 10: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Uma Implementação em Java do “Kit de Soquetes” (3)

�Criar uma subclasse de porca para cada tamanho de porca diferente

�Cada classe deve fornecer sua implementação específica para o método acopleETorca.

Porca

Porca10mm

Porca12mm

Porca8mm

Page 11: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Uma Implementação em Java do “Kit de Soquetes” (4)

class Porca8mm extends Porca {

void acopleETorca(){if (...) ...

}

}

class Porca10mm extends Porca {void acopleETorca(){

for (...) ...}

}

Page 12: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Interfaces: Solucionando Problemas na Evolução de Código Polimórfico

O Kit de Soquetes Contra-Ataca

Page 13: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Novos Usos para o “Kit”: Apertando Parafusos

Page 14: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Onde Colocar os Parafusos?

Porca

Porca10mmPorca12mm

Porca8mm Parafuso8mm

Parafuso

Parafuso10mmParafuso12mm

class ChaveDeTorcao {/* Aperta qualquer porca */void aperte(Porca porca) {

porca.acopleETorca();}

}

Page 15: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Parafuso é uma Porca?

Porca

Porca10mmPorca12mm

Porca8mm

Parafuso8mm

Parafuso

Parafuso10mmParafuso12mm

Page 16: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Porcas e Parafusos são Primos?

Porca

Porca10mmPorca12mm

Porca8mm

Parafuso8mm

Parafuso

Parafuso10mmParafuso12mm

Roscável abstract class Roscável {abstract void acopleETorca();

}

Page 17: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Reescrevendo o Cliente do Método Polimórficoclass ChaveDeTorcao {

/* Aperta qualquer porca */void aperte(Porca porca) {

porca.acopleETorca();}

}

class ChaveDeTorcao {/* Aperta qualquer roscável */void aperte(Roscável r) {

r.acopleETorca();}

}

Page 18: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Que Outros Parentescos?

Porca

Porca10mmPorca12mm

Porca8mm

Parafuso8mm

Parafuso

Parafuso10mmParafuso12mm

RoscávelReciclável Oxidável

ItemEstoque

Page 19: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Problemas com Herança Múltipla

�são solucionados em Java através do uso de interfaces

�Separação entre subclasses e subtipos�Classe

�Descreve as propriedades fundamentais de um objeto

�Interface�Descrevem papéis desempenhados por um

objeto em determinadas situações

Page 20: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Roscável (Interface ou Classe?)

abstract class Roscável {

abstract void acopleETorca();

}

interface Roscável {

void acopleETorca();

}

Page 21: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Classes e Interfaces

Porca Parafuso

RoscávelReciclável Oxidável

ItemEstoque

Rebite Esfera

Interfaces

Page 22: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Interfaces Roscável, Oxidável e Reciclável

abstract class Roscável {abstract void acopleETorca();

}

interface Roscável {void acopleETorca();

}

interface Oxidável {String índiceOxidação();

}

interface Reciclável {String categoriaReciclagem();

}

Page 23: Polimorfismo em Javajhcf/MyBooks/itjava/slides/... · Problemas com Herança Múltipla são solucionados em Java através do uso de interfaces Separação entre subclasses e subtipos

Java e Modelo de Objetos. Copyright © 1999, by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Implementação de Interfacesabstract class Porca extends ItemEstoque

implements Roscável, Oxidável, Reciclável {int faces;abstract void acopleETorca();abstract String índiceOxidação();String categoriaReciclagem() {return “Metal”;}

}

class Porca6mm extends Porca {Porca6mm() {faces = 6;

}void acopleETorca() {..}String índiceOxidação() {..}

}