Vinculação (computação)

Origem: Wikipédia, a enciclopédia livre.

Em ciência da computação, vinculação (ou amarração, ou ligação) é a determinação de uma referência ou associação entre uma entidade de um programa (variáveis, rotinas e sentenças) e seus atributos.[1] Ou, em senso geral, uma vinculação é uma associação tais como entre um atributo e uma entidade ou entre uma operação e um símbolo.[2] Uma entidade de um programa consiste de atributos como localização, nome, valor e tipo. Chama-se a determinação de um destes atributos uma "vinculação".[3] A vinculação é um conceito central na definição de linguagens de programação. Linguagens de programação diferem quanto ao número de entidades que podem lidar, o número de atributos que podem ser vinculados a estas entidades, quanto ao tempo em que tais vinculações se dão e quanto a estabilidade destas vinculações.[1]

Tipos de vinculação[editar | editar código-fonte]

Os seguintes, são comumente referidos como vinculações.

Vinculação de nomes[editar | editar código-fonte]

O termo vinculação de nomes se refere a forma como símbolos (nomes de variáveis) são tratadas por compiladores ou interpretadores. Uma vinculação de nomes ocorre tipicamente em tempo de compilação no ponto em que a declaração é encontrada pelo compilador.[3]

Em linguagens de programação, a vinculação de nomes significa a referência de um identificador a um valor. Neste contexto, a vinculação é o ato de associar um nome ou um símbolo com um endereço de máquina, e essa associação pode ocorrer tanto em tempo de compilação, caso em que é chamado de 'ligação estática', ou pode ocorrer de forma dinâmica em tempo de execução, quando é chamado de 'ligação dinâmica'. Os termos de ligação e vinculação são utilizados indiferentemente em alguns contextos.

Vinculação de tipos[editar | editar código-fonte]

O projeto de uma linguagem determina se uma variável tem um tipo fixo. Uma vinculação de tipos é estática se ocorre antes do programa executar; e dinâmica se ocorre em tempo de execução. As linguagens Pascal, Cobol, Fortran, C, Modula-2 e Ada, entre outras, tem vinculação estática para tipos ao passo que Lisp, APL, SNOBOL 4, SETL2 e Smalltalk, entre outras, tem vinculação dinâmica para tipos.[4][1] Por exemplo, em SETL2, devido a a sua característica de vinculação dinâmica, um programa pode conter instruções como as que se seguem:

  i := { 1, 2, "tres", 4 }
  i := 7;

Vinculação de valores[editar | editar código-fonte]

A vinculação de um valor à uma variável, usualmente toma lugar em tempo de execução, e tipicamente ocorre diversas vezes durante esta.[5] Exemplos de instruções que podem alterar valores durante a execução são instruções de atribuição e leitura.[6]

Mesmo que a linguagem suporte inicialização de variáveis quando de suas declarações, a vinculação ainda é dinâmica, uma vez que estas podem ser alteradas durante o tempo de execução. Por exemplo, a seguinte declaração Ada inicializa a variável soma no momento de sua declaração:

  var soma: integer := 0;

Ver também[editar | editar código-fonte]

Tempo de vinculação[editar | editar código-fonte]

O momento em que ocorre uma vinculação é chamado de tempo de vinculação. Vinculações podem ocorrer em tempo de projeto da linguagem, tempo de implementação da linguagem, tempo de compilação, tempo de carga (loader), tempo de ligação (linker), ou tempo de execução.[2] Por exemplo, o asterísco (*) é usualmente vinculado à operação de multiplicação em tempo de projeto da linguagem. O tipo de dados integer em Fortran é vinculado a variáveis quando em tempo de compilação. Um programa consiste usualmente de vários subprogramas. O tradutor vincula tipicamente variáveis a endereços à memória necessária. Contudo, a memória deve ser alocada em endereços reais no momento de executar o programa. Esta alocação real ocorre durante o tempo de carga.[7] Quando um compilador ou interpretador para uma linguagem é escrito, ou seja, durante o tempo de implementação da linguagem, valores são vinculados a suas representações de máquina. Por exemplo, o valor real 2.7 é vinculado ao padrão IEEE 754 de representações para números de ponto flutuante, suportado pela maioria das linguagens modernas.[8]

Vinculações estáticas e dinâmicas[editar | editar código-fonte]

Uma vinculação é estática se ocorre antes do tempo de execução e nunca muda durante o tempo de vida do programa. Se a vinculação ocorre primeiramente durante o tempo de execução ou pode mudar durante o curso da execução do programa, a vinculação é dita dinâmica.[2][9]

Referências

  1. a b c GUEZZI, Carlo; JAZAYERI, Mehdi (1998). Programming Languages Concepts (em inglês) 3ª ed. New York: John Wiley & Sons. pp. 49–50. ISBN 0-471-10426-4 
  2. a b c Sebesta, Robert W. (2006). Concepts of Programming Languages (em inglês) 7ª ed. Boston: Addison Wesley. pp. 212–213. ISBN 0-321-33025-0 
  3. a b DERSHEM, Herbert L.; JIPPING, Michael J. (1995). Programming Languages. Structures and models (em inglês) 2 ed. Boston: PWS Publishing Company. pp. 53–54. ISBN 0-534-94740-9 
  4. Sethi, Ravi (1996). Programming Languages. Concepts & Constructs (em inglês) 2ª ed. Reading, Massachusetts: Addison-Wesley. pp. 136–137. ISBN 0-201-59065-4 
  5. Tucker, Jr., Allen B. (1986). Programming Languages (em inglês) 2ª ed. New York: McGraw-Hill. pp. 356–357. ISBN 0-07-065416-6 
  6. APPLEBY, Doris; VANDEKOPPLE, Julius J. (1997). Programming Languages. Paradigm and Practice (em inglês) 2ª ed. New York: McGraw-Hill. pp. 38–39. ISBN 0-07-005315-4 
  7. PRATT, Terrence W.; ZELKOWITZ, Marvin V. (2001). Programming Languages. Design and Implementation (em inglês) 4ª ed. Upper Saddle River, New Jersey: Prentice hall. 62 páginas. ISBN 0-13-027678-2 
  8. TUCKER, Allen; NOONAN, Robert (2002). Programming Languages. Principles and Paradigms (em inglês) 1ª ed. Boston: McGraw-Hill. pp. 12–13. ISBN 0-07-238111-6 
  9. FISCHER, Alice E.; GRODZINSKY, Frances (1993). The Anatomy of Programming Languages (em inglês). Englewood Cliffs, New Jersey: Prentice Hall. 168 páginas. ISBN 0-13-035155-5