polimorfismo em javajhcf/mybooks/itjava/slides/... · problemas com herança múltipla são...
TRANSCRIPT
![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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052714/5be5b05f09d3f2ea1a8beb26/html5/thumbnails/23.jpg)
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() {..}
}