Diferença entre ligação estática e ligação dinâmica

Diferença de chave - estática Vinculação vs Vinculação dinâmica
 

Linguagens de programação como Java e C # suportam Programação Orientada a Objetos (OOP). Permite construir software usando objetos. Existem muitos objetos em um sistema de software ou programa. Esses objetos têm atributos e métodos. Atributos descrevem as características. Os métodos descrevem as ações que podem ser executadas pelo objeto. Os dados são passados ​​por objetos usando métodos. Os valores necessários são enviados através de chamadas de método com parâmetros. A implementação real do método está na definição do método. Existe um link entre uma chamada de método e a definição de método. É conhecido como ligação. Existem dois tipos de ligações. Eles são ligação estática e ligação dinâmica. o diferença chave entre ligação estática e ligação dinâmica é que, na ligação estática, a ligação é resolvida no tempo de compilação, enquanto a ligação dinâmica é resolvida no tempo de execução, que é o tempo real de execução. Este artigo discute a diferença entre esses dois mecanismos de ligação.

CONTEÚDO

1. Visão geral e principais diferenças
2. O que é ligação estática
3. O que é ligação dinâmica
4. Semelhanças entre ligação estática e ligação dinâmica
5. Comparação lado a lado - ligação estática versus ligação dinâmica em forma de tabela
6. Resumo

O que é ligação estática?

Ligação é o link entre uma chamada de método e definições de método.

Figura 01: Ligação estática e ligação dinâmica

Consulte o programa abaixo escrito em Java.

classe pública A

public void method1 ()

System.out.println ("Método1");

public void method2 ()

System.out.println ("Método2");

public static void main (String [] args)

A obj = novo A ();

obj.method1 ();

obj.method2 ();

De acordo com o programa acima, um objeto do tipo A é criado. Então method1 e method2 são chamados. A identificação de qual método deve ser chamado de execução é conhecida como ligação. A instrução obj.method1 () chamará method1 () e obj.method2 () chamará method2 (). Este link é obrigatório.

Na ligação estática, a ligação é resolvida no tempo de compilação pelo compilador. Também é conhecido como ligação antecipada. A ligação acontece antes que um programa realmente seja executado. A ligação estática ocorre na sobrecarga do método. Consulte o programa abaixo escrito em Java.

Cálculo de void público

soma do vazio público (int x, int y)

System.out.println ("Soma é", x + y);

soma do vazio público (duplo x, duplo y)

System.out.println ("Soma é", x + y);

public static void main (String [] args)

Cálculo cal = novo cálculo ();

cal.sum (2,3);

cal.sum (5.1, 6.4);

De acordo com o programa acima, ao passar os dois números inteiros, o método com dois números inteiros será chamado. Ao passar dois valores duplos, o método correspondente a dois valores duplos será chamado. Esse processo de ligação ocorre no momento da compilação. O compilador sabe que deve chamar o método sum com dois valores inteiros para cal.sum (2,3). Para cal (5.1,6.4), ele chamará o método soma com dois valores duplos. Todas as informações necessárias são conhecidas antes do tempo de execução, aumentando a eficiência do programa e a velocidade de execução.

O que é ligação dinâmica?

Na ligação dinâmica, o compilador não resolve a ligação no tempo de compilação. A ligação ocorre no tempo de execução. Também é conhecido como ligação tardia. Ligação dinâmica ocorre na substituição do método. Consulte o programa escrito em Java.

classe pública Shape ()

sorteio público vazio ()

System.out.println ("Draw shape");

classe pública Circle () estende Shape

sorteio público vazio ()

System.out.println ("Desenhar círculo");

classe pública Triangle () estende Shape

sorteio público vazio ()

System.out.println ("Desenhar triângulo");

Teste de classe pública

public static void main (String [] args)

Forma s;

s = nova Shape ();

s.draw ();

s = novo círculo ();

s.draw ();

s = novo triângulo ();

s.draw ();

De acordo com o programa acima, a classe Shape possui um método draw (). Class Circle e class Triangle estendem a classe Shape. O círculo de classe e o triângulo de classe podem herdar os atributos e métodos da classe Shape. Portanto, a classe Shape é a super classe ou classe pai. Class Circle e Class Triangle são subclasses ou classes derivadas. Essas classes também possuem o método draw () com suas próprias implementações. Portanto, o método draw () na superclasse é substituído.

No método principal, objetos diferentes são chamados. Há uma variável de referência do tipo Shape, que é s. Então, s invoca o método de acordo com a classe específica. Em tempo de compilação, o compilador fará referência apenas ao método de empate de superclasse. Quando a execução real começa, isso leva à execução de diferentes métodos de desenho. Primeiro, s estará apontando para o objeto do tipo Shape. Portanto, ele chamará o método draw na classe Shape. Então, os s apontarão o objeto do tipo Circle e chamarão o método draw da classe Circle. Finalmente, s estará se referindo ao objeto do tipo Triangle e invocará o método draw na classe Triangle. Mesmo que a variável de referência seja do tipo Shape, a ligação depende do tipo de objeto. Esse conceito é conhecido como ligação dinâmica. As informações são fornecidas em tempo de execução, portanto, a velocidade de execução é mais lenta em comparação com a ligação estática.

Qual é a semelhança entre ligação estática e ligação dinâmica?

  • Ambos estão relacionados a um polimorfismo que permite que um objeto se comporte de várias maneiras.

Qual é a diferença entre ligação estática e ligação dinâmica?

Ligação estática vs Ligação dinâmica

Ligação estática é o tipo de ligação que coleta todas as informações necessárias para chamar uma função durante o tempo de compilação. Ligação dinâmica é o tipo de ligação que coleta todas as informações necessárias para chamar uma função durante o tempo de execução.
 Tempo de ligação
Ligação estática ocorre em tempo de compilação. A ligação dinâmica ocorre no tempo de execução.
Funcionalidade
Ligação estática usa informações de tipo para ligação. A ligação dinâmica usa objetos para resolver a ligação.
 Objeto real
A ligação estática não usa um objeto real para ligação. Ligação dinâmica, use o objeto real para ligação.
Sinônimos
A ligação estática também é conhecida como ligação antecipada. A ligação dinâmica também é conhecida como ligação tardia.
Execução
A velocidade de execução é rápida na ligação estática. A velocidade de execução é baixa na ligação dinâmica.
Exemplo
A ligação estática é usada na sobrecarga do método. A ligação dinâmica é usada na substituição de método.

Resumo - Estático Vinculação vs Vinculação dinâmica 

Existe um link entre uma chamada de método e a definição de método. É conhecido como ligação. Existem dois tipos de ligações denominadas ligação estática e ligação dinâmica. A diferença entre ligação estática e ligação dinâmica é que, na ligação estática, a ligação é resolvida no tempo de compilação, enquanto a ligação dinâmica é resolvida no tempo de execução, que é o tempo real de execução. Como as informações necessárias são fornecidas antes do tempo de execução, a ligação estática é rápida na execução em comparação com a ligação dinâmica.

Faça o download do PDF de ligação estática vs ligação dinâmica

Você pode fazer o download da versão em PDF deste artigo e usá-la para fins offline, conforme nota de citação. Faça o download da versão em PDF aqui: Diferença entre ligação estática e ligação dinâmica

Referência:

1.Java Interview 04 - Static Binding Vs Dynamic Binding, Mahika Tutorials, 27 de dezembro de 2017. Disponível aqui