Polimorfismo em OOPS: O que é polimorfismo [Explicação detalhada]

Publicados: 2020-11-24

O polimorfismo em OOPs é inseparável e um conceito essencial de toda linguagem de programação orientada a objetos. Um objeto ou referência basicamente pode assumir várias formas em diferentes instâncias. Como a palavra sugere, 'poli' significa 'muitos' e 'morfo' aponta para 'formas'; assim, o polimorfismo como um todo significaria 'uma propriedade de ter muitas formas'.

A linguagem de programação orientada a objetos processa classes e objetos por uma única interface. Ele implementa os conceitos de sobrecarga de função, substituição e funções virtuais. Além disso, é normalmente usado para instrumentar a herança na programação.

Leia: Polimorfismo vs Herança

Índice

Um exemplo de polimorfismo em OOPs

Polimorfismo é o método em uma linguagem de programação orientada a objetos que executa coisas diferentes de acordo com a classe do objeto, que o chama. Com o polimorfismo, uma mensagem é enviada para vários objetos de classe e cada objeto responde adequadamente de acordo com as propriedades da classe.

A seguir está o código que explica o polimorfismo claramente:

usar avisos;
# Criando classe de pacote
pacote A;
# Criando Construtor
sub-novo
{
# shift levará o nome do pacote
# e atribua-o à variável 'class'
minha $classe = turno;
meu $eu = {
'nome' => deslocamento,
'roll_no' => shift
};
submétodo
{
print(“Isto pertence à classe A”);
}
};
pacote B;
# O array @ISA contém uma lista
# das classes pai dessa classe, se houver
meu @ISA = (A);

submétodo
{
print(“Isto pertence à classe B”);
}
pacote principal;
B->método();
A->método();

Saída:

Este pertence à classe B

Este pertence à classe A

Aprenda a criar aplicativos como Swiggy, Quora, IMDB e muito mais

Explicação

Para a primeira saída, o método() definido na classe B substitui a definição herdada da classe A e vice-versa para a segunda saída. Esta propriedade é útil para estender a funcionalidade de qualquer pacote pré-existente sem reescrever toda a definição da classe inteira. Assim, facilitando o trabalho do programador e o motivo de ser amplamente utilizado.

Tipos de polimorfismo em Oops

Na linguagem de Programação Orientada a Objetos (OOPS), existem dois tipos de polimorfismo conforme abaixo:

  1. Polimorfismo de ligação estática (ou tempo de compilação), por exemplo, sobrecarga de método
  2. Polimorfismo de ligação dinâmica (ou tempo de execução), por exemplo, substituição de método

Fonte

1. Tempo de compilação ou polimorfismo estático

Com a Sobrecarga de Método, o polimorfismo estático é obtido em linguagens de Programação Orientada a Objetos que permitem ao programador implementar vários métodos. Os nomes que eles usam podem ser os mesmos, mas seus parâmetros são diferentes. Certas condições são propícias para polimorfismo estático como abaixo:

  • Os tipos de todos os parâmetros devem ser diferentes.
  • A sequência dos Parâmetros pode ser diferente.
  • O número de parâmetros de um método deve diferir do outro método.

No polimorfismo de ligação estática , o tipo de correspondência e o número de argumentos invocam as funções sobrecarregadas.

  • Como todas essas informações estão disponíveis durante o tempo de compilação, o compilador seleciona a função apropriada.
  • A sobrecarga de função faz isso, e a sobrecarga de operador também é chamada de ligação estática ou ligação inicial.

Programa

classe A // classe base

{

int um;

público :

void display()

{

cout<< “Classe A” ;

}

};

classe B: public A // classe derivada

{

intb ;

público :

void display()

{

cout<< “Classe B” ;

}

};

No programa acima, o protótipo da função display() é o mesmo nas classes base e derivada. Portanto, a associação estática não pode ser aplicada aqui. Este programa funcionaria melhor em tempo de execução com uma seleção apropriada de funções.

  • Durante o tempo de execução, o compilador da linguagem identifica vários métodos identificando assinaturas desses métodos.
  • O compilador primeiro identifica a assinatura do método e decide o método para uma chamada de método específica durante a compilação do programa.
  • A execução do Polimorfismo em tempo de compilação é muito mais rápida, mas o processo não é tão flexível.

Leia também: Perguntas da entrevista OOPS

Tempo de execução ou polimorfismo dinâmico

No Polimorfismo Dinâmico, uma chamada para um único método substituído é resolvida durante o tempo de execução de um programa. A substituição de método é um dos exemplos proeminentes de polimorfismo de tempo de execução. Nesse processo, a substituição é feita por meio de ponteiros e funções virtuais.

  • Em Method Overriding, um único método é declarado em uma subclasse presente em uma classe pai. A classe filha ganha um método para implementação.
  • Durante o polimorfismo de tempo de execução, a classe oferece a especificação própria para outro método herdado. Essa transferência entre métodos é obtida sem modificar os códigos de objeto da classe pai.

Programa

#include <iostream>

usando o namespace std;

class Animal { // classe base

público :

cor da string = “Marrom” ;

};

class Dog: public Animal // herdando a classe Animal.

{

público :

cor da string = “Verde” ;

};

int main( void ) {

Animal d= Cão();

cout<<d.cor;

}

Saída:

Castanho

  • No polimorfismo de tempo de execução, o método do objeto é invocado em tempo de execução em vez de tempo de compilação.
  • Isso é possível pela substituição de método, que também é conhecida como vinculação dinâmica ou vinculação tardia.
  • O processo de polimorfismo dinâmico é comparativamente mais lento, mas flexível do que o polimorfismo em tempo de compilação.

Diferenças B/W Compile-Time e Polimorfismo em Tempo de Execução

Polimorfismo em tempo de compilação Polimorfismo em tempo de execução
Invocação de função A função é invocada em tempo de compilação. A função é invocada em tempo de execução.
Termos comuns É conhecido como sobrecarga, ligação inicial e ligação estática. É conhecido como substituição, vinculação tardia e vinculação dinâmica.
Nome do método e parâmetros Em Overloading, mais de um método tem o mesmo nome, mas com um número ou tipo de parâmetros diferente. Em Overriding, mais de um método tem o mesmo nome, número e tipo de parâmetros.
Operadoras Isso é alcançado com sobrecarga de função e operador. É conseguido com funções virtuais e ponteiros.
Tempo de execução Ele executa mais rápido que o polimorfismo em tempo de execução no tempo de compilação. Ele é executado mais lentamente do que o polimorfismo de tempo de compilação no tempo de execução.
Flexibilidade É menos flexível, pois tudo é executado em tempo de compilação. É mais flexível, pois tudo é executado em tempo de execução.

Palavras finais

O polimorfismo é o que deve aprender os conceitos de POO, pois oferece várias vantagens durante a programação. Com o Polimorfismo, o usuário pode remodelar as classes e códigos testados. É útil para estender a programação por si só. Ele também permite que o usuário armazene várias variáveis ​​de tipo diferente, como double, Float, Int ou Long em uma única variável para simplificar a pesquisa e a implementação.

Se você estiver interessado em aprender mais sobre OOPs, desenvolvimento de software full-stack, confira o PG Diploma in Full-stack Software Development da upGrad & IIIT-B, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, mais de 9 projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

Torne-se um Desenvolvedor Full Stack

UPGRAD E DIPLOMA PG DO IIIT-BANGALORE EM DESENVOLVIMENTO DE SOFTWARE
Saber mais