![Page 1: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/1.jpg)
Linguagens de Programação Conceitos e Técnicas
Amarrações
![Page 2: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/2.jpg)
Amarrações
Linguagens de Programação 2
Conceituação
Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador e um tipo
Enfoque na amarração de identificadores a entidades
Alguns textos (ex. T&N) usam o termo “ligação” para se referir à amarração
![Page 3: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/3.jpg)
Amarrações
Linguagens de Programação 3
Tempos de Amarração
Amarração Estática X Dinâmica
Identifica-dor ou Símbolo
Entidade
Tempo de Amarração
*
Operação de multiplicação
projeto da LP
int
Intervalo de inteiros
projeto da LP (JAVA) implementação do compilador (C)
variável
Tipo
compilação (C) execução (polimorfismo em C++) função
Código correspondente da função
ligação
v a r i á v e l global
Variável em memória
carga do programa
v a r i á v e l local
Variável em memória
execução
![Page 4: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/4.jpg)
Amarrações
Linguagens de Programação 4
Identificadores Identificadores são cadeias de caracteres definidas
pelos programadores para servirem de referência a entidades de computação
Objetivam aumentar a legibilidade, redigibilidade e modificabilidade
LPs podem ser case sensitive e limitar o número máximo de caracteres
Alguns identificadores podem ter significado especial para a LP Palavras reservadas ≠ Palavra Chave ≠ Palavras Pré-definidas FORTRAN INTEGER REAL REAL INTEGER
![Page 5: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/5.jpg)
Reservado / chave / pré-definido
Em Pascal:
Em Java, goto é reservado, mas não é
uma palavra-chave.
Amarrações
Linguagens de Programação 5
if (a < b) = true then f(a) else g(b); …
end.
program confuso; const true = false; begin
…
![Page 6: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/6.jpg)
Amarrações
Linguagens de Programação 6
Ambientes de Amarração A interpretação de comandos e expressões,
tais como a = 5 ou g(a + 1), dependem do que denotam os identificadores utilizados nesses comandos e expressões
Um ambiente (ou environment) é um conjunto de amarrações
Cada amarração possui um determinado escopo, isto é, a região do programa onde a entidade é visível
![Page 7: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/7.jpg)
Amarrações
Linguagens de Programação 7
Ambientes de Amarração Amarração de Identificador a Duas Entidades
Distintas no Mesmo Ambiente int a = 13; void f() { int b = a; int a = 2; b = b + a; }
A variável b termina f() valendo 15
![Page 8: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/8.jpg)
Escopo
O escopo de um nome é a coleção de comandos que podem acessar essa ligação de nome [T&N].
Amarrações
Linguagens de Programação 8
![Page 9: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/9.jpg)
Amarrações
Linguagens de Programação 9
Escopo
Estático (ou léxico) definição do subprograma tempo de compilação texto do programa
Dinâmico chamada do subprograma tempo de execução fluxo de controle do programa
![Page 10: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/10.jpg)
Amarrações
Linguagens de Programação 10
Escopo Dinâmico procedimento sub() { inteiro x = 1; procedimento sub1() { escreva( x);
} procedimento sub2() { inteiro x = 3; sub1();
} sub2(); sub1(); }
![Page 11: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/11.jpg)
Amarrações
Linguagens de Programação 11
Escopo Dinâmico Problemas Eficiência Legibilidade Acesso Confiabilidade
Pouquíssimo usado por LPs APL, SNOBOL4 e versões iniciais de LISP e PERL Common Lisp e Perl suportam os dois tipos.
![Page 12: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/12.jpg)
Amarrações
Linguagens de Programação 12
Escopo Estático
x x
y
z
w
x
y
z
w
x
Bloco Monolítico Blocos Não Aninhados Blocos Aninhados
Escopos não aninhados são ditos “disjuntos” e não compartilham amarrações.
![Page 13: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/13.jpg)
Escopo Estático
Amarrações
Linguagens de Programação 13
Algol C Java Ada
Pacote n/a n/a sim sim
Classe n/a n/a aninhado sim
Função aninhado sim sim aninhado
Bloco aninhado aninhado aninhado aninhado
Laço for não não sim aninhado
![Page 14: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/14.jpg)
Amarrações
Linguagens de Programação 14
Escopo Estático Ocultamento/visibilidade de Entidade em
Blocos Aninhados void main() { int i = 0, x = 10; while (i++ < 100) {
float x = 3.231; printf(“x = %f\n“, x*i);
} }
![Page 15: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/15.jpg)
Amarrações
Linguagens de Programação 15
Escopo Estático Referência Seletiva em ADA
procedure A is x : INTEGER; procedure B is y : INTEGER; procedure C is x : INTEGER; begin x := A.x; end C;
begin null; end B; begin null; end A;
![Page 16: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/16.jpg)
Amarrações
Linguagens de Programação 16
Escopo Estático Referência Seletiva em Java
class Pessoa { private String nome;
public void setNome(String nome) { this.nome = nome; }
public String nome() { return nome; }
}
Ocultamento
Sobrecarga
![Page 17: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/17.jpg)
Sobrecarga
Capacidade de usar o mesmo nome em amarrações diferentes; Deve ser possível distinguir pelo contexto de
uso do identificador. Ex.: em Java System.out.print() aceita
qualquer tipo, distingue pelo parâmetro. Em Modula: WriteInt(), WriteReal(), etc.
Ada e C++ permitem sobrecarga inclusive de operadores (+, -, *, etc.). Java só de métodos.
Amarrações
Linguagens de Programação 17
![Page 18: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/18.jpg)
Amarrações
Linguagens de Programação 18
Escopo Estático Problemas com Estrutura Aninhada
P
A B C
D E D
P
A B C
E
D
a b
![Page 19: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/19.jpg)
Amarrações
Linguagens de Programação 19
Escopo Estático Estrutura de Blocos de C int x = 10; int y = 15; void f() { if (y – x) { int z = x + y; } } void g() { int w; w = x; }
void main() { f(); x = x + 3; g(); }
![Page 20: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/20.jpg)
Escopo vs. tempo de vida
Em Algol-like, escopo = tempo de vida; Pode causar problemas:
Solução:
Amarrações
Linguagens de Programação 20
void conta() { int contador = 0; ...
}
void conta() { static int contador = 0; ...
}
![Page 21: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/21.jpg)
Amarrações
Linguagens de Programação 21
Definições e Declarações
Definições produzem amarrações entre identificadores e entidades criadas na própria definição
Declarações produzem amarrações entre identificadores e entidades já criadas ou que ainda o serão
![Page 22: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/22.jpg)
Amarrações
Linguagens de Programação 22
Definições e Declarações
Localização de Definições de Variáveis em C++ void f() {
int a = 1; a = a + 3; int b = 0; b = b + a;
}
![Page 23: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/23.jpg)
Amarrações
Linguagens de Programação 23
Declaração de Constantes
Em C const float pi = 3.14; #define pi 3.14
Em JAVA final int const1 = 9; static final int const2 = 39; final int const3 = (int)(Math.random()*20); static final const4 = (int)(Math.random()*20); final int j; Construtor () { j = 1; }
![Page 24: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/24.jpg)
Amarrações
Linguagens de Programação 24
Definições e Declarações de Tipos
struct data { int d, m, a;
};
union angulo { int graus;
float rad; };
enum dia_util { seg, ter, qua,
qui, sex };
Definições Tipos em C
Declarações Tipos em C struct data;
typedef union angulo curvatura; typedef struct data aniversario;
![Page 25: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/25.jpg)
Amarrações
Linguagens de Programação 25
Definições e Declarações de Variáveis
Definições de Variáveis em C int k; union angulo ang; struct data d; int *p, i, j, k, v[10];
Definições com Inicialização int i = 0; char virgula = ','; float f, g = 3.59; int j, k, l = 0, m=23;
![Page 26: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/26.jpg)
Amarrações
Linguagens de Programação 26
Definições e Declarações de Variáveis
Definições com Inicialização Dinâmica void f(int x) { int i; int j = 3; i = x + 2; int k = i * j * x; }
Definições com Inicialização em Variáveis Compostas int v[3] = { 1, 2, 3 };
![Page 27: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/27.jpg)
Amarrações
Linguagens de Programação 27
Definições e Declarações de Variáveis
Declaração de Variáveis em C extern int a;
Declaração de Variáveis em C++ int r = 10; int &j = r; j++;
![Page 28: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/28.jpg)
Amarrações
Linguagens de Programação 28
Definições e Declarações de Subprogramas
Definição de Subprogramas em C int soma (int a, int b) { return a + b; }
Declaração de Subprogramas em C int incr (int); void f(void) { int k = incr(10); } int incr (int x) { x++; return x; }
![Page 29: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/29.jpg)
Amarrações
Linguagens de Programação 29
Definições Compostas Sequenciais Definições Seqüenciais em C
struct funcionario { char nome [30]; int matricula; float salario; }; struct empresa { funcionario listafunc [1000]; int numfunc; float faturamento; }; int m = 3; int n = m;
![Page 30: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/30.jpg)
Amarrações
Linguagens de Programação 30
Definições Compostas Sequenciais
Definições Seqüenciais em ML val par = fn (n: int) => (n mod 2 = 0) val negacao = fn (t: bool) => if t then false else true val impar = negacao o par val jogo = if x < y then par else impar
![Page 31: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/31.jpg)
Amarrações
Linguagens de Programação 31
Definições Compostas Recursivas Definição Recursiva
de Função em C float potencia (float x, int n) {
if (n == 0) { return 1.0;
} else if (n < 0) { return 1.0/ potencia (x, -n);
} else { return x * potencia (x, n - 1);
} }
Tipo Recursivo em C struct lista { int elemento; struct lista * proxima; };
![Page 32: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/32.jpg)
Amarrações
Linguagens de Programação 32
Definições Compostas Recursivas Definições Mutuamente Recursivas em C
void segunda (int); void primeira (int n) { if (n < 0) return; segunda (n – 1); } void segunda (int n) { if (n < 0) return; primeira (n – 1); }
![Page 33: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/33.jpg)
Amarrações
Linguagens de Programação 33
Definições Compostas Recursivas Erro em Definição de Função strcmp em C
int strcmp (char *p, char *q) { return !strcmp (p, q); }
Explicitação de Recursividade em Função ML val rec mdc = fn ( m:int, n: int) = >
if m > n then mdc (m – n, n) else if m < n then mdc (m, n – m) else m
![Page 34: Linguagens de Programação Conceitos e Técnicasvitorsouza/archive/2020/wp-content/uploads/teachi… · projeto da LP (JAVA) implementação do compilador (C) variável Tipo compilação](https://reader033.vdocuments.pub/reader033/viewer/2022053021/5f8b3848ea48172140341d00/html5/thumbnails/34.jpg)
Conclusões
Foi apresentado o conceito de amarração, tempos de amarração, ambientes de amarração, escopo, etc.
Falamos de definições e declarações de constantes, tipos, variáveis e subprogramas;
Nas próximas aulas retomaremos de forma mais aprofundada tipos de dados, variáveis, constantes e subprogramas.
Amarrações
Linguagens de Programação 34