Existem dois conceitos principais em confusão: ligação e carregamento. Ela é confundida pelo conceito de DataBinding, que está em algum lugar no meio, geralmente fazendo as duas coisas. Depois de considerá-lo, adicionarei mais um conceito, para completar o trecho, despacho.
Tipos
Late Binding : o tipo é desconhecido até que a variável seja exercida durante o tempo de execução; geralmente através de atribuição, mas existem outros meios para coagir um tipo; linguagens tipificadas dinamicamente chamam isso de uma característica subjacente, mas muitas linguagens com tipagem estática possuem algum método para obter ligação tardia
Implementado frequentemente usando tipos dinâmicos [especiais], introspecção / reflexão, sinalizadores e opções de compilador, ou através de métodos virtuais, emprestando e estendendo o despacho dinâmico
Early Binding : o tipo é conhecido antes da variável ser exercida durante o tempo de execução, geralmente através de meios declarativos estáticos
Implementado frequentemente usando tipos primitivos padrão
Funções
Despacho Estático : função conhecida, específica ou sub-rotina em tempo de compilação; não é ambíguo e corresponde à assinatura
Implementado como funções estáticas; nenhum método pode ter a mesma assinatura
Despacho Dinâmico : não é uma função específica ou sub-rotina em tempo de compilação; determinado pelo contexto durante a execução. Existem duas abordagens diferentes para "despacho dinâmico", distinguidas por quais informações contextuais são usadas para selecionar a implementação da função apropriada.
Em único [ dinâmico ] envio , somente o tipo da instância é usado para determinar a implementação da função apropriada. Em linguagens com tipagem estática, o que isso significa na prática é que o tipo de instância decide qual implementação de método é usada, independentemente do tipo de referência indicado quando a variável é declarada / atribuída. Como apenas um único tipo - o tipo da instância do objeto - é usado para inferir a implementação apropriada, essa abordagem é chamada de "despacho único".
Há também várias [ dynamic ] expedição , onde os tipos de parâmetros de entrada também ajudam a determinar qual implementação de função chamar. Como vários tipos - o tipo da instância e o (s) tipo (s) do (s) parâmetro (s) influenciam a implementação do método selecionado, essa abordagem é apelidada de "multiple dispatch".
Implementado como funções virtuais ou abstratas; outras pistas incluem métodos substituídos, ocultos ou sombreados.
NB: Se a sobrecarga de método envolve ou não o despacho dinâmico é específico do idioma. Por exemplo, em Java, os métodos sobrecarregados são despachados estaticamente .
Valores
Lazy Loading : estratégia de inicialização de objetos que adia a atribuição de valor até que seja necessária ; permite que um objeto esteja em um estado essencialmente válido, mas intencionalmente incompleto e aguarde até que os dados sejam necessários antes de carregá-lo; frequentemente considerado particularmente útil para carregar grandes conjuntos de dados ou aguardar recursos externos
Implementado muitas vezes intencionalmente não carregando uma coleção ou lista em um objeto composto durante as chamadas de construtor ou de inicialização até que algum chamador downstream peça para ver o conteúdo dessa coleção (por exemplo, get_value_at, get_all_as, etc). As variações incluem o carregamento de meta informações sobre a coleção (como tamanho ou chaves), mas omitindo os dados reais; também fornece um mecanismo para alguns tempos de execução para fornecer aos desenvolvedores um esquema de implementação de singleton razoavelmente seguro e eficiente
Eager Loading : estratégia de inicialização de objetos que executa imediatamente todas as atribuições de valor para que todos os dados precisem ser concluídos antes de considerar-se em um estado válido.
Implementado com frequência fornecendo um objeto composto com todos os dados conhecidos o mais rápido possível, como durante uma chamada ou inicialização do construtor
Ligação de dados : envolve frequentemente a criação de um link ativo ou mapa entre dois fluxos de informação compatíveis para que as alterações em um sejam refletidas de volta no outro e vice-versa; para ser compatível, eles geralmente precisam ter um tipo de base comum, ou interface
Implementado frequentemente como uma tentativa de fornecer uma sincronização mais clara e consistente entre diferentes aspectos do aplicativo (por exemplo, modelo de exibição para visualização, modelo para controlador, etc.) e fala sobre conceitos como origem e destino, endpoints, bind / unbind, update, e eventos como on_bind, on_property_change, on_explicit, on_out_of_scope
EDIT NOTE: Última edição importante para fornecer uma descrição de exemplos de como isso ocorre com frequência. Exemplos de códigos específicos dependem inteiramente da implementação / tempo de execução / plataforma