segunda-feira, 23 de março de 2009

Vinculação

O conceito de vinculação : Vinculação em geral é uma associação , como exemplo entre um atributo e uma entrada ou entre uma operação e um símbolo . O momento em que uma vinculação desenvolve-se é chamado tempo de vinculação. As vinculações podem ocorrer no tempo de projeto da linguagem , no tempo de implementação , no tempo de compilação , no tempo de ligação , no tempo de carregamento ou no tempo de execução. Um exemplo de vinculação no tempo de projeto da linguagem seria o símbolo “*” normalmente vinculado a operaçãode multiplicação . Um tipo de dados como INTEGER no FORTRAN, é vinculado a uma variedade de valores possíveis no tempo de implementação da linguagem. No tempo de compilação uma variável em um programa C ou PASCAL e vinculada a um tipo particular de dados . Uma chamada a um subprograma de biblioteca é vinculada a código do subprograma no tempo de ligação . Uma variável pode ser vinculada a uma célula de armazenamento quando o programa é carregado para a memoria .
Essa mesma vinculação não acontece até o tempo de execução , em alguns casos , como acontece com variáveis em subprogramas PASCAL e em funções C (se a definição incluir o qualificador static). Considere a seguinte instrução de atribuição C, cuja a variável count foi definida da seguinte maneira:

int count ;
...
count = count + 5;

Algumas das vinculações e seus tempos de vinculação para as partes dessa instrução de atribuição são as seguintes :

Conjunto dos tipos possíveis para count: Vinculado no tempo de projeto
Tipo de count : Vinculado no tempo de compilação
Conjunto dos valores possíveis de count : Vinculado no tempo de projeto do compilador
Valor de count : vinculado no tempo de execução com essa instrução
Conjunto dos significados possíveis para o simbolo do operador + : vinculado no tempo de definição da linguagem
Significado do símbolo do operador + nessa instrução : vinculador no tempo de compilação
Representação interna do literal 5 : vinculada no tempo de projeto do compilador

Vinculação de Atributos a Variáveis

Uma vinculação é estatica se ocorrer antes do tempo de execução e permanecer inalterado ao longo da execução do programa .Se ela ocorrer durante a execução ou puder ser modificada no decorrer da execução de um programa , será chamada dinâmica.

A vinculação estática de Tipos

Antes de uma variável poder ser referenciada em um programa, ela deve ser vinculada a um tipo de dados. Os dois aspectos desta vinculação do tipo são: (1) a maneira como o tipo é especificado e (2) quando a vinculação ocorre. Os tipos podem ser especificados estaticamente por meio de uma declaração explícita ou implícita. Uma declaração explícita é uma instrução em um programa que lista nomes de variáveis e especifica que elas são de um tipo particular. Uma declaração implícita é uma forma de associar variáveis a tipos por convenções padrão ao invés de por instruções de
declaração. Neste último caso a ocorrência de um nome de variável em um programa
constitui a sua declaração implícita.
A maioria das linguagens de programação projetada desde o começo da década de 60
exige uma declaração explícita de todas as variáveis - exceções a esta regra são as
linguagens Perl e ML. Outras linguagens projetadas antes da década de 60, como o
FORTRAN, a PL/I e o BASIC, têm declarações implícitas. As declarações implícitas em algumas circunstâncias podem ser uma conveniência
para os programadores, entretanto trazem em geral um grande prejuízo para a legibilidade.
Isso porque elas impedem que o processo de compilação detecte diversos erros tipográficos
e do programador. Por exemplo, se alguma variável for deixada sem a declaração de tipo,
ela será vinculada a um tipo-padrão e a atributos iniciais, o que pode vir a causar erros sutis
de difícil detecção e diagnóstico.
Uma solução interessante para o uso de declarações implícitas é apresentada pela
linguagem Perl, em que qualquer nome que se inicie com o caractere $ é um escalar, que
pode armazenar uma cadeia de caracteres ou um valor numérico. Se o nome se iniciar com
@, ele será uma matriz e se se iniciar com %, será uma estrutura hash (técnica de pesquisa
em tabela). Neste caso, o leitor/programador sempre conhece o tipo de uma variável ao ler o
nome dela.

A vinculação dinâmica de Tipos
Em uma vinculação dinâmica de tipos, o tipo não é especificado por uma instrução
de declaração. Ao invés disso, a variável é vinculada ao tipo no momento em que lhe é
atribuída um valor em uma instrução de atribuição.
Quando a instrução de atribuição é executada, a variável que está sendo atribuída é
vinculada ao tipo do valor, da variável ou da expressão que está no lado direito da
atribuição.
As linguagens que possuem vinculações dinâmicas de tipos são muito diferentes das
que não possuem. A principal vantagem da vinculação dinâmica de variáveis a tipos é que
ela proporciona muita flexibilidade de programação.
Por exemplo, no caso de se estar programando uma rotina, função ou método para o
processamento de uma lista de dados em uma linguagem com vinculação dinâmica de tipos,
esta rotina ou método pode ser escrita(o) de forma genérica, permitindo que a(o) mesma(o)
seja capaz de lidar com dados de qualquer tipo.
As linguagens fortemente tipadas, como o C++ e o Java, não permitem esse tipo de
vinculação dinâmica de tipos.
Um exemplo de linguagem que permite a vinculação dinâmica de tipos é o
JavaScript. Nesta linguagem, pode-se escrever:
[1] LISTA = [10.2 5.1 0.0]
[...] ...
[n] LISTA = 72
A atribuição da linha [1] faz com que a variável LISTA se torne uma matriz
uni dimensional de elementos reais e de tamanho 3. Já na linha [n] a variável LISTA se torna
uma variável escalar inteira. Existem duas desvantagens na vinculação dinâmica de tipos. A primeira delas é
que a capacidade de detecção de erros por parte do compilador é diminuída em relação ao
compilador de uma linguagem que tenha vinculação de tipos estática. Um exemplo disso é
que os tipos incorretos – se houverem - do lado direito de uma atribuição não são detectados
como erros, e sim o tipo presumidamente correto do lado esquerdo é convertido
automaticamente para o tipo incorreto.
A segunda desvantagem da vinculação dinâmica de tipos é que o custo para a
implementação da vinculação dinâmica de quaisquer atributos é elevado, principalmente
durante a execução. A verificação de tipos é feita durante o tempo de execução. A memória
usada para o valor de uma variável deve ter um tamanho variável pois diferentes valores de
tipos exigem quantidades diferentes de armazenamento.
Além disso, a maioria das linguagens que implementam a vinculação dinâmica de
tipos é usualmente interpretada, em virtude da dificuldade de se mudar dinamicamente os
tipos de variáveis em código de máquina. Neste caso, o tempo para fazer a vinculação
dinâmica é oculto pelo tempo global de interpretação.



Referências Bibliográficas
[1] MELO, Ana Cristina Vieira de; SILVA, Flávio Soares Corrêa da. Princípios de Linguagens
de Programação, Editora Edgard Blücher Ltda. 1a Edição – 2003.
[2] SEBESTA, Robert. Conceitos de Linguagens de Programação. Editora Bookman. 5a
Edição. 2003.


2 comentários:

  1. dificil esse negocio
    de vinculação.

    ResponderExcluir
  2. Nossa complicado mesmo, mas deu pra entender um pouquinho que vinculação está muito interligada a tempo de execução que ocorre em diversos programas.

    ResponderExcluir