Paradigmas de
Linguagens de Programação
Associações e Escopo
(Bindings and Scope)
Rodrigo Rocha
[email protected] http://cin.ufpe.br/~rgcr
Universidade Federal da Paraíba – Campus IV (Rio Tinto – PB)
PLP – Associações e Escopo
00 - 30
Associações:
São vinculações de identificadores à entidades: Constantes
Variáveis Procedimentos Funções Tipos
Definidas pelo programador
É um conceito comum à todas as linguagens
Uma boa escolha de identificadores pode tornar o programa mais
legível.
PLP – Associações e Escopo
00 - 30
Associações e Ambientes A expressão n+1 usa o identificador n; A expressão f(n) usa os identificadores f e n.
Se um identificador ocorre em uma expressão, a expressão não pode
ser compreendida isoladamente.
PLP – Associações e Escopo
Associações e Ambientes
Muitas Linguagens permitem que um mesmo identificador seja
declarado em diferentes partes do programa, possivelmente representando diferentes entidades.
A interpretação da expressão ou comando contendo este identificador
vai depender do lugar onde a expressão ou comando ocorre no programa.
Exemplo:
“m = n + 1” ou “print(m/2)”
PLP – Associações e Escopo
Associações e Ambientes
Uma declaração produz uma associação (binding) entre um identificador
e a entidade denotada
Exemplo: var n: integer
Um ambiente é um conjunto de associações
Cada expressão ou comando é interpretado em um ambiente particular Expressões e Comandos em diferentes locais de um programa podem
00 - 30 Exemplo de Associações Em Ada: n: constant Integer := 7; n : Integer; Em Java: class disciplinaPLP; String nome = “PLP”; Em C: int x; char letra; 00 - 30 Exemplo de Ambientes Em Ada Procedure p is z: constant Integer := 0; c: Character; Procedure q is c: constant Float := 3.0; b: Boolean begin ... end q; begin ... end p;
Quais ambientes do exemplo?
PLP – Associações e Escopo
00 - 30
Entidades Associáveis
Uma entidade associável (ou denotável) é aquela que pode ser
associada a um identificador
Em Pascal:
Valores primitivos e strings (em definições de constantes) Referências para variáveis
Função e Procedimento
Tipos Em ML:
Valores primitivos, valores compostos, abstração de funções,
referência para variáveis (em definições de valores)
Tipos Exceções
PLP – Associações e Escopo
00 - 30 Entidades Associáveis Em C: Tipos Variáveis Funções Em Java Valores Variáveis locais Instâncias Métodos Classes pacotes.PLP – Associações e Escopo
EscopoCada declaração possui um escopo que é o trecho de programa no qual
a declaração é efetiva
Uma Estrutura de bloco, ou simplesmente bloco é um grupo de
construções de programa que delimita o escopo das declarações nele contidas
Blocos podem ser aninhados
PLP – Associações e Escopo
Escopo Estrutura de Bloco
Um bloco é construir um programa que delimita o escopo de cada
declaração dentro dele.
Cada linguagem tem sua própria forma de blocos
Em C - {...}:
Corpos de função, arquivos de código e o programa como todo. Em Java - {...}:
Corpos de métodos, declarações de classe, pacotes e o programa
como todo.
Em Ada – begin ... end:
Corpos de procedimentos, pacotes, tarefas, objetos protegidos e o
00 - 30
Escopo Estrutura de Bloco
Em Python utiliza apenas a identação
– Exemplo: if n==5:
print 'n igual a 5' for cont in range (0,10):
print cont id = id+1 if id == 10:
Print “id igual a 10” else:
print 'a diferente de 5'
00 - 30
Estrutura de Blocos
A estrutura de blocos de uma linguagem de programação pode ser
classificada de três maneiras: Monolítica Plana Aninhada
PLP – Associações e Escopo
00 - 30 Estrutura de Blocos MonolíticaO escopo de todas declarações é todo o programa Exempo de linguagem, COBOL (antigas versões)
PLP – Associações e Escopo
00 - 30
Estrutura de Blocos Plana
O programa é dividido em vários blocos distintos Exemplo de linguagem Fortran
PLP – Associações e Escopo
Estrutura de Blocos Aninhados
Um program é dividido em vários blocos aninhados Exemplo de linguagens: Pascal, algol, C
PLP – Associações e Escopo
Escopo e Visibilidade
Identificadores podem ocorrer em dois diferentes contextos dentro de
um bloco:
Ocorrência de Declaração Exemplo: const n = 7
Ocorrência de Uso Exemplo: n + (n-1)
É possível declarar um mesmo identificador em blocos distintos (para linguagens com blocos planos e/ou aninhados)
Diferentes entidades poderão ser representados nos diferentes blocos
pelo mesmo identificador
00 - 30
Escopo e Visibilidade
Diferentes ocorrências de declaração para o mesmo identificador
Ocorrências de uso são dependentes do bloco onde elas
ocorrem.
00 - 30
Declarações
Declaração é a parte do programa cujo principal efeito é produzir
associações (bindings)
Pode ter outros efeitos Tipos de declarações: Declaração de Tipo Declaração de Variável Declarações Colaterais Declarações Sequenciais Declarações Recursivas
O termo Definição indica que a declaração é feita
PLP – Associações e Escopo
00 - 30
Declarações Definição
Definição é uma declaração cujo único efeito é produzir associações Exemplos:
Definição de constantes em Pascal Definição de procedimento Definição de função
Constantes em Pascal deve resultar em um valor primitivo const a = 5 const b = 'x'
PLP – Associações e Escopo
00 - 30 Declarações Definição de TipoUma definição de tipo serve apenas para associar um identificador a
um tipo existente
Declaração de um novo tipo: é aquela declaração que cria um novo e
distinto tipo
Em ML, delcaração de tipos: datatype livro = li of string * int; datatype autor = au of string * int;
PLP – Associações e Escopo
Declarações
Declaração de Variável
Uma definição de variável serve apenas para associar um
identificador a uma variável existente
Declaração de uma nova variável: é aquela declaração que cria uma
nova e distinta variável
Em Pascal (declaração de variável): Var contador = Integer; Em Ada (definição de variável)
Pop : Integer renames populacao
PLP – Associações e Escopo
Declarações
Outras
Declarações de Constantes Declarações de Prodecimentos
00 - 30
Declarações
Declarações Compostas em:
Declarações colaterais Declarações sequenciais Declarações recursivas
00 - 30
Declarações
Declarações Compostas - Colaterais: Uma declaração colateral deve ser escrita da forma:
D1 e D2
D1 é independente de D2
As associações produzidas são combinadas Não são muito comuns
PLP – Associações e Escopo
00 - 30
Declarações
Declarações Compostas - Sequenciais:
Uma declaração sequencial deve ser escrita da forma D1; D2. D1 é seguida de D2
As associações produzidas em D1 podem ser usadas em D2. Em Pascal:
var contador: integer; procedure adiciona; Begin contador := contador + 1; end
PLP – Associações e Escopo
00 - 30 DeclaraçõesDeclarações Compostas - Recursivas:
Uma declaração recursiva usa as próprias declarações que ela produz Exemplo: Declaração de tipos recursivos e definições de funções e
procedimentos recursivos
PLP – Associações e Escopo
Blocos
Um comando bloco é uma forma de comado que contém uma
declaração local (ou um grupo de declarações) D e um subcomando C.
As associações produzidas por D são usadas somente durante a
execução de C.
PLP – Associações e Escopo
Blocos
Um comando expressão é uma forma de expressão que contém uma
declaração local (ou um grupo de declarações) D e um subexpressão C.
As associações produzidas por D são usadas somente durante a
00 - 30
Blocos
Comando Bloco em Java
if ( x > y ) { int z = x; x = y; y = z; } 00 - 30