Programação Java (nível intermediário) 4 Polimorfismo
Introdução Uma linguagem orientada a objetos nos permite definir novos tipos para variáveis Nós definimos um novo tipo através de uma classe Este tipo tem encapsulado no seu interior um conjunto de características chamadas de atributos da classe
Introdução Sobre os atributos de uma classe é possível realizar um conjunto de operações chamadas de métodos Métodos Atributos
Introdução Quando eu crio uma variável do tipo de uma classe eu estou criando uma instância daquela classe É o mesmo que dizer que eu criei um objeto do tipo daquela classe Como o próprio nome diz, a classe classifica um conjunto de objetos com propriedades Ex: a classe das pessoas, que possui as propriedade: peso, altura, idade
Introdução CLASSE Pessoa ATRIBUTOS peso: Real; altura: Real; idade: Inteiro; METODOS andar(passos:inteiro): vazio falar(frase:string):vazio pular(metros:real):vazio Fim_Classe_Pessoa
Introdução Através da classe Pessoa é possível definir todas as pessoas do mundo
Revisão - Herança Em orientação a objetos esse conceito define a habilidade uma nova classe adquirir as propriedade de uma classe que já existia Desde modo, a nova classe herda os atributos e métodos da classe ancestral Por exemplo, sendo o aluno uma pessoa, nós podemos determinar que uma nova classe chamada aluno, que herda de Pessoa todas as suas propriedades
Revisão - Herança Ex 2: Pessoa + nome: String + matricula: int + idade: int + altura: float Aluno + nome: String + matricula: String + nota1: float + nota2: float Professor + nome: String + matricula: String + turmas: int + Aluno( ): + Professor( ):
Polimorfismo Formalmente polimorfismo quer dizer várias formas. Em OO, denota uma situação na qual um objeto pode se comportar de maneiras diferentes ao receber uma mensagem O poliformismo é alcançado com auxílio do uso de herança nas classes e a reescrita (overriding) de métodos das superclasses nas suas subclasses
Polimorfismo Superclasse define uma classe pai (ancestral), uma classe de quem se herda Já subclasse define o conjunto de classes que herdam de uma superclasse Duas subclasses de uma mesma classe podem ter implementações completamente diferentes de um mesmo método, daí surge o polimorfismo
Polimorfismo Exemplo 3: Podemos imaginar um programa que faça a impressão de um relatório, por meio de uma classe chamada Impressora Uma impressora a laser tem um mecanismo de impressão totalmente diferente de uma impressora a jato de tinta, mas isso não importa para o programa Ele manda uma simples mensagem de imprimir para a impressora, e o modo como a impressora imprime no papel varia de acordo com o tipo de impressora usada
Polimorfismo Diagrama de classes Relatório Impressora + atr1: String + atr2: int Laser + nome: String Jato de Tinta + Aluno( ): + Professor( ):
Polimorfismo por Overriding O overriding (sobreposição) ocorre quando um método de uma superclasse é sobrescrito por um método de mesmo nome de uma subclasse O método na subclasse tem o mesmo nome, assinatura e parâmetros Na compilação, o método da subclasse irá sobrepor o método da superclasse
Polimorfismo por Overriding Exemplo:
Polimorfismo por Overloading O overloading (sobrecarregamento) ocorre quando mais de um método com o mesmo nome é implementado Overloading pode se dar apenas pela diferenciação dos argumentos do método Durante a compilação, o Java irá determinar qual dos métodos será chamado Isso depende do escopo de sua chamada
Polimorfismo por Overloading Exemplo:
Palavras de Polimorfismo A palavra this permite separar explicitamente atributos de parâmetros de um método Mas ela também permite separar métodos sobrecarregados dos não sobrecarregados Quando aplicamos this a um método explicitamente definimos que o método chamado é o da subclasse
Palavras de Polimorfismo Ex: class Pessoa{ String nome; int passos; int idade; public int andar(){ passos =10; } }
Palavras de Polimorfismo Ex: class Aluno{ String nome; int passos; int idade; public int andar(){ passos =20; return passos } public static void main(string args[ ]){ this.andar(); } }
Palavras de Polimorfismo No caminho contrario, a palavra super ao ser aplicada a um metodo define que o metodo chamado é o da superclasse Ex: public static void main(string args[ ]){ } super.andar();