Programação Orientada à Objetos Aula 11 – Polimorfismo Polimorfismo ♦ Origem da palavra? O termo polimorfismo é originário do grego e significa “muitas formas”. Poli = muitas Morphos = formas Polimorfismo – O que é? ♦ A POO diz que Polimorfismo nada mais é que uma referência de uma classe abstrata a uma classe concreta, também é a capacidade de um operador executar a ação operada dependendo do tipo do operando. ♦ Em outras palavras, várias formas de fazer várias coisas. Polimorfismo – O que é? Polimorfismo – O que é? Polimorfismo – O que é? Polimorfismo Conceito chave de polimorfismo: ◦ Cada objeto sabe fazer a coisa certa em resposta à mesma chamada de método! Vantagens do Polimorfismo Projeto e implementação de sistemas que são facilmente extensíveis ◦ Novas classes podem ser adicionadas a partes gerais do programa com pouca ou nenhuma modificação ◦ Através da utilização do Polimorfismo é possível trazer clareza ao código, diminuir linhas do mesmo e ainda é possível inserir aplicações flexíveis. O que é necessário alterar no programa quando uma nova classe é gerada? Vantagens do Polimorfismo Resposta: ◦ As partes do programa que exige conhecimento direto das novas classes adicionadas Mais de Polimorfismo Para utilizar polimorfismo, os objetos devem executar as mesmas ações (métodos), mesmo que com comportamento diferente Mais de Polimorfismo OO oferece uma capacidade que exige que classes não relacionadas implementem um conjunto de métodos comuns? Em outras palavras: ◦ Há como forçar que a implementação de uma ação comum a classes de objetos diferentes sejam implementadas nessas classes? ◦ Ex: mover para Macaco, Pássaro e Peixe 12 Formas de Polimorfismos Sobrescrita (overriding): mesma função mas comportamentos diferentes. Sobrecarga(overloading): nome de uma função usado mais de uma vez com diferentes tipos de parâmetros.Ex: operação soma com dois parâmetros reais e outra com parâmetros inteiros. 13 Sobrescrita (overriding) Recurso da linguagem onde uma impleemntação específica é provida pela subclasse de algum método já provido pela superclasse. A implementação da subclasse substitui a implementação da classe pai. Métodos sobrescritos DEVEM possuir a mesma assinatura (tipo de retorno, nome do método, tipos e quantidade de parâmetros). 14 Sobrescrita (overriding) 15 Sobrescritas de função Capacidade de um objeto responder com diferentes comportamentos uma mesma solicitação Exemplo: Suponha um método que receba um objeto ContaEmBanco e que neste método seja solicitado a ativação do método Sacar. O comportamento do objeto vai ser diferente em função do objeto real: 1 - ContaEspecial permite que o saldo fique negativo 2 - ContaComum não O comportamento do objeto será relativo ao objeto real a qual é feita a referência 16 Sobrecarga(overloading) Em orientação a objetos, uma sobrecarga refere-se aos métodos de uma classe, sendo que os mesmos podem ser sobrecarregados em relação aos seus nomes, podendo diversos métodos possuir o mesmo nome, porém a os tipos de dados da lista de parâmetros deve ser divergente, conforme pode ser observado na Figura 3. 17 Sobrecarga(overloading) No exemplo presente na Figura 3, pode-se observar a repetição da declaração do método escreverNome(), porém nota-se também a diferenciação de seus parâmetros (ora sem parâmetros, ora um texto, ora um número). Esta situação deixa clara a existência de comportamentos diferentes para um único serviço. Esta diferenciação deve ser controlada na classe que implementa os métodos, podendo ainda o método invocado chamar outro método de mesmo nome (porém com lista de parâmetros diferente). 18 Sobrecarga de função Atribui a um único operador a capacidade de agir de diferentes formas em função dos parâmetros recebidos Exemplo: Na classe ContaEmBanco, o método Depositar possui duas implementações diferentes: 1 - uma para depósitos em dinheiro 2 - outra para depósitos em cheque O serviço escolhido depende do parâmetro enviado junto à ativação do serviço (cheque ou dinheiro) Sobrecarga de Construtores: • • Podemos definir mais de que um construtor seguindo as mesmas regras de sobrecarga de métodos. A partir do momento em que definimos um construtor diferente do default, o compilador não irá mais aceitar o construtor default. Resumo (Sobrecarga x Sobreposição) Sobrecarga Métodos com mesmo nome, mas assinaturas diferentes Não necessita herança Sobreposição (sobrescrita) Métodos com mesmo nome e assinatura Necessita de herança 21 Exercícios O que é polimorfismo em POO? Quais são seus benefícios? Qual a diferença entre herança e polimorfismo? Qual a diferença entre sobrecarga e sobrescrita? De exemplos práticos (reais) de aplicação de uma sobrecarga e de uma sobrescrita.