O que é a ligação dinâmica?
Na ciência da computação, a ligação de nomes é a associação de um identificador, como uma função ou nome de variável, para uma seção de código ou dados. No cenário mais comum, na ligação estática, esse mapeamento é conhecido no momento da compilação. Na ligação dinâmica, o objeto mapeado por uma função não é conhecido no tempo de compilação e pode ser determinado apenas durante o tempo de execução do programa. Por esse motivo, a ligação dinâmica também é chamada de ligação tardia. Embora a ligação dinâmica ofereça flexibilidade não disponível com a ligação estática, ela também implica mais custos de desempenho do que a ligação estática.
A ligação dinâmica está intimamente relacionada ao polimorfismo, o que faz parte da programação orientada a objetos. O polimorfismo permite que o mesmo nome do método seja implementado de maneiras diferentes. Se o código não for escrito de tal maneira que o método preciso não possa ser determinado no momento da compilação, a ligação dinâmica deve ser usada.
Por exemplo, um cla "forma"A SS pode ter um método chamado "getarea", porque toda forma tem uma área. Uma subclasse "círculo" de "Shape", no entanto, implementaria "Getarea" de maneira diferente da maneira como uma subclasse "quadrada". Portanto, se um novo objeto for criado do tipo "forma" e se o código chamar o método de "getarea" nessa forma, o compilador não terá como saber se a forma acabará sendo um círculo ou um quadrado e, portanto, não saberá qual método Getarea lança. Este é um exemplo de ligação dinâmica, porque o método Getarea correto será mapeado apenas no tempo de execução, depois que o programa sabe que tipo de forma é o objeto.
A ligação dinâmica permite a flexibilidade do uso de métodos abstratos sem saber qual implementação específica será usada. No exemplo de "forma", o código pode ser gravado para evitar a ligação dinâmica, usando explicitamente essa lógica: se a forma for um círculo, chame o método getarea do círculo; caso contrário, se a forma for um quadrado, chame o método Getarea específico paraquadrados. O benefício da ligação dinâmica é que o código é mais limpo e mais sustentável que a alternativa. No exemplo de ligação estática, há duplicação de código e o código deve ser atualizado sempre que um novo tipo de forma é adicionado.
As desvantagens da ligação dinâmica são desempenho e segurança. Na ligação estática, o compilador sabe exatamente qual código chamar e pode otimizar o código para executar com mais eficiência. O tipo de segurança pode ser um problema porque, em algumas implementações de ligação dinâmica, um método pode ser chamado a um objeto que não suporta o método. Por exemplo, o método "getarea" pode ser chamado a um objeto que não é uma forma e, portanto, não possui o método "getarea", o que pode resultar em um erro de tempo de execução. A ligação estática impediria esse cenário levantando um erro de compilação.