Sobes.tech
Middle

O que é polimorfismo na programação orientada a objetos (POO)?

sobes.tech IA

Resposta da IA

O polimorfismo na programação orientada a objetos (POO) é a propriedade dos objetos de se comportarem de forma diferente dependendo do seu tipo, permitindo usar a mesma interface (método) para lidar com diferentes tipos de dados. Isto proporciona flexibilidade e escalabilidade no código.

Principais tipos de polimorfismo:

  1. Polimorfismo em tempo de compilação (estático): Realizado através da sobrecarga de métodos. Métodos diferentes têm o mesmo nome, mas diferem no conjunto e/ou tipos de parâmetros. O compilador determina qual método chamar com base na assinatura.

    class Calculator {
        // Sobrecarga do método add
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  2. Polimorfismo em tempo de execução (dinâmico): Realizado através da sobrescrita de métodos. A subclasse fornece sua própria implementação específica do método, que já está definido na superclasse. A escolha da implementação concreta ocorre em tempo de execução, com base no tipo real do objeto.

    class Animal {
        // Método base
        public void sound() {
            System.out.println("O animal faz um som");
        }
    }
    
    class Dog extends Animal {
        // Sobrescrita do método sound
        @Override
        public void sound() {
            System.out.println("O cão late");
        }
    }
    
    // Exemplo de uso
    // Animal myDog = new Dog(); // Tipo real do objeto - Dog
    // myDog.sound(); // Chama o método sound da classe Dog
    

O polimorfismo permite escrever código mais abstrato e que descreve claramente o domínio do problema, facilitando a manutenção e a adição de novas funcionalidades sem alterar o código existente. No contexto de QA e QA Automation, compreender o polimorfismo é importante para trabalhar com frameworks de automação, onde são usadas classes/interfaces abstratas e suas implementações concretas (por exemplo, ao trabalhar com controladores para diferentes navegadores no Selenium).