Nomes, Variáveis
e Vinculações
Paradigmas de Programação
Prof. Gláucya Carreiro Boechat
[email protected]
Nomes

Toda linguagem de programação possui
“nomes” com significados pré-definido


As linguagens usam os nomes assim como
os humanos:


O nome identifica ações que deve ser executada.
Identificar variáveis, rotinas,ou construções de
programa
Linguagem Imperativa são abstrações da
arquitetura do computador de Von Neumann

Processador e Memória
Paradigmas de Programação prof Gláucya Carreiro Boechat
2
Von Neumann
Paradigmas de Programação prof Gláucya Carreiro Boechat
3
Nomes

Considerações acerca de um nome:
Qual o comprimento máximo de um nome ?
As palavras especiais são palavras reservadas
ou palavras-chave?
Existe distinção entre maiúsculas e minúsculas ?
Podem ser utilização de Caracteres de Conexões ?
($ ? # @ ~ ; : / \ | ...)
Paradigmas de Programação prof Gláucya Carreiro Boechat
4
Nome - Tamanho

As primeiras Linguagens utilizavam nomes com
apenas 1 caracter, pois eram basicamente
matemáticas.

Exemplos de linguagens:





FORTRAN I: máximo de 6
FORTRAN 90 e C: máximo de 31
COBOL : máximo de 30
Ada e Java: sem limite
C++: sem limite, mas implementadores geralmente impõem
limites
Paradigmas de Programação prof Gláucya Carreiro Boechat
5
Nome – Caracteres de Conexão

Caracteres de conexão

Exemplo

(
_
)

Pascal, Modula-2 e FORTRAN 77 não permitem

Linguagens mais recentes permitem

Java, .NET
Paradigmas de Programação prof Gláucya Carreiro Boechat
6
Nome - Distinção entre maiúsculas e Minúsculas

Desvantagem:

Problema de Legibilidade

nomes semelhantes são diferentes



Nomes em C, C++, Modula-2 e em Java fazem
distinção entre maiúscula e minúscula
Em Java

Converter string em inteiro



rest, Rest,ResT, REST,
parseInt
ParseInt e parseint (não são reconhecidas)
FORTAN anteriores ao 90

Somente letras maiúsculas podiam ser usadas em nomes
Paradigmas de Programação prof Gláucya Carreiro Boechat
7
Palavras Especiais

São utilizadas para tornar programas mais
legíveis ao denominar ações.

Classificadas como :


Reservadas,
e em algumas, são somente Palavras-Chave.
Paradigmas de Programação prof Gláucya Carreiro Boechat
8
Palavras Especiais

Palavra Reservada:

é independente do contexto e não pode ser
utilizada como um nome.

Exemplo:

na linguagem Pascal


integer
char.
Paradigmas de Programação prof Gláucya Carreiro Boechat
9
Palavras Especiais

Uma Palavra-Chave é uma palavra que é
especial em certos contextos,

por exemplo em FORTRAN



Real a (palavra-chave – seguida de um nome)
Real = 3.4 (variável – seguida de operador de instrução)
Problemas de legibilidade

FORTRAN


INTEGER REAL
REAL INTEGER
Paradigmas de Programação prof Gláucya Carreiro Boechat
10
Variáveis

Variáveis são abstrações de uma célula de memória
de um computador.

Caracterizada pelos atributos:






Nome
Endereço
Valor
Tipo
Tempo de Vida
Escopo
Paradigmas de Programação prof Gláucya Carreiro Boechat
11
Variáveis - Nome

Nome

Identifica uma entidade (Identificadores).


Int var1;
Nem todas as variáveis têm nome.

Exemplo

variáveis temporárias show( x+y )
Paradigmas de Programação prof Gláucya Carreiro Boechat
12
Variáveis - Endereço

Células Memória
Endereço

Endereço de memória à qual ela está associada.

Uma variável pode ter mais de uma célula de memória


O endereço de uma variável é o endereço de sua primeira
célula de memória.
Uma variável pode ter diferentes endereços em diferentes
lugares no programa

Programa com dois subprogramas
 Sub1
 Sub2
 Definem uma variável com mesmo nome soma,
Independentes uma da outra.
Paradigmas de Programação prof Gláucya Carreiro Boechat
13
Variáveis - Endereço

Células Memória
Apelidos (Aliases)

Os Apelidos existem quando duas ou mais
variáveis apontam para o mesmo endereço de
memória. (C, C++)

Problema para a legibilidade

Permite que uma variável tenha seu valor modifique por
uma atribuição a uma variável dirente
Paradigmas de Programação prof Gláucya Carreiro Boechat
14
Variáveis - Tipo

Tipo

Determina a faixa de valores das variáveis e
o conjunto de operações definidas para os
valores do tipo

FORTRAN


INTEGER


Faixa de Valores
 -32.768 a 32.767
Operações
 Adição, subtração, multiplicação, divisão , etc.
Paradigmas de Programação prof Gláucya Carreiro Boechat
15
Variáveis - Valor

O valor de uma variável


Conteúdo da(s) célula(s) de memória associado a uma
variável.
O valor de uma variável às vezes é conhecido
como r-value (valor à direita) porque é o atributo
necessário para avaliar a expressão que se
encontra do lado direito de uma atribuição.
contador := contador + 1;
(l-value)

(r-value)
Para acessar o r-value, é necessário antes
determinar o l-value (endereço da variável).
Paradigmas de Programação prof Gláucya Carreiro Boechat
16
Variáveis – Tempo de Vida

O tempo de vida de uma variável é o intervalo
de tempo durante o qual um conjunto de células
de memória está vinculado à uma variável.
ALOCAÇÃO
DESALOCAÇÃO
Células Memória
Células Memória
Variável vinculado à
células de memória
tempo de vida
Conjunto de células alocadas
para o armazenamento dos
dados de uma variável
tempo
Células novamente livres,
após a Desalocação
Paradigmas de Programação prof Gláucya Carreiro Boechat
17
O Conceito de Vinculação

Uma vinculação (binding) é uma associação,
como:



Entre um atributo e uma entidade de execução
Entre uma operação e um símbolo
O momento em que uma vinculação se
desenvolve é chamado de tempo de
vinculação
Paradigmas de Programação prof Gláucya Carreiro Boechat
18
Possíveis tempos de Vinculação

Tempo de projeto da linguagem



Vinculação de símbolos de operação à operação,
ex. * (multiplicação)
Tempo de implementação da linguagem

Vinculação de um tipo (float) a um conjunto de
valores possíveis
Paradigmas de Programação prof Gláucya Carreiro Boechat
19
Possíveis tempos de Vinculação

Tempo de Compilação


Tempo de Carregamento


Vinculação de uma variável a um tipo de dado em
particular
Vinculação de uma variável à célula de memória
Tempo de Execução

Vinculação de uma variável local não-estática a
uma célula de memória
Paradigmas de Programação prof Gláucya Carreiro Boechat
20
Vinculação Estática e Dinâmica

Vinculação Estática



Ocorrer antes do tempo de execução e
Permanecer inalterada ao longo da execução de
um programa
Vinculação Dinâmica


Ocorrer durante a execução ou
puder ser modificada no decorrer da execução de
um programa
Paradigmas de Programação prof Gláucya Carreiro Boechat
21
Declaração de Variáveis
- Explícita e Implícita 
Declaração Explícita


Quando uma instrução em um programa que lista
nomes de variáveis e
especifica que elas são de um tipo particular
Paradigmas de Programação prof Gláucya Carreiro Boechat
22
Declaração de Variáveis
- Explícita e Implícita 
Declaração Implícita


Quando o meio de associar variáveis a tipos por
convenções em vez de instruções
Linguagens FORTRAN, PL/I, BASIC e Perl

Vantagem:


capacidade de escrita
Desvantagem:

legibilidade
Paradigmas de Programação prof Gláucya Carreiro Boechat
23
Vinculação Dinâmica de Tipos

Vinculação dinâmica de tipos


(JavaScript e PHP)
A variável é vinculada ao tipo quando lhe é atribuído
algum valor,

por exemplo JavaScript



Vantagem:


list = [2, 4.33, 6, 8];
list = 17.3;
Flexibilidade
Desvantagens:


Alto custo
Difícil detecção de erros
Paradigmas de Programação prof Gláucya Carreiro Boechat
24
Inferência de Tipos

Inferência de tipos (ML, Miranda e Haskell)


Ao invés de uma instrução de atribuição, tipos são
determinados pelo contexto
Em ML,



fun circumf(r) = 3.14159 * r * r;
fun vezes10(x) = 10*x;
ML rejeita a função


fun quadrado(x) = x * x;
Opções



fun quadrado(x:int) = x * x;
fun quadrado(x) = (x:int) * x;
fun quadrado(x) = x * (x:int);
Paradigmas de Programação prof Gláucya Carreiro Boechat
25
Vinculação de Armazenamento

Alocação


Marcar\tomar uma célula de memória de um conjunto de
memória disponível
Desalocação

Devolver a célula ao conjunto de memória disponível
Paradigmas de Programação prof Gláucya Carreiro Boechat
26
Tempo de Vida de uma Variável

inicia


quando ela é vinculada a uma célula específica
encerra

quando ela é desvinculada
Paradigmas de Programação prof Gláucya Carreiro Boechat
27
Variáveis – Tempo de Vida

Classificação de acordo com o tempo de vida
Variáveis Estáticas.
Variáveis Dinâmicas em Pilha (stack).
Variáveis Dinâmicas em Heap Explícitas.
Variáveis Dinâmicas em Heap Implícitas.
Paradigmas de Programação prof Gláucya Carreiro Boechat
28
Variáveis Estáticas

As variáveis estáticas



são Vinculadas a células de memória antes que se inicie a
execução do programa
e permanecem vinculadas até que a execução termine.
Exemplo


Vantagem


FORTRAN I, II e VI, variáveis static do C, C++ e JAVA
Eficiência (endereçamento direto).
Desvantagem

Pouca flexibilidade (não permitem recursão)
Paradigmas de Programação prof Gláucya Carreiro Boechat
29
Variáveis Dinâmicas em Pilha (stack)



São aquelas cuja a vinculações criam-se a
partir da elaboração de suas instruções de
declaração, mas seus tipos são vinculados
estaticamente.
A elaboração ocorre em tempo de execução
Exemplo

Variáveis locais em subprogramas C e métodos
em Java
Paradigmas de Programação prof Gláucya Carreiro Boechat
30
Variáveis Dinâmicas em Pilha (stack)

Vantagem:



permite recursão;
compartilhamento de espaço de memória
Desvantagens:

Sobrecarga de alocação e de desalocação em
tempo de execução
Paradigmas de Programação prof Gláucya Carreiro Boechat
31
Variáveis Dinâmicas em Pilha

Exemplo:


Procedimento A chama Procedimento B.
A variável Y do procedimento B é vinculada na Pilha.
Procedimento
B
Procedimento
A
int Y
int X
Paradigmas de Programação prof Gláucya Carreiro Boechat
32
Variáveis Dinâmicas em Pilha

Exemplo:

Procedimento B encerra a sua execução
liberando a memória destinada ao procedimento
B com a variável Y.
Procedimento
A
int X
Paradigmas de Programação prof Gláucya Carreiro Boechat
33
Variáveis Dinâmicas no Heap Explícitas

Variáveis Dinâmicas em Heap Explícitas



células de memória sem nome alocadas (abstratas) e
desalocadas por instruções explícitas em tempo de
execução, especificadas pelo programador.
Essas variáveis alocadas no Heap e desalocadas para o
Heap só podem ser referenciadas por meio de variáveis de
ponteiro ou de referência
heap

conjunto de células de armazenamento desorganização,
devido ao fato de seu uso ser imprevisível.
Paradigmas de Programação prof Gláucya Carreiro Boechat
34
Variáveis Dinâmicas no Heap Explícitas

Exemplo:



Objetos dinâmicos em C++ (new e delete)
Todos os objetos em Java
Vantagem:

Convenientes para estruturas dinâmicas:



listas encadeadas
árvores
Desvantagens:


Dificuldade em usar ponteiros e referência
Custo das referências para as alocações e desalocações
Paradigmas de Programação prof Gláucya Carreiro Boechat
35
Variáveis Dinâmicas em Heap Explícitas


As variáveis dinâmicas em heap implícitas são
vinculadas ao armazenamento do heap somente
quando lhe são atribuídos valores.
Alocação e desalocação causadas por instruções
de atribuição



Vantagem


Todas as variáveis em APL
Todas as strings e vetores em Perl e em JavaScript
Flexibilidade
Desvantagens


Ineficiente, pois todos os atributos são dinâmicos
Perda de grande parte da capacidade de detectar erros
Paradigmas de Programação prof Gláucya Carreiro Boechat
36
Variáveis Dinâmicas em Heap Implícitas

Exemplo


pode ser encontrado nos array flex da linguagem ALGOL68.
arrays dinâmicos permitem que não sejam especificados
limites de subscrito em sua declaração.

Por exemplo, no array lista definido abaixo, o espaço do heap só
será alocado após a atribuição:
flex [1:0] int lista
...
Lista := (4, 2, 3, 7)
Paradigmas de Programação prof Gláucya Carreiro Boechat
Neste momento a
memória foi alocada
37
Download

Paradigmas - Variáveis: nomes, vinculações, verificação de tipos e