nomes, vincula˘c~oes e escopos -...
TRANSCRIPT
![Page 1: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/1.jpg)
Nomes, vinculacoes e escopos
Linguagens de Programacao
Marco A L Barbosa
cbaEste trabalho esta licenciado com uma Licenca Creative Commons - Atribuicao-CompartilhaIgual 4.0 Internacional.
http://github.com/malbarbo/na-lp-copl
![Page 2: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/2.jpg)
Conteudo
Introducao
Nomes
Variaveis
O conceito de vinculacao
Escopo
Escopo e tempo de vida
Ambientes de referenciamento
Constantes nomeadas
Referencias
![Page 3: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/3.jpg)
Introducao
![Page 4: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/4.jpg)
Introducao
I Linguagens imperativas sao baseadas na arquitetura de vonNeumann
I A variaveis sao uma abstracao das celulas de memoria
I InteirosI Array com 3 dimensoes
I As variaveis tem um conjunto de propriedades: tipo, valor,memoria, escopo, etc.
I Vamos estudar questoes sobre a semantica das variaveis
4 / 42
![Page 5: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/5.jpg)
Nomes
![Page 6: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/6.jpg)
Nomes
I Nomes ou identificadores sao associados a rotulos,subprogramas, variaveis, etc
I Questoes de projeto para os nomes
I Os nomes sao sensıveis ao caso?I As palavras especiais sao palavras reservadas ou palavras
chave?
6 / 42
![Page 7: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/7.jpg)
Nomes
I Tamanho
I Limite pequeno para o tamanho do nome dificulta a leituraI Fortran 95: 31I C99: nomes internos, sem limites, mas apenas 63 sao
significativosI C99: nomes externos, 31I Ada: pelo menos 200I C++, Java, C#: sem limites
I Caracteres especiais
I PHP: nomes de variaveis precisam iniciar com $I Perl: inicia com um caractere especial que indica o tipo: $
escalar, @ array e % hashI Ruby: variaveis de instancia iniciam com @ e variaveis de classe
com @@I Avaliacao?
7 / 42
![Page 8: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/8.jpg)
Nomes
I Tamanho
I Limite pequeno para o tamanho do nome dificulta a leituraI Fortran 95: 31I C99: nomes internos, sem limites, mas apenas 63 sao
significativosI C99: nomes externos, 31I Ada: pelo menos 200I C++, Java, C#: sem limites
I Caracteres especiais
I PHP: nomes de variaveis precisam iniciar com $I Perl: inicia com um caractere especial que indica o tipo: $
escalar, @ array e % hashI Ruby: variaveis de instancia iniciam com @ e variaveis de classe
com @@I Avaliacao?
7 / 42
![Page 9: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/9.jpg)
NomesI Sensıvel ao caso
I Desvantagem: nomes que parecem iguais sao diferentesI Nomes nas linguagens baseadas em C sao sensıveis ao casoI Outras linguagens nao saoI Nomes pre-definidos (bibliotecas) em Java e C# incluem
maiusculas e minusculas (bom ou ruim?)
I Palavras especiaisI Ajudam na legibilidade, sao usadas para separar clausulasI Uma palavra chave e uma palavra que tem um significado
especial em determinados contextosI Integer apple ; significado especial, tipo da variavelI Integer = 4I Dificulta a legibilidade
I Uma palavra reservada e uma palavra que nao pode serusada como um nome
I Muitas palavras reservadas podem restringir as opcoes denomes do programador
I Ex: Cobol tem 300 palavras reservadas
8 / 42
![Page 10: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/10.jpg)
NomesI Sensıvel ao caso
I Desvantagem: nomes que parecem iguais sao diferentesI Nomes nas linguagens baseadas em C sao sensıveis ao casoI Outras linguagens nao saoI Nomes pre-definidos (bibliotecas) em Java e C# incluem
maiusculas e minusculas (bom ou ruim?)
I Palavras especiaisI Ajudam na legibilidade, sao usadas para separar clausulasI Uma palavra chave e uma palavra que tem um significado
especial em determinados contextosI Integer apple ; significado especial, tipo da variavelI Integer = 4I Dificulta a legibilidade
I Uma palavra reservada e uma palavra que nao pode serusada como um nome
I Muitas palavras reservadas podem restringir as opcoes denomes do programador
I Ex: Cobol tem 300 palavras reservadas
8 / 42
![Page 11: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/11.jpg)
Variaveis
![Page 12: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/12.jpg)
Variaveis
I Abstracao de celula(s) de memoria
I Caracterizada como uma sextupla
I NomeI TipoI Endereco (l-value)I Valor (r-value)I Tempo de vidaI Escopo
10 / 42
![Page 13: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/13.jpg)
Variaveis
I Nome
I Existem celulas de memoria (variaveis) que nao tem nome
I Endereco (l-value)
I E o endereco da memoria da maquina que a variavel estaassociada
I Uma variavel pode ter diferente enderecos ao longo daexecucao do programa
I Varias variavel podem ter o mesmo endereco (apelidos)
I Tipo
I Determina o intervalo de valores e as operacoes
I Valor (r-value)
I E o conteudo da celula (abstrata) de memoria associada com avariavel
I Celula fısica vs celula abstrata
11 / 42
![Page 14: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/14.jpg)
O conceito de vinculacao
![Page 15: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/15.jpg)
O conceito de vinculacao
I Associacao entre um atributo e uma entidade
I Momento da vinculacao (quando a vinculacao ocorre)
I Projeto da linguagemI Implementacao da linguagemI Tempo de compilacaoI Tempo de ligacaoI Tempo de carregamentoI Tempo de execucao
I Exemplo
int cont;
...
cont = cont + 1;
printf("contagem: %d\n", cont);
I Compreender quando as vinculacoes ocorrem e pre requisitopara entender a semantica de uma linguagem de programacao
13 / 42
![Page 16: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/16.jpg)
O conceito de vinculacao
I Associacao entre um atributo e uma entidade
I Momento da vinculacao (quando a vinculacao ocorre)
I Projeto da linguagemI Implementacao da linguagemI Tempo de compilacaoI Tempo de ligacaoI Tempo de carregamentoI Tempo de execucao
I Exemplo
int cont;
...
cont = cont + 1;
printf("contagem: %d\n", cont);
I Compreender quando as vinculacoes ocorrem e pre requisitopara entender a semantica de uma linguagem de programacao
13 / 42
![Page 17: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/17.jpg)
O conceito de vinculacao
I Associacao entre um atributo e uma entidade
I Momento da vinculacao (quando a vinculacao ocorre)
I Projeto da linguagemI Implementacao da linguagemI Tempo de compilacaoI Tempo de ligacaoI Tempo de carregamentoI Tempo de execucao
I Exemplo
int cont;
...
cont = cont + 1;
printf("contagem: %d\n", cont);
I Compreender quando as vinculacoes ocorrem e pre requisitopara entender a semantica de uma linguagem de programacao
13 / 42
![Page 18: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/18.jpg)
Vinculacao de atributos a variaveis
I Vinculacao estatica
I ocorre antes da execucao do programa e permanece inalterada
I Vinculacao dinamica
I ocorre ou e altera durante a execucao do programa
14 / 42
![Page 19: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/19.jpg)
Vinculacao estatica de tipo
I Como o tipo e especificado?
I Declaracao explıcita
I int x
I Declaracao implıcita (atraves de convencao)
I Fortran: variaveis (que nao foram explicitamente declaradas)cujo o nome comeca com I, J, K, L, M, ou N sao inteiras, casocontrario, reais
I Perl: nome inicia com $, @ ou %I Facilita a escrita, mas prejudica a confiabilidade (nem tanto
no Perl)
15 / 42
![Page 20: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/20.jpg)
Vinculacao dinamica de tipo
I O tipo da variavel nao e especificada por uma declaracao enem e possıvel determinar o tipo pelo nome
I O tipo e vinculado quando um valor e atribuıdo a variavel
I list = [10.2, 3.5]; // exemplo ruimI list = 47; // isto deve ser evitado
I Vantagens
I FlexibilidadeI ExpressividadeI Facilidade de escrita
def max(x, y):
return x if x >= y else y
I Desvantagens
I Menos confiavel (a deteccao de erros de tipo pelo compilador ereduzida)
I Custo (checagem dinamica de tipo e interpretacao)I Dificuldade em criar um bom suporte nos editores
16 / 42
![Page 21: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/21.jpg)
Vinculacao dinamica de tipo
I O tipo da variavel nao e especificada por uma declaracao enem e possıvel determinar o tipo pelo nome
I O tipo e vinculado quando um valor e atribuıdo a variavel
I list = [10.2, 3.5]; // exemplo ruimI list = 47; // isto deve ser evitado
I Vantagens
I FlexibilidadeI ExpressividadeI Facilidade de escrita
def max(x, y):
return x if x >= y else y
I Desvantagens
I Menos confiavel (a deteccao de erros de tipo pelo compilador ereduzida)
I Custo (checagem dinamica de tipo e interpretacao)I Dificuldade em criar um bom suporte nos editores
16 / 42
![Page 22: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/22.jpg)
Vinculacao dinamica de tipo
I O tipo da variavel nao e especificada por uma declaracao enem e possıvel determinar o tipo pelo nome
I O tipo e vinculado quando um valor e atribuıdo a variavel
I list = [10.2, 3.5]; // exemplo ruimI list = 47; // isto deve ser evitado
I Vantagens
I FlexibilidadeI ExpressividadeI Facilidade de escrita
def max(x, y):
return x if x >= y else y
I Desvantagens
I Menos confiavel (a deteccao de erros de tipo pelo compilador ereduzida)
I Custo (checagem dinamica de tipo e interpretacao)I Dificuldade em criar um bom suporte nos editores
16 / 42
![Page 23: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/23.jpg)
Vinculacao dinamica de tipo
I O tipo da variavel nao e especificada por uma declaracao enem e possıvel determinar o tipo pelo nome
I O tipo e vinculado quando um valor e atribuıdo a variavel
I list = [10.2, 3.5]; // exemplo ruimI list = 47; // isto deve ser evitado
I Vantagens
I FlexibilidadeI ExpressividadeI Facilidade de escrita
def max(x, y):
return x if x >= y else y
I Desvantagens
I Menos confiavel (a deteccao de erros de tipo pelo compilador ereduzida)
I Custo (checagem dinamica de tipo e interpretacao)I Dificuldade em criar um bom suporte nos editores
16 / 42
![Page 24: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/24.jpg)
Vinculacao dinamica de tipo
I O tipo da variavel nao e especificada por uma declaracao enem e possıvel determinar o tipo pelo nome
I O tipo e vinculado quando um valor e atribuıdo a variavel
I list = [10.2, 3.5]; // exemplo ruimI list = 47; // isto deve ser evitado
I Vantagens
I FlexibilidadeI ExpressividadeI Facilidade de escrita
def max(x, y):
return x if x >= y else y
I Desvantagens
I Menos confiavel (a deteccao de erros de tipo pelo compilador ereduzida)
I Custo (checagem dinamica de tipo e interpretacao)I Dificuldade em criar um bom suporte nos editores
16 / 42
![Page 25: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/25.jpg)
Vinculacao estatica de tipo
I Inferencia de tipo: os tipos sao determinados pelo compiladora partir do contexto
I Exemplo ML:
fun vezes10(x) = 10 * x;
fun vezes10(x) = 10.0 * x;
fun quadrado(x) = x * x;
fun quadrado(x): int = x * x;
fun quadrado(x): real = x * x;
17 / 42
![Page 26: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/26.jpg)
Vinculacao de memoria e tempo de vida
I Alocacao: tomar uma celula de memoria de um conjunto dememoria disponıvel
I Desalocacao: devolver uma celula de memoria desvinculadaao conjunto de memoria disponıvel
I Tempo de vida: e o tempo durante o qual a variavel estavinculada a uma celula de memoria especıfica
I Classificacao segundo tempo de vida de variaveis escalares
I EstaticaI Dinamica na pilhaI Dinamica explıcita no heapI Dinamica implıcita no heap
18 / 42
![Page 27: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/27.jpg)
Vinculacao de memoria e tempo de vida
I Alocacao: tomar uma celula de memoria de um conjunto dememoria disponıvel
I Desalocacao: devolver uma celula de memoria desvinculadaao conjunto de memoria disponıvel
I Tempo de vida: e o tempo durante o qual a variavel estavinculada a uma celula de memoria especıfica
I Classificacao segundo tempo de vida de variaveis escalares
I EstaticaI Dinamica na pilhaI Dinamica explıcita no heapI Dinamica implıcita no heap
18 / 42
![Page 28: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/28.jpg)
Vinculacao de memoria e tempo de vida
I Estatica: vinculada a celula de memoria antes da execucao doprograma e permanece vinculada a mesma celula durante aexecucao
I Exemplos: Variaveis globais, variavel static dentro de umafuncao em C
I Vantagens: eficiencia, sensibilidade a historiaI Desvantagens: flexibilidade (nao suporta recursao), a mesma
memoria nao pode ser compartilhada por variaveis diferentes
I Dinamica na pilha: vinculada a celula de memoria quando asua declaracao e elaborada
I Exemplos: Variaveis locais em JavaI Vantagens: permite recursao e compartilhamento de memoriaI Desvantagens: Custo da alocacao e desalocacao, subprogramas
nao podem ser sensıvel ao contexto, acesso indireto
19 / 42
![Page 29: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/29.jpg)
Vinculacao de memoria e tempo de vida
I Estatica: vinculada a celula de memoria antes da execucao doprograma e permanece vinculada a mesma celula durante aexecucao
I Exemplos: Variaveis globais, variavel static dentro de umafuncao em C
I Vantagens: eficiencia, sensibilidade a historiaI Desvantagens: flexibilidade (nao suporta recursao), a mesma
memoria nao pode ser compartilhada por variaveis diferentes
I Dinamica na pilha: vinculada a celula de memoria quando asua declaracao e elaborada
I Exemplos: Variaveis locais em JavaI Vantagens: permite recursao e compartilhamento de memoriaI Desvantagens: Custo da alocacao e desalocacao, subprogramas
nao podem ser sensıvel ao contexto, acesso indireto
19 / 42
![Page 30: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/30.jpg)
Vinculacao de memoria e tempo de vida
I Estatica: vinculada a celula de memoria antes da execucao doprograma e permanece vinculada a mesma celula durante aexecucao
I Exemplos: Variaveis globais, variavel static dentro de umafuncao em C
I Vantagens: eficiencia, sensibilidade a historiaI Desvantagens: flexibilidade (nao suporta recursao), a mesma
memoria nao pode ser compartilhada por variaveis diferentes
I Dinamica na pilha: vinculada a celula de memoria quando asua declaracao e elaborada
I Exemplos: Variaveis locais em Java
I Vantagens: permite recursao e compartilhamento de memoriaI Desvantagens: Custo da alocacao e desalocacao, subprogramas
nao podem ser sensıvel ao contexto, acesso indireto
19 / 42
![Page 31: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/31.jpg)
Vinculacao de memoria e tempo de vida
I Estatica: vinculada a celula de memoria antes da execucao doprograma e permanece vinculada a mesma celula durante aexecucao
I Exemplos: Variaveis globais, variavel static dentro de umafuncao em C
I Vantagens: eficiencia, sensibilidade a historiaI Desvantagens: flexibilidade (nao suporta recursao), a mesma
memoria nao pode ser compartilhada por variaveis diferentes
I Dinamica na pilha: vinculada a celula de memoria quando asua declaracao e elaborada
I Exemplos: Variaveis locais em JavaI Vantagens: permite recursao e compartilhamento de memoriaI Desvantagens: Custo da alocacao e desalocacao, subprogramas
nao podem ser sensıvel ao contexto, acesso indireto
19 / 42
![Page 32: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/32.jpg)
Vinculacao de memoria e tempo de vida
I Dinamica explıcita no heap: alocada explicitamente peloprogramador, a alocacao acontece em tempo de execucao
I Exemplos: new em C++, malloc em C
I Vantagens: permite criacao de estruturas de dados dinamicasI Desvantagens: ineficiencia e difıcil utilizacao de ponteiros e
referencias
I Dinamica implıcita no heap: e vinculada a memoria do heapapenas quanto e atribuıda
I Exemplos: Javascript, Python, etcI Vantagens: flexibilidadeI Desvantagens: ineficiencia, todos os atributos sao dinamicos
20 / 42
![Page 33: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/33.jpg)
Vinculacao de memoria e tempo de vida
I Dinamica explıcita no heap: alocada explicitamente peloprogramador, a alocacao acontece em tempo de execucao
I Exemplos: new em C++, malloc em CI Vantagens: permite criacao de estruturas de dados dinamicasI Desvantagens: ineficiencia e difıcil utilizacao de ponteiros e
referencias
I Dinamica implıcita no heap: e vinculada a memoria do heapapenas quanto e atribuıda
I Exemplos: Javascript, Python, etcI Vantagens: flexibilidadeI Desvantagens: ineficiencia, todos os atributos sao dinamicos
20 / 42
![Page 34: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/34.jpg)
Vinculacao de memoria e tempo de vida
I Dinamica explıcita no heap: alocada explicitamente peloprogramador, a alocacao acontece em tempo de execucao
I Exemplos: new em C++, malloc em CI Vantagens: permite criacao de estruturas de dados dinamicasI Desvantagens: ineficiencia e difıcil utilizacao de ponteiros e
referencias
I Dinamica implıcita no heap: e vinculada a memoria do heapapenas quanto e atribuıda
I Exemplos: Javascript, Python, etc
I Vantagens: flexibilidadeI Desvantagens: ineficiencia, todos os atributos sao dinamicos
20 / 42
![Page 35: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/35.jpg)
Vinculacao de memoria e tempo de vida
I Dinamica explıcita no heap: alocada explicitamente peloprogramador, a alocacao acontece em tempo de execucao
I Exemplos: new em C++, malloc em CI Vantagens: permite criacao de estruturas de dados dinamicasI Desvantagens: ineficiencia e difıcil utilizacao de ponteiros e
referencias
I Dinamica implıcita no heap: e vinculada a memoria do heapapenas quanto e atribuıda
I Exemplos: Javascript, Python, etcI Vantagens: flexibilidadeI Desvantagens: ineficiencia, todos os atributos sao dinamicos
20 / 42
![Page 36: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/36.jpg)
Vinculacao de memoria e tempo de vida
#include<stdlib.h>
int max = 100;
int main() {int i = 0;
while (i < max) {int *x = malloc(sizeof(int));
...
}}
21 / 42
![Page 37: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/37.jpg)
Escopo
![Page 38: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/38.jpg)
Escopo
I Escopo e o conjunto de expressoes em que uma variavel evisıvel
I Uma variavel nao local a um unidade de programa e umavariavel nao declarada nesta unidade mas acessıvel nela
I As regras de escopo de uma linguagens de programacaodeterminam como uma ocorrencia particular de um nome eassociado a uma variavel
I Escopo estaticoI Escopo dinamico
23 / 42
![Page 39: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/39.jpg)
Escopo estatico
I Introduzido pelo Algol 60 como um metodo para associarnomes a variaveis nao locais
I Tambem chamado de escopo lexico (baseado no texto doprograma)
I Pode ser determinado em tempo de compilacao
I Um escopo estatico que aninha outro escopo e chamado deancestral estatico
I O ancestral estatico mais perto e chamado de pai estaticoI Metodo de busca: busca a declaracao, primeiro local, depois
no pai estatico, ate que o nome seja encontrado
I Usado pela maioria das linguagens
24 / 42
![Page 40: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/40.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? X de Big.
I A referencia a variavel X no corpo de Sub1 se refere a quevariavel? X de Sub1.
I Como a variavel X de Big pode ser referenciada em Sub1.Big.X
25 / 42
![Page 41: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/41.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel?
X de Big.I A referencia a variavel X no corpo de Sub1 se refere a que
variavel? X de Sub1.I Como a variavel X de Big pode ser referenciada em Sub1.
Big.X
25 / 42
![Page 42: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/42.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? X de Big.
I A referencia a variavel X no corpo de Sub1 se refere a quevariavel? X de Sub1.
I Como a variavel X de Big pode ser referenciada em Sub1.Big.X
25 / 42
![Page 43: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/43.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? X de Big.
I A referencia a variavel X no corpo de Sub1 se refere a quevariavel?
X de Sub1.I Como a variavel X de Big pode ser referenciada em Sub1.
Big.X
25 / 42
![Page 44: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/44.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? X de Big.
I A referencia a variavel X no corpo de Sub1 se refere a quevariavel? X de Sub1.
I Como a variavel X de Big pode ser referenciada em Sub1.Big.X
25 / 42
![Page 45: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/45.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? X de Big.
I A referencia a variavel X no corpo de Sub1 se refere a quevariavel? X de Sub1.
I Como a variavel X de Big pode ser referenciada em Sub1.
Big.X
25 / 42
![Page 46: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/46.jpg)
Escopo estatico - Exemplo de Adaprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? X de Big.
I A referencia a variavel X no corpo de Sub1 se refere a quevariavel? X de Sub1.
I Como a variavel X de Big pode ser referenciada em Sub1.Big.X 25 / 42
![Page 47: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/47.jpg)
Escopo estatico
I Variaveis podem ser ocultas em um escopo se houver umadeclaracao “mais” perto com o mesmo nome
I Algumas linguagens fornecem um mecanismo para acessarestas variaveis ocultas. Exemplo anterior do Ada
I Bloco e uma forma de criar escopo estatico dentro de umaunidade de programa.
Exemplo em C (nao permitido em Javae C# por usar o mesmo nome count)
void sub() {int count;
...
while ( ... ) {int count;
...
}}
26 / 42
![Page 48: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/48.jpg)
Escopo estatico
I Variaveis podem ser ocultas em um escopo se houver umadeclaracao “mais” perto com o mesmo nome
I Algumas linguagens fornecem um mecanismo para acessarestas variaveis ocultas. Exemplo anterior do Ada
I Bloco e uma forma de criar escopo estatico dentro de umaunidade de programa. Exemplo em C (nao permitido em Javae C# por usar o mesmo nome count)
void sub() {int count;
...
while ( ... ) {int count;
...
}}
26 / 42
![Page 49: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/49.jpg)
Escopo estatico
I Escopo global (variaveis declaras fora de funcoes)
I PHP: atraves da variavel $GLOBALS ou declarado o nomeglobal
I Python: variavel global pode ser referenciada, mas parareceber uma atribucao o nome tem que ser declarado global
27 / 42
![Page 50: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/50.jpg)
Escopo estatico
I Avaliacao
I Funciona bem em muitas situacoesI Permite mais acesso do que e necessarioI Induz a criacao de variaveis globais
28 / 42
![Page 51: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/51.jpg)
Escopo estatico
I Avaliacao
I Funciona bem em muitas situacoesI Permite mais acesso do que e necessarioI Induz a criacao de variaveis globais
28 / 42
![Page 52: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/52.jpg)
Escopo dinamico
I Baseia-se na sequencia de chamadas a subprogramas e nao naestrutura textual (temporal vs espacial)
I Determinado em tempo de execucao
I As referencias as variaveis sao conectadas as declaracoesfazendo uma busca atraves da sequencia de chamadas desubprogramas
I Exemplos de linguagens: APL, SNOBOL4, primeiras versoesde Lisp, Perl, Common Lisp
29 / 42
![Page 53: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/53.jpg)
Escopo dinamico - Exemploprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? Depende da sequencia de chamadas de funcoes.
I Big chama Sub1 que chama Sub2? X de Sub1.
I Big chama Sub2? X de Big.
30 / 42
![Page 54: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/54.jpg)
Escopo dinamico - Exemploprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel?
Depende da sequencia de chamadas de funcoes.
I Big chama Sub1 que chama Sub2? X de Sub1.
I Big chama Sub2? X de Big.
30 / 42
![Page 55: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/55.jpg)
Escopo dinamico - Exemploprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? Depende da sequencia de chamadas de funcoes.
I Big chama Sub1 que chama Sub2? X de Sub1.
I Big chama Sub2? X de Big.
30 / 42
![Page 56: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/56.jpg)
Escopo dinamico - Exemploprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? Depende da sequencia de chamadas de funcoes.
I Big chama Sub1 que chama Sub2? X de Sub1.
I Big chama Sub2? X de Big.
30 / 42
![Page 57: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/57.jpg)
Escopo dinamico - Exemploprocedure Big is
X : Integer;
procedure Sub1 is
X : Integer;
begin
... X ...
end;
procedure Sub2 is
begin
... X ...
end;
begin
...
end;
I A referencia a variavel X no corpo de Sub2 se refere a quevariavel? Depende da sequencia de chamadas de funcoes.
I Big chama Sub1 que chama Sub2? X de Sub1.
I Big chama Sub2? X de Big.
30 / 42
![Page 58: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/58.jpg)
Escopo dinamico
I Avaliacao
I Vantagem sutil na passagem de parametros (exemplo?)I Quando um subprograma esta em execucao, suas variaveis sao
visıveis para todos os subprogramas chamados por eleI Dificuldade de leituraI Custo de acessoI Impossıvel fazer checagem do tipo das variaveis
31 / 42
![Page 59: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/59.jpg)
Escopo dinamico
I Avaliacao
I Vantagem sutil na passagem de parametros (exemplo?)I Quando um subprograma esta em execucao, suas variaveis sao
visıveis para todos os subprogramas chamados por eleI Dificuldade de leituraI Custo de acessoI Impossıvel fazer checagem do tipo das variaveis
31 / 42
![Page 60: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/60.jpg)
Escopo e tempo de vida
![Page 61: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/61.jpg)
Escopo e tempo de vida
I Escopo e tempo de vida estao relacionados, mas sao conceitosdiferentes
I Escopo (estatico) e espacialI Tempo de vida e temporal
I Qual e o tempo de vida e o escopo de um variavel local staticem C/C++?
I E no exemplo a seguir, qual e o tempo de vida e o escopo davariavel soma?
def imprime_cabecalho():
...
def calcula(a, b):
soma = a + b
imprime_cabecalho()
...
33 / 42
![Page 62: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/62.jpg)
Escopo e tempo de vida
I Escopo e tempo de vida estao relacionados, mas sao conceitosdiferentes
I Escopo (estatico) e espacialI Tempo de vida e temporal
I Qual e o tempo de vida e o escopo de um variavel local staticem C/C++?
I E no exemplo a seguir, qual e o tempo de vida e o escopo davariavel soma?
def imprime_cabecalho():
...
def calcula(a, b):
soma = a + b
imprime_cabecalho()
...
33 / 42
![Page 63: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/63.jpg)
Escopo e tempo de vida
I Escopo e tempo de vida estao relacionados, mas sao conceitosdiferentes
I Escopo (estatico) e espacialI Tempo de vida e temporal
I Qual e o tempo de vida e o escopo de um variavel local staticem C/C++?
I E no exemplo a seguir, qual e o tempo de vida e o escopo davariavel soma?
def imprime_cabecalho():
...
def calcula(a, b):
soma = a + b
imprime_cabecalho()
...
33 / 42
![Page 64: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/64.jpg)
Ambientes de referenciamento
![Page 65: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/65.jpg)
Ambientes de referenciamento
I E o conjunto de variaveis visıveis em uma determinadaexpressao
I Nas linguagens com escopo estatico, sao as variaveis locaismais todas as variaveis visıveis de todos os escopos externos
I Nas linguagens com escopo dinamico, sao as variaveis locaismais todas as variaveis visıveis em todos os subprogramasativos
35 / 42
![Page 66: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/66.jpg)
Ambientes de referenciamento
procedure Exemplo is
A, B : Integer;
procedure Sub1 is
X, Y : Integer;
begin
... (1)
end
procedure Sub2 is
X : Integer;
procedure Sub3 is
X : Integer;
begin
... (2)
end
begin
... (3)
end
begin
... (4)
end
36 / 42
![Page 67: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/67.jpg)
I Considerando escopo estatico, quais os ambientes dereferenciamento nos pontos 1, 2 e 3?
I 1: X e Y de Sub1, A e B de Exemplo
I 2: X de Sub3, A e B de Exemplo
I 3: X de Sub2, A e B de Exemplo
37 / 42
![Page 68: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/68.jpg)
I Considerando escopo estatico, quais os ambientes dereferenciamento nos pontos 1, 2 e 3?
I 1: X e Y de Sub1, A e B de Exemplo
I 2: X de Sub3, A e B de Exemplo
I 3: X de Sub2, A e B de Exemplo
37 / 42
![Page 69: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/69.jpg)
I Considerando escopo estatico, quais os ambientes dereferenciamento nos pontos 1, 2 e 3?
I 1: X e Y de Sub1, A e B de Exemplo
I 2: X de Sub3, A e B de Exemplo
I 3: X de Sub2, A e B de Exemplo
37 / 42
![Page 70: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/70.jpg)
I Considerando escopo estatico, quais os ambientes dereferenciamento nos pontos 1, 2 e 3?
I 1: X e Y de Sub1, A e B de Exemplo
I 2: X de Sub3, A e B de Exemplo
I 3: X de Sub2, A e B de Exemplo
37 / 42
![Page 71: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/71.jpg)
Ambientes de referenciamentovoid sub1() {int a, b;
... (1)
}void sub2() {
int b, c;
... (2)
sub1();
}void main() {
int c, d;
... (3)
sub2();
}
I Considerando escopo dinamico, e a sequencia de chamadamain, sub2, sub1, quais os ambientes de referenciamento nospontos 1, 2 e 3?
I 1: a e b de sub1, c de sub2, d de mainI 2: b e c de sub2, d de mainI 3: c e d de main
38 / 42
![Page 72: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/72.jpg)
Ambientes de referenciamentovoid sub1() {int a, b;
... (1)
}void sub2() {
int b, c;
... (2)
sub1();
}void main() {
int c, d;
... (3)
sub2();
}
I Considerando escopo dinamico, e a sequencia de chamadamain, sub2, sub1, quais os ambientes de referenciamento nospontos 1, 2 e 3?
I 1: a e b de sub1, c de sub2, d de mainI 2: b e c de sub2, d de mainI 3: c e d de main
38 / 42
![Page 73: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/73.jpg)
Ambientes de referenciamentovoid sub1() {int a, b;
... (1)
}void sub2() {
int b, c;
... (2)
sub1();
}void main() {
int c, d;
... (3)
sub2();
}
I Considerando escopo dinamico, e a sequencia de chamadamain, sub2, sub1, quais os ambientes de referenciamento nospontos 1, 2 e 3?
I 1: a e b de sub1, c de sub2, d de main
I 2: b e c de sub2, d de mainI 3: c e d de main
38 / 42
![Page 74: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/74.jpg)
Ambientes de referenciamentovoid sub1() {int a, b;
... (1)
}void sub2() {
int b, c;
... (2)
sub1();
}void main() {
int c, d;
... (3)
sub2();
}
I Considerando escopo dinamico, e a sequencia de chamadamain, sub2, sub1, quais os ambientes de referenciamento nospontos 1, 2 e 3?
I 1: a e b de sub1, c de sub2, d de mainI 2: b e c de sub2, d de main
I 3: c e d de main
38 / 42
![Page 75: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/75.jpg)
Ambientes de referenciamentovoid sub1() {int a, b;
... (1)
}void sub2() {
int b, c;
... (2)
sub1();
}void main() {
int c, d;
... (3)
sub2();
}
I Considerando escopo dinamico, e a sequencia de chamadamain, sub2, sub1, quais os ambientes de referenciamento nospontos 1, 2 e 3?
I 1: a e b de sub1, c de sub2, d de mainI 2: b e c de sub2, d de mainI 3: c e d de main 38 / 42
![Page 76: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/76.jpg)
Constantes nomeadas
![Page 77: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/77.jpg)
Constantes nomeadas
I Uma constante nomeada e uma variavel que o valor evinculado apenas uma vez
I Usado para parametrizar programas
I A vinculacao dos valores a constantes nomeadas pode serestaticas ou dinamicas
I Vantagens: legibilidade e facilidade de modificacao
40 / 42
![Page 78: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/78.jpg)
Referencias
![Page 79: Nomes, vincula˘c~oes e escopos - malbarbo.pro.brmalbarbo.pro.br/arquivos/2013/1028/05-nomes-vinculacoes-e-escopos.pdf · I Ex: Cobol tem 300 palavras reservadas 8/42. Vari aveis](https://reader030.vdocuments.net/reader030/viewer/2022021710/5c423ff093f3c338d755cf92/html5/thumbnails/79.jpg)
Referencias
I Robert Sebesta, Concepts of programming languages, 9a
edicao. Capıtulo 5.
42 / 42