Your SlideShare is downloading. ×
POO - 16 - Polimorfismo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

POO - 16 - Polimorfismo

3,813
views

Published on

Published in: Technology

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,813
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Programação Orientada a Objetos Polimorfismo e Classes Abstratas Ludimila Monjardim Casagrande 2012
  • 2. Polimorfismo e Herança  O mecanismo de herança permite a criação de classes a partir de outras já existentes desde que exista a relação “é um” entre a subclasse e a superclasse.  Dessa forma é possível criar classes mais especializadas a partir de uma classe genérica.  A relação “é um” entre classes também permite a existência de outra característica fundamental das linguagens OO que é o polimorfismo.Polimorfismo ©2012 Ludimila Monjardim Casagrande 2
  • 3. Polimorfismo e Herança Uma Figura Geométrica Figura é uma generalização de múltiplas formas Quadrado é uma Círculo é uma Figura Geométrica Figura Geométrica Quadrado CírculoPolimorfismo ©2012 Ludimila Monjardim Casagrande 3
  • 4. Polimorfismo  Polimorfismo, que significa “múltiplas formas”, permite a manipulação de instâncias de classes que herdam de uma mesma classe ancestral de forma unificada:  Assim, é possível escrever métodos que recebam instâncias de uma classe C, e os mesmos métodos serão capazes de processar instâncias de qualquer classe que herde de C, já que qualquer classe que herde de C “é um” C.Polimorfismo ©2012 Ludimila Monjardim Casagrande 4
  • 5. Exemplo de Polimorfismo public class VetorFiguras{ private Figura[] figuras = new Figura[10]; private int totalDeElementos; public boolean contem(Figura fig) { boolean resultado = false; for(int i = 0; i < this.totalDeElementos; i++){ if(fig.equals(this.figuras[i])){ resultado = true; Quadrado q = new Quadrado(2.0); break; Circulo c = new Circulo(2.0); } } if(vetor.contem(q)) return resultado; ... } if(vetor.contem(c)) } ...Polimorfismo ©2012 Ludimila Monjardim Casagrande 5
  • 6. Exemplo de Polimorfismo public class Vetor { private Object[ ] objetos = new Object[10]; private int totalDeElementos; public boolean contem(Object obj) { boolean resultado = false; for(int i = 0; i < this.totalDeElementos; i++){ if(obj.equals(this.objetos[i])){ resultado = true; break; } } return resultado; } }Polimorfismo ©2012 Ludimila Monjardim Casagrande 6
  • 7. Polimorfismo  Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse.Polimorfismo ©2012 Ludimila Monjardim Casagrande 7
  • 8. Polimorfismo  Em outras palavras, polimorfismo é a capacidade de se enviar a mesma mensagem a objetos de classes diferentes, por meio de um mesmo tipo base comum a estes objetos.Polimorfismo ©2012 Ludimila Monjardim Casagrande 8
  • 9. Exemplo de Polimorfismo public class Figura { public double calcularArea( ) { return 0; } } public class Quadrado extends Figura {  Herança double lado; public Quadrado(double lado) { this.lado = lado; } public double calcularArea( ) {  Sobreposição do método da double area = 0; superclasse area = lado * lado; return area; } }Polimorfismo ©2012 Ludimila Monjardim Casagrande 9
  • 10. Exemplo de Polimorfismo public class Circulo extends Figura {  Herança double raio; public Circulo (double raio) { this.raio = raio; } public double calcularArea( ) {  Sobreposição do método da double area = 0; superclasse. area = 3.14 * raio * raio; return area; } }Polimorfismo ©2012 Ludimila Monjardim Casagrande 10
  • 11. Exemplo de Polimorfismo public class Principal { public static void main(String[ ] args) { Figura f1 = new Quadrado(4); Figura f2 = new Circulo(2); System.out.println("Área da Figura 1 é: "  Comportamento + f1.calcularArea( ) + "n" polimórfico. + "Área da Figura 2 é: " + f2.calcularArea( )); } Um mesmo tipo base Figura, por meio das variáveis f1 e f2, é utilizado } para enviar uma mesma mensagem calcularArea para objetos de tipos diferentes Quadrado e Circulo e o comportamento executado será distinto.Polimorfismo ©2012 Ludimila Monjardim Casagrande 11
  • 12. Exemplo de Polimorfismo public class VetorFiguras { private Figura[] figuras = new Figura[10]; private int totalDeElementos; public double calcularAreaTotal() { double areaTotal = 0; for (int i = 0; i < figuras.length; i++) { if (figuras[i] != null) { areaTotal = areaTotal + figuras[i].calcularArea();  Comportamento } polimórfico. } return areaTotal; } }Polimorfismo ©2012 Ludimila Monjardim Casagrande 12
  • 13. Outro Exemplo A fila de impressão FilaImpressao Documento armazena objetos imprime() genéricos do tipo Documento imprime() A mensagem transmitida é: imprima todos os Documentos da fila DocWord DocExcel DocPDF Cada tipo de documento conhece seus detalhes de imprime() imprime() imprime() impressãoPolimorfismo ©2012 Ludimila Monjardim Casagrande 13
  • 14. Vantagens do Polimorfismo  Já vimos que o grande benefício do polimorfismo é permitir que vários objetos de um mesmo tipo base sejam tratados da mesma maneira.  Uma outra vantagem é permitir aumentar um software de maneira mais controlada, mais localizada.Polimorfismo ©2012 Ludimila Monjardim Casagrande 14
  • 15. Vantagens do Polimorfismo  Considere o exemplo da fila de impressão. Se quisermos incrementar o software e permitir que novos tipos de documentos sejam impressos, a classe FilaImpressao não precisa ser alterada.  Somente novas classes precisam ser criadas para implementar os novos tipos de documentos. Assim, o trabalho é menor e mais localizado, evitando que erros de programação sejam inseridos na classe FilaImpressao.Polimorfismo ©2012 Ludimila Monjardim Casagrande 15
  • 16. Classes Abstratas  Vimos no exemplo das classes de figuras geométricas, que a classe Figura implementa o método calcularArea, porém o método somente retorna 0 e não realiza nenhum cálculo.  Isso foi feito para que a classe base Figura definisse o comportamento padrão para toda a hierarquia de classes de figuras geométricas, assim todos os objetos das classes derivadas podem ser tratados da mesma maneira (pelo polimorfismo).Polimorfismo ©2012 Ludimila Monjardim Casagrande 16
  • 17. Classes Abstratas  Uma outra maneira de implementar o comportamento padrão para toda uma hierarquia de classes é fazendo com que a classe base seja uma classe abstrata.  Uma classe abstrata é uma classe que não pode ser instanciada, isto é, nenhum objeto daquela classe pode ser criado.  Uma classe abstrata serve apenas para definir um comportamento comum que todas as classes derivadas devem seguir.Polimorfismo ©2012 Ludimila Monjardim Casagrande 17
  • 18. Classes Abstratas  Para alterar a classe Figura e torná-la abstrata, basta acrescentar a palavra-chave do Java abstract na sua declaração: public abstract class Figura { public double calcularArea( ) { return 0; } }Polimorfismo ©2012 Ludimila Monjardim Casagrande 18
  • 19. Classes Abstratas  Desse modo, nenhum objeto da classe Figura pode ser criado e a linha abaixo causará um erro de compilação: Figura f = new Figura( );Polimorfismo ©2012 Ludimila Monjardim Casagrande 19
  • 20. Métodos Abstratos  O Java permite que métodos sejam definidos como abstratos e, portanto, sem nenhuma implementação.  Para criar um método abstrato, usamos a palavra-chave abstract na assinatura do método e omitimos o seu corpo (já que não há implementação): public abstract class Figura { public abstract double calcularArea( ); }Polimorfismo ©2012 Ludimila Monjardim Casagrande 20
  • 21. Regras sobre Classes Abstratas  Toda classe derivada de uma classe abstrata deve obrigatoriamente implementar os métodos abstratos da superclasse, caso contrário, um erro de compilação é gerado.  Uma classe que tenha um ou mais métodos abstratos deve ser obrigatoriamente definida como abstrata, caso contrário um erro de compilação é gerado.Polimorfismo ©2012 Ludimila Monjardim Casagrande 21
  • 22. Regras sobre Classes Abstratas  Uma classe abstrata pode conter métodos não abstratos, isto é, métodos com implementação.  Se esses métodos não abstratos não forem definidos (sobrepostos) nas subclasses, então, quando um objeto da subclasse realizar a chamada a um desses métodos, o código contido na classe abstrata será executado (devido à herança).Polimorfismo ©2012 Ludimila Monjardim Casagrande 22
  • 23. Exemplo public abstract class Figura { public abstract double calcularArea( ); public void imprimeArea( ) { System.out.println(calcularArea( )); } } public class Principal { public static void main(String[] args) { Quadrado q = new Quadrado(4); Circulo c = new Circulo(2); System.out.print("Área da Figura 1 é: "); q.imprimeArea( ); System.out.print("Área da Figura 2 é: "); c.imprimeArea( ); } }Polimorfismo ©2012 Ludimila Monjardim Casagrande 23
  • 24. Bibliografia Sugerida  Java: Como programar Autores: H. M. Deitel e P. J. Deitel Editora: Pearson – 6a Edição  Complete Java 2 Certification Study Guide SybexPolimorfismo ©2012 Ludimila Monjardim Casagrande 24