·

Cursos Gerais ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

POLIMORFISMO E SOBRECARGA EM JAVA Definições 1 Polimorfismo é a habilidade pela qual uma única operação ou nome de atributo pode ser definido em mais de uma classe e assumir implementações diferentes em cada uma dessas classes é a propriedade por meio da qual um atributo ou variável pode apontar para ou manter o identificador de objetos de diferentes classes em horas diferentes PAGEJONES 2001 polimorfismo MUITAS FORMAS 1 Sobrecarga é Um tipo de polimorfismo Sobrecarga de um método Métodos com mesmo nome declarados na mesma classe mas que possuem diferentes conjuntos de parâmetros determinados pelo número tipos e ordem dos parâmetros ou seja assinaturas diferentes USO A sobrecarga é usada para métodos com o mesmo nome que realizam as mesmas tarefas ou tarefas semelhantes mas sobre tipos diferentes ou número diferente de argumentos NOTA O tipo de retorno pode ser diferente nos métodos mas essa diferença não é suficiente para se ter sobrecarga A diferença deve ser nos parâmetros 2 3 Polimorfismo necessita de um sistema com hierarquia de classes com uso de Herança É uma forma de reutilização de software na qual uma nova classe é criada absorvendo membros de uma classe existente e aprimorada com capacidades novas ou modificadas DEITEL E DEITEL 2005 Considere o exemplo Suponha um programa de simulação de movimento de vários tipos de animais para um estudo biológico classe Pássaro classe Anfíbio classe Peixe Em notação UML Unified Modeling Language 4 CHAVE DO POLIMORFISMO A mesma mensagem moverxy enviada a objetos diferentes têm várias formas VANTAGEM DO POLIMORFISMO Facilidade de inclusão de novas classes Exemplo Inclusão da classe Tartaruga 5 Não há alteração nas demais classes existentes OUTROS EXEMPLOS DE POLIMORFISMO Quadrilátero area perimetro Retângulo area perimetro Quadrado area perimetro Paralelogramo area perimetro Num game ObjetoEspacial desenhar Marciano desenhar Plutoniano desenhar NaveEspacial desenhar CanhaoDeLaser desenhar Polimorfismo 8 O polimorfismo ocorre quando um programa invoca um método por meio de uma variável da superclasse em tempo de execução a versão correta da subclasse do método é chamada com base no tipo da referência armazenada na variável de superclasse O polimorfismo utiliza o mesmo nome de método e mesma assinatura do método a quantidade e tipos de argumentos e o tipo do valor resultante Isso é condição necessária para a chamada do método polimórfico por meio do objeto da variável da superclasse EXEMPLO COMPLETO COM CÓDIGO JAVA Suponha o Diagrama de Classe 9 10 Polígono é uma classe abstrata incompleta e por isso não instancia objeto public abstract class Poligono private double area public abstract double calcularArea método abstrato não possui implementação Classe concreta instancia objetosdeve definir todos os métodos public class Quadrado extends Poligono private double lado public Quadradodouble lado thislado lado public double calcularArea return ladolado public class Retangulo extends Poligono private double base private double altura public Retangulodouble base double altura thisbase base thisaltura altura public double calcularArea return basealtura 11 public class Triangulo extends Poligono private double base private double altura public Triangulodouble base double altura thisbase base thisaltura altura public double calcularArea return basealtura2 12 PROGRAMA APLICATIVO import javautilScanner public class Aplicacao public static void mainString args int opcao Scanner input new ScannerSystemin double area Poligono p Poligono q new Quadrado2 Poligono r new Retangulo35 Poligono t new Triangulo74 SystemoutprintlnCÁLCULO DA ÁREA Systemoutprintln1 QUADRADO Systemoutprintln2 RETANGULO Systemoutprintln3 TRIANGULO Systemoutprint Escolha a opção opcao inputnextInt 13 O objeto é do tipo da superclasse mas a instância é do tipo subclasse p null switch opcao case 1 p q break case 2 p r break case 3 p t break defaultSystemoutprintlnOpção inválida area pcalcularArea SystemoutprintlnAREA area Systemexit0 14 chamada polimórfica Saídas O usuário escolhe a opção 1 UPCASTING É quando um objeto da superclasse recebe a referência de um objeto da subclasse Essa atribuição é possível porque um objeto da subclasse é um objeto da superclasse Ou seja um objeto Quadrado Retangulo ou Triangulo é um Polígono O usuário escolhe a opção 2 15 O usuário escolhe a opção 3 Somente em TEMPO DE EXECUÇÃO o tipo real do objeto será definido e a partir deste tipo será definido qual dos métodos calcularArea será executado Atividade Suponha um banco fictício que tenha dois tipos de contas poupança e conta empresa Elaborar um programa com elaboração de classes e reuso A poupança tem uma taxa de juros para atualização do valor investido A conta empresa tem um limite de empréstimo No slide seguinte apresentamos um esboço dos diagramas UML da solução 16 17 Conta numero inteiro titular string saldo real Conta Contanumero titular saldo setTitulart getTitular setSaldos getSaldo saquex depositox imprime ContaPoupanca taxaJuros real atualizaSaldo imprime ContaEmpresa limteEmprestimo real emprestimox imprime Pedese aElaborar as classe Conta ContaPoupanca e ContaEmpresa bFazer uma aplicação programa que leia os dados de uma conta de cada tipo e exiba os dados da conta 18 SystemoutprintlnLendo os dados do teclado SystemoutprintNumero numero scannernextInt scannernextLine Desprezar o ENTER digitado no final da leitura anterior Deve ser feito sempre antes da leitura de um valor String Método next Permite digitação apenas de uma palavra Método nextLine Permite digitação de uma frase e finalização somente após o pressionamento do ENTER SystemoutprintNome nome scannernextLine SystemoutprintSaldo inicial saldo scannernextDouble Dica para leitura para ler um nome composto utilize o método nextLine da classe Scanner ao invés de next que termina a entrada de dados ao encontrar um espaço em branco ou o enter Ao ler valores de tipos diferentes em sequencia é preciso inserir uma leitura extra para desprezar o ENTER antes da leitura de um valor String