Vinculação de nomes (computação)Em linguagens de programação, vinculação de nomes (ou amarração de nomes) é a associação de objetos (dados e/ou código) com identificadores.[1][2][3][4] Um identificador associado a um objeto é dito referênciar este objeto. Linguagens de máquina não tem nenhuma noção de identificadores embutida, mas vinculações nome-objeto como um serviço e notação para o programador são implementados por linguagens de programação. A vinculação está intimamente ligada com o escopo, pois o escopo determina quais nomes são vinculados a quais os objetos em um sentido lexical, bem como sobre o tempo de execução relativo. A utilização de um identificador Tempo de vinculaçãoA vinculação de nomes antes de o programa ser executado, ou seja, em tempo de compilação, é chamada de estática[5] (também chamada "antecipada" [6]); ligações realizadas durante a execução do programa são chamadas de dinâmicas[5] ( também "tardias"[6] ou "virtuais"). Um exemplo de uma vinculação estática é uma chamada direta de função C: a função referenciada pelo identificador não pode mudar durante a execução. Mas um exemplo de vinculação dinâmica é a resolução dinâmica (dynamic dispatch), como na chamada de um método virtual em C++. Uma vez que o tipo específico de um objeto polimórfico não é conhecido antes do tempo de execução (em geral), a função executada é vinculada dinamicamente. Tomemos, por exemplo, o seguinte código em Java: public void foo(List<String> list) {
list.add("bar");
}
É Vinculação em agregados de dadosA vinculação em objetos agregados de dados, como registros (records ou structs) é uma questão mais complexa. Um agregado de dados, embora vinculado a um único nome é amarrado a múltiplos locais. Os componentes individuais são objetos de dados com tipo, valor e vinculações próprias mas não são vinculados a um nome simples e sim, por um nome composto.[7] Vinculação a múltiplos nomesAlgumas vezes é conveniente vincular múltiplos nomes a um único objeto de armazenamento. Isto é feito freqüentemente para associar um segundo tipo de dados a este objeto ou empacotar objetos logicamente independentes em um grupo para facilitar a sua manipulação.[8] Exemplos de vinculação de múltiplos nomes são:
Revinculação e mutaçãoRevinculação não deve ser confundido com mutação - "revinculação" é uma alteração no identificador referenciado; "mutação" é uma mudança para o valor referenciado. Considere o seguinte código Java: LinkedList<String> list;
list = new LinkedList<String>();
list.add("foo");
list = null;
O identificador Vinculação estática tardiaVinculação estática tardia é uma variante de vinculação situada em algum lugar entre a vinculação estática e a dinâmica. Considere o seguinte exemplo em PHP: class A {
static $word = "hello";
static function hello() {print self::$word;}
}
class B extends A {
static $word = "bye";
}
B::hello();
Neste exemplo, o interpretador PHP liga a função hello() a uma classe A, e assim a chamada B::hello() produz a string "hello". Se a semântica de "self::$word" tivesse sido baseada em uma "vinculação estática tardia", então o resultado teria sido "bye". A partir da versão 5.3 do PHP, a vinculação estática tardia passou a ser suportada [9]. Especificamente, se "self::$word" no exemplo acima for alteradas para "static::$word", como mostrado no bloco seguinte, o resultado da chamada para B::hello() seria "bye": class A {
static $word = "hello";
static function hello() {print static::$word;}
}
class B extends A {
static $word = "bye";
}
B::hello();
Referências
|
Portal di Ensiklopedia Dunia