1 aula 4 nomes, vinculações, tipos e escopos universidade do vale do rio dos sinos barbosa...

Post on 17-Apr-2015

104 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 >

barbosa@exatas.unisinos.brbarbosa@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

top related