Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

9
Prof. Adriano Teixeira de Souza

Transcript of Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Page 1: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Prof. Adriano Teixeira de Souza

Page 2: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

O escopo de uma variável é a faixa de comandos em que a mesma é visível

◦ Uma variável é visível em um comando se puder ser referenciada naquele comando

◦ Uma variável é local a uma unidade de programa se foi declarada nela

◦ Uma variável é não-local a uma unidade de programa se for visível mas não tiver sido declarada nela

Prof. Adriano Teixeira de Souza

Page 3: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

As regras de escopo de uma linguagem determinam:

◦ como uma ocorrência de um nome é associada a

uma variável

◦ como referências a variáveis declaradas fora da unidade em execução são associadas a suas declarações

Escopo pode ser: ◦ estático ◦ dinâmico

Prof. Adriano Teixeira de Souza

Page 4: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

A vinculação do tipo de dados de uma variável pode ser especificada de forma estática ou dinâmica.

◦ Vinculação estática: quando a vinculação ocorrer

antes do tempo de execução e permanecer inalterada durante todo o tempo de execução do programa.

◦ Vinculação dinâmica: quando a vinculação ocorre durante a execução ou é alterada durante a execução do programa.

Prof. Adriano Teixeira de Souza

Page 5: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Em LPs com escopo estático (ou léxico), o escopo é determinado através da estrutura textual do programa.

Em LPs com escopo dinâmico, o escopo é determinado através da linha de execução do programa, sendo dependente portanto da ordem de execução das rotinas.

Prof. Adriano Teixeira de Souza

Page 6: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Usando escopo estático, a vinculação de um nome no ambiente é determinada pelo seguinte algoritmo: ◦ i) Se o nome foi declarado no bloco em execução, aquela

vinculação será usada. Caso contrário,

◦ ii) Se o nome não foi declarado no bloco em execução, ele deve ser buscado nos blocos que o envolvem, do imediatamente envolvente até o mais distante. Se todos os blocos envolventes tiverem sido verificados e a declaração não encontrada,

◦ iii) Se o nome está no ambiente global, aquela vinculação será usada, caso contrário não há vinculação para aquele nome no ambiente.

Prof. Adriano Teixeira de Souza

Page 7: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Pode-se informalmente dizer que o trecho de código onde um nome é visível é o bloco onde foi declarado e todos os blocos aninhados dentro dele, e por este motivo muitas vezes usa-se “escopo léxico” como sinônimo de “escopo estático”.

Prof. Adriano Teixeira de Souza

Page 8: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Usando escopo dinâmico, a vinculação válida para um nome é a criada mais recentemente durante a execução do programa.

Baseado em sequências de chamadas de unidades de programas, não no leiaute textual.

Referências a variáveis estão conectadas a declarações através da busca invertida através da sequência de chamadas de subprogramas.

Prof. Adriano Teixeira de Souza

Page 9: Paradigmas de Linguagens de Programação - Escopo estático/dinâmico

Se o escopo for dinâmico o programa imprime 4

Se o escopo for estático, o programa imprime 3

Prof. Adriano Teixeira de Souza

x: integer

procedure print_x()

begin

print(x);

end

procedure p2

x: integer;

begin

x= 4;

print_x();

end

begin

x = 3;

p2();

end