1
Aula 4Aula 4Nomes, Vinculações, Nomes, Vinculações,
Tipos e EscoposTipos e Escopos
Universidade do Vale do Rio dos Sinos
< Página da Disciplina >
www.inf.unisinos.br/~barbosawww.inf.unisinos.br/~barbosa
<Endereço do Professor >
[email protected]@exatas.unisinos.br
2
SUMÁRIOSUMÁRIO1 – Introdução
3
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes
4
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis
5
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação
6
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos
7
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte
8
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte7 – Compatibilidade de tipos
9
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte7 – Compatibilidade de tipos8 – Escopo
10
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte7 – Compatibilidade de tipos8 – Escopo9 –Escopo e tempo de vida
11
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte7 – Compatibilidade de tipos8 – Escopo9 –Escopo e tempo de vida10 – Ambientes de referenciamento
12
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte7 – Compatibilidade de tipos8 – Escopo9 –Escopo e tempo de vida10 – Ambientes de referenciamento11 – Constantes nomeadas
13
SUMÁRIOSUMÁRIO1 – Introdução2 – Nomes3 – Variáveis4 – Vinculação5 – Verificação de tipos6 – Tipificação forte7 – Compatibilidade de tipos8 – Escopo9 –Escopo e tempo de vida10 – Ambientes de referenciamento11 – Constantes nomeadas12 – Inicialização de variáveis
14
NOMESNOMES1 – Formas de nomes: Distinção entre maiúsculas e minúsculas
15
NOMESNOMES1 – Formas de nomes: Distinção entre maiúsculas e minúsculas
2 – Palavras especiais: Palavra Chave x Palavra Reservada
16
NOMESNOMES1 – Formas de nomes: Distinção entre maiúsculas e minúsculas
2 – Palavras especiais: Palavra Chave x Palavra Reservada
=> FORTRAN
INTEGER REAL REAL INTEGER
17
NOMESNOMES1 – Formas de nomes: Distinção entre maiúsculas e minúsculas
2 – Palavras especiais: Palavra Chave x Palavra Reservada
=> FORTRAN
INTEGER REAL REAL INTEGER => PL/1 if then then then = else; else else = then;
18
VARIÁVEISVARIÁVEIS 1 – Atributos: - Nome - Endereço - Valor - Tipo - Tempo de vida - Escopo
19
VARIÁVEISVARIÁVEIS 1 – Atributos: - Nome - Endereço - Valor - Tipo - Tempo de vida - Escopo
2 – Aliases
20
VARIÁVEISVARIÁVEIS 1 – Atributos: - Nome - Endereço - Valor - Tipo - Tempo de vida - Escopo
2 – Aliases
3 – Células de memória: - Físicas - Abstratas
21
VINCULAÇÃOVINCULAÇÃO 1 – Tipos - Estática: Tempo de compilação - Dinâmica: Tempo de execução
22
VINCULAÇÃOVINCULAÇÃO 1 – Tipos - Estática: Tempo de compilação - Dinâmica: Tempo de execução
2 – Vinculação de tipos - Estática: Declaração explícita ou implícita
- Dinâmica:
- Inferência de tipos
23
VINCULAÇÃOVINCULAÇÃO 1 – Tipos - Estática: Tempo de compilação - Dinâmica: Tempo de execução
2 – Vinculação de tipos - Estática: Declaração explícita ou implícita Declaração explícita: Instrução do programa Declaração implícita: Baseada em uma convenção Primeira ocorrência estabelece o tipo - Dinâmica:
- Inferência de tipos
24
VINCULAÇÃOVINCULAÇÃO 1 – Tipos - Estática: Tempo de compilação - Dinâmica: Tempo de execução
2 – Vinculação de tipos - Estática: Declaração explícita ou implícita Declaração explícita: Instrução do programa Declaração implícita: Baseada em uma convenção Primeira ocorrência estabelece o tipo - Dinâmica: Definição (múltiplas) e verificação durante execução
A := B + C; - Inferência de tipos
25
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
MemóriaBaixa
MemóriaAlta
26
CódigoMemória
Baixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
27
Código
DadosEstáticos
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
28
Código
DadosEstáticos
Pilha
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
29
Código
DadosEstáticos
Pilha
Heap
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
30
VINCULAÇÃOVINCULAÇÃO 3 – Vinculação de armazenamento - Alocação e desalocação de variáveis (pool de memória)
31
VINCULAÇÃOVINCULAÇÃO 3 – Vinculação de armazenamento - Alocação e desalocação de variáveis (pool de memória) - Tempo de vida de uma variável
32
VINCULAÇÃOVINCULAÇÃO 3 – Vinculação de armazenamento - Alocação e desalocação de variáveis (pool de memória) - Tempo de vida de uma variável - Categorias de armazenamento de variáveis escalares - Variáveis Estáticas: Globais e STATICs
33
Código
DadosEstáticos
Pilha
Heap
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
34
VINCULAÇÃOVINCULAÇÃO 3 – Vinculação de armazenamento - Alocação e desalocação de variáveis (pool de memória) - Tempo de vida de uma variável - Categorias de armazenamento de variáveis escalares - Variáveis Estáticas: Globais e STATICs - Variáveis Stack-Dinâmicas (RAs): - Tipos estaticamente vinculados - Elaboração em tempo de execução
35
Código
DadosEstáticos
Pilha
Heap
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
36
VINCULAÇÃOVINCULAÇÃO 3 – Vinculação de armazenamento - Alocação e desalocação de variáveis (pool de memória) - Tempo de vida de uma variável - Categorias de armazenamento de variáveis escalares - Variáveis Estáticas: Globais e STATICs - Variáveis Stack-Dinâmicas (RAs): - Tipos estaticamente vinculados - Elaboração em tempo de execução - Variáveis Heap-Dinâmicas Explícitas - Instruções explícitas (alocação / desalocação) - Garbage Collection (Java) - Tipos estaticamente vinculados - Elaboração em tempo de execução - Acessadas por ponteiros (C) ou referências (Java)
37
Código
DadosEstáticos
Pilha
Heap
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
38
VINCULAÇÃOVINCULAÇÃO 3 – Vinculação de armazenamento - Variáveis Estáticas: Globais e STATICs - Variáveis Stack-Dinâmicas (RAs) - Variáveis Heap-Dinâmicas Explícitas - Variáveis Heap-Dinâmicas Implícitas - Vinculadas ao armazenamento na atribuição - Todos os atributos são vinculados na atribuição
39
Código
DadosEstáticos
Pilha
Heap
MemóriaBaixa
MemóriaAlta
VINCULAÇÃOVINCULAÇÃO Modelo de memória em tempo de execucão
40
TIPOSTIPOS 1 – Verificação de tipos 2 – Tipificação forte 3 – Compatibilidade de tipos
41
TIPOSTIPOS 1 – Verificação de tipos - Estática ou dinâmica - Coerção - Relação entre verificação e vinculação - Quantos antes, melhor 2 – Tipificação forte
3 – Compatibilidade de tipos
42
TIPOSTIPOS 1 – Verificação de tipos - Estática ou dinâmica - Coerção - Relação entre verificação e vinculação - Quantos antes, melhor 2 – Tipificação forte - Erros de tipo sempre são detectados - Enfraquecida pela coerção 3 – Compatibilidade de tipos
43
TIPOSTIPOS 1 – Verificação de tipos - Estática ou dinâmica - Coerção - Relação entre verificação e vinculação - Quantos antes, melhor 2 – Tipificação forte - Erros de tipo sempre são detectados - Enfraquecida pela coerção 3 – Compatibilidade de tipos - Compatibilidade de nome e de estrutura - Discussão sobre Pascal, C, C++ e Java
44
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas
45
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas
procedure big; var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ..x.. end; begin end;
46
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas
procedure big; var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ..x.. end; begin end;
47
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas
procedure big; var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ..x.. end; begin end;
48
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas
procedure big; var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ..x.. end; begin end;
49
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas
procedure big; var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ..x.. end; begin end;
50
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas 2 – Blocos - Variáveis stack-dinâmicas - Blocos não baseado em procedimentos: Pascal, C e Java
51
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas 2 – Blocos - Variáveis stack-dinâmicas - Blocos não baseado em procedimentos: Pascal, C e Java
if (list[i] < list[j]){ int temp; temp = list[i]; list[i] = list[j]; list[j] = temp;}
52
ESCOPOESCOPO 1 – Escopo estático - Hierarquia de escopos: Pascal, C, C++ e Java - Pai estático e Ancestrais estáticos - Declarações ocultas 2 – Blocos - Variáveis stack-dinâmicas - Blocos não baseado em procedimentos: Pascal, C e Java 3 – Avaliação do escopo estático - Demasiada visibilidade (variáveis e procedimentos) - Variáveis globais
53
ESCOPOESCOPO 4 – Escopo dinâmico - Baseado na seqüência de chamadas - Escopo determinado em tempo de execução - Pai dinâmico e Ancestrais dinâmicos
54
ESCOPOESCOPO 4 – Escopo dinâmico - Baseado na seqüência de chamadas - Escopo determinado em tempo de execução - Pai dinâmico e Ancestrais dinâmicos procedure big;
var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ... end; begin end;
55
ESCOPOESCOPO 4 – Escopo dinâmico - Baseado na seqüência de chamadas - Escopo determinado em tempo de execução - Pai dinâmico e Ancestrais dinâmicos procedure big;
var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ... end; begin end;
sub1sub2
56
ESCOPOESCOPO 4 – Escopo dinâmico - Baseado na seqüência de chamadas - Escopo determinado em tempo de execução - Pai dinâmico e Ancestrais dinâmicos procedure big;
var x : integer; procedure sub1; begin ..x.. end; procedure sub2; var x : integer; begin ... end; begin end;
sub1big
57
ESCOPOESCOPO 4 – Escopo dinâmico - Baseado na seqüência de chamadas - Escopo determinado em tempo de execução - Pai dinâmico e Ancestrais dinâmicos 5 – Avaliação do escopo dinâmico - Incapacidade de realizar análise estática de tipos - Confusão no significado das referências (documentação) - Eficiência no acesso é menor do que escopo estático
58
COMPLEMENTOCOMPLEMENTO 1 – Escopo x Tempo de vida - Escopo estático => Espacial Tempo de vida => Temporal - C, C++ e Java => Especificador STATIC - Chamadas a subprogramas
59
COMPLEMENTOCOMPLEMENTO
void printheader(){ .........}void compute(){ int sum; printheader();}
1 – Escopo x Tempo de vida - Escopo estático => Espacial Tempo de vida => Temporal - C, C++ e Java => Especificador STATIC - Chamadas a subprogramas
60
COMPLEMENTOCOMPLEMENTO
void printheader(){ .........}void compute(){ int sum; printheader();}
1 – Escopo x Tempo de vida - Escopo estático => Espacial Tempo de vida => Temporal - C, C++ e Java => Especificador STATIC - Chamadas a subprogramas
61
COMPLEMENTOCOMPLEMENTO 1 – Escopo x Tempo de vida - Escopo estático => Espacial Tempo de vida => Temporal - C, C++ e Java => Especificador STATIC - Chamadas a subprogramas
2 – Ambientes de referenciamento - Subprograma ativo - Escopo dinâmico: Locais + Subprogramas ativos
62
COMPLEMENTOCOMPLEMENTO 1 – Escopo x Tempo de vida - Escopo estático => Espacial Tempo de vida => Temporal - C, C++ e Java => Especificador STATIC - Chamadas a subprogramas
2 – Ambientes de referenciamento - Subprograma ativo - Escopo dinâmico: Locais + Subprogramas ativos
3 – Constantes nomeadas
63
COMPLEMENTOCOMPLEMENTO 1 – Escopo x Tempo de vida - Escopo estático => Espacial Tempo de vida => Temporal - C, C++ e Java => Especificador STATIC - Chamadas a subprogramas
2 – Ambientes de referenciamento - Subprograma ativo - Escopo dinâmico: Locais + Subprogramas ativos
3 – Constantes nomeadas
4 – Inicializacão de variáveis
64
EXERCÍCIOSEXERCÍCIOS 2 – Algumas linguagens de programação são sem tipos. Quais são as vantagens e desvantagens evidentes de não se ter tipos em uma linguagem?
65
EXERCÍCIOSEXERCÍCIOS 2 – Algumas linguagens de programação são sem tipos. Quais são as vantagens e desvantagens evidentes de não se ter tipos em uma linguagem?
5 – A vinculação dinâmica de tipos está estreitamente relacionada com as variáveis heap-dinâmicas. Explique essa relação.
66
EXERCÍCIOSEXERCÍCIOS 2 – Algumas linguagens de programação são sem tipos. Quais são as vantagens e desvantagens evidentes de não se ter tipos em uma linguagem?
5 – A vinculação dinâmica de tipos está estreitamente relacionada com as variáveis heap-dinâmicas. Explique essa relação.
6 – Descreve uma situação onde uma variável sensível à história em um subprograma é útil.
67
EXERCÍCIOSEXERCÍCIOS 8 – Escopo estático x Escopo dinâmico. 9 – Escopo estático x Escopo dinâmico. 10 – Escopo estático x Escopo dinâmico. 11 – Escopo estático 12 – Blocos 13 – Escopo dinâmico 14 – Escopo dinâmico