Escolar Documentos
Profissional Documentos
Cultura Documentos
Manoel Afonso Pereira de Lima Filho 10088000901 POO UFPa Novembro 2011
Tpicos
Introduo Exemplo de polimorfismo Herana Classes abstratas Referncias polimrficas Contrato Interface Consideraes finais
Introduo
A herana s o comeo do polimorfismo. O polimorfismo fornecer mais flexibilidade, clareza e facilidade de manuteno do cdigo. O principal personagem a interface. Permite a programao no geral.
Instanciando um objeto
1- Especifique o tipo:
Cao
2- D um nome a varivel:
Cao fido
Exemplo de Polimorfismo
Suponha que as classes Cao, Gato e Passaro estendem a classe Animal. Suponha que Animal tenha um mtodo chamado barulho(). O polimorfismo ocorre quando o programa invoca um mtodo por uma varivel da superclasse e a verso correta da subclasse chamada. Assim, cada animal emitir o seu som peculiar.
Herana
Um dos benefcios da herana que podemos evitar cdigos duplicados os agrupando em uma nica classe. Podemos sobrescrever os mtodos que devem ser mais especficos.
rvore de herana
rvore de herana
permitido: Gato meuGato = new Gato(); Animal meuCao = new Cao(); Faz sentido instanciar um animal? Animal anim = new Animal();
rvore de herana
Como Animal no especfica o suficiente, ela no deve ser instanciada. Assim, basta torn-la abstrata: abstract class Animal { }
Classes abstratas
No possvel instanci-las, um erro de compilao. Exemplo: Math m = new Math(); //Errado Podemos instanciar apenas as suas classes concretas.
Classes abstratas
Definem apenas parte da implementao. Mtodos tambm podem ser abstratos: public abstract void mover(); Se uma classe possuir algum mtodo abstrato, ela dever ser abstrata tambm.
No faz sentido uma classe abstrata possuir todos os mtodos implementados porque esse cdigo genrico no ser til para as subclasses. Abstract apenas define o modelo do objeto.
Poderemos, ento, usar um tipo da superclasse como argumento, tipo de retorno ou tipo de matriz de um mtodo. Ser fcil criar novos subtipos sem ter que reescrever ou adicionar novos mtodos para lidar com esses novos tipos. Protocolo de um mtodo abstrato: Todos os subtipos desse tipo tm ESSE mtodo.
Classes abstratas
Lembre-se que um mtodo abstrato no tem corpo. Voc dever dar um na primeira subclasse concreta. Por exemplo, a classe concreta Passaro deve implementar todos os mtodos abstratos de Animal.
Referncias polimrficas
Ocorre quando uma superclasse aponta para um dos seus subtipos. Object pets[] = new Object[3]; pets[0] = new Cao(); pets[1] = new Gato(); pets[2] = new Passaro(); Vantagem: Um mesmo array armazena vrios tipos. Desvantagem: quais mtodos pets[1] tem?
Referncias polimrficas
Referncias polimrficas
Para usarmos os mtodos especficos, temos que converter o objeto para o seu tipo mais especfico. Assim: Gato gt = (Gato) pets[1]; nos dar uma referncia ao gato que est dentro do objeto.
Referncias polimrficas
Referncias polimrficas
Se fizermos Gato gt = (Gato) pets[0]; teremos uma referncia a um Gato? No! Pois pets[0] foi instanciado como um Cao. Isso ir gerar em tempo de execuo uma exceo ClassCastException.
Referncias polimrficas
Contrato
As classes Cao, Gato e Passaro so subclasses de Object. A classe Object no define nenhum contrato com as nossas classes. Por isso temos que saber de antemo quem quem antes de fazer a converso.
Interface
A interface ir definir o contrato entre as classes, isto , o comportamento mnimo que elas possuem. Interfaces so classes 100% abstratas.
Interface
A interface Animal:
Interface
Interface
Interface
Interface
Interface
Interface
Outro exemplo:
Interface
Interface
Interfaces so usadas para adicionar funcionalidades a uma classe. Assim, qualquer classe pode usar um interface, independentemente de sua rvore de herana.
Concluso
Classes abstratas fornecem reuso de cdigo, mas so genricas demais para serem instanciadas. Interfaces so classes 100% abstratas e criam o contrato com todos os seus subtipos. As interfaces fornecem uma ampla flexibilidade para uso em tipos de retorno, parmetro ou de matriz.