Sunteți pe pagina 1din 8

Fluxo de Informao entre CPU e a

Memria

Nomes, Variveis
e Vinculaes

Memria
Read

C := A+B

Instruo

Read
Read

CPU

11

Write

Nomes

Toda linguagem de programao possui


nomes com significados pr-definido.

As linguagens usam os nomes assim como os


humanos:

O nome identifica aes que deve ser executada.

Nomes

Identificar variveis, rotinas, ou construes de


programa

Variveis so locais onde armazenamos


valores na memria.
Toda varivel caracterizada por um nome,
que a identifica em um programa, e por um
tipo, que determina o que pode ser
armazenado naquela varivel.

Linguagem Imperativa so abstraes da


arquitetura do computador de Von Neumann

Processador e Memria

Von Neumann

Nomes

Consideraes acerca de um nome:


Qual o comprimento mximo de um nome ?
As palavras especiais so palavras reservadas
ou palavras-chave?

Existe distino entre maisculas e minsculas ?


Podem ser utilizao de Caracteres de Conexo ?
($ ? # @ ~ ; : / \ | ...)

Nome - Comprimento

As primeiras Linguagens utilizavam nomes com


apenas 1 caractere, pois eram basicamente
matemticas.

Nomeao de Variveis

Perguntas:

Exemplos de linguagens:
FORTRAN I: mximo de 6
FORTRAN 90 e C: mximo de 31
COBOL : mximo de 30
Ada e Java: sem limite
VBA: 255 caracteres
C: ilimitado, mas os 31 primeiros devem ser nicos
C++: sem limite, mas implementadores geralmente impem
limites

O desempenho de um programa afetado pelo


comprimento do nome atribudo s variveis?
Todas as varveis obrigatoriamente devem ter um
nome?

Nome Caracteres de Conexo

Caracteres especiais

Caracteres de conexo:

Exemplo
(

PHP: nomes de variveis precisam iniciar


com $;

Perl: o nome se inicia com um caractere


especial que indica o tipo: $ escalar, @ array
e % hash;

Ruby: variveis de instncia se iniciam com


@ e variveis de classe com @@

Pascal, Modula-2 e FORTRAN 77 no os permitem


Linguagens mais recentes permitem:
Java, dot NET

Nome - Distino entre maisculas e


Minsculas

Desvantagem:

Nome - Distino entre maisculas e


Minsculas

Problema de Legibilidade

nomes semelhantes so diferentes


critrio de legibilidade: nomes que so lidos da mesma forma
denotam entidades diferentes. Ex:

rest, Rest,ResT, REST

Nomes em C, C++, Modula-2, C# e em Java fazem


distino entre maiscula e minscula;
Em Java:

Mtodo para converter string em inteiro. So diferentes?

Vantagem:

usado para diferenciar tipos de entidades, ex. variveis e constantes.

parseInt
( o correto!)
ParseInt e parseint (no so reconhecidas)

Nomes predefinidos (bibliotecas) em Java e C# incluem


maisculas e minsculas (bom ou ruim?)

Verses de FORTAN anteriores ao FORTRAN90

Somente letras maisculas podiam ser usadas em nomes

Palavras Especiais

Palavras Especiais

So utilizadas para tornar programas mais


legveis ao denominar aes.

nomeiam aes (ex. DO, REPEAT, etc.)


separadores de unidades sintticas (ex. BEGIN,
END, etc.)

Palavra Reservada:

independente do contexto e no pode ser


utilizada como um nome.

Exemplo:

na linguagem C

Classificadas como :

Reservadas,
e em algumas, so somente Palavras-Chave.

int
char.

Palavras Especiais

Variveis

Uma Palavra-Chave uma palavra que


especial em certos contextos,

Variveis so abstraes de uma clula de memria


de um computador.

Caracterizada por 6 atributos:

por exemplo em FORTRAN

Real a (palavra-chave seguida de um nome)


Real = 3.4 (varivel seguida de operador de instruo)

Problemas de legibilidade

FORTRAN

INTEGER REAL (neste caso Real nome de uma varivel)


REAL INTEGER ( aqui REAL utilizado como palavra chave)

Nome
Endereo
Valor
Tipo
Tempo de Vida
Escopo

Variveis - Nome

Variveis - Endereo
Clulas Memria

Nome

Identifica uma entidade (Identificadores).

Int var1;

Nem todas as variveis tm nome.

Endereo:

Endereo da posio de memria qual ela est


associada.

Uma varivel pode ocupar mais de uma clula de memria

Exemplo

O endereo de uma varivel o endereo de sua primeira


clula de memria.

variveis temporrias show( x+y ) no apresentam nome!

Uma varivel pode ter diferentes endereos em diferentes


lugares no programa

Programa com dois subprogramas


Sub1
Sub2
Definem uma varivel com mesmo nome soma,
Independentes uma da outra.

Variveis - Endereo

Variveis - Tipo
Clulas Memria

Apelidos (Aliases)
Os Apelidos existem quando duas ou mais
variveis apontam para o mesmo endereo
de memria. (C, C++).

Tipo

Determina a faixa de valores das variveis e


o conjunto de operaes definidas para os
valores do tipo

FORTRAN

Ou seja, vrias variveis tero o mesmo


endereo!

INTEGER

Dificulta a legibilidade

Possibilita que uma varivel tenha seu valor modificado


por uma atribuio a um outro nome de varivel

Variveis - Valor

O valor de uma varivel

Contedo da(s) clula(s) de memria associado a uma


varivel.

Faixa de Valores
-32.768 a 32.767
Operaes
Adio, subtrao, multiplicao, diviso , etc.

Variveis Tempo de Vida

O valor de uma varivel s vezes conhecido como rvalue (valor direita) porque o atributo necessrio
para avaliar a expresso que se encontra do lado
direito de uma atribuio.

O tempo de vida de uma varivel o intervalo


de tempo durante o qual um conjunto de clulas
de memria est vinculado uma varivel.
ALOCAO

(l-value)

(r-value)

valor-r (right-value, valor da direita): seu valor


valor-l (left-value, valor da esquerda): seu endereo

Para acessar o r-value, necessrio antes determinar


o l-value (endereo da varivel).

tempo de vida
Conjunto de clulas alocadas
para o armazenamento dos
dados de uma varivel

Associao de uma entidade de uma LP a


elementos de seu significado (semntica).
Ex:

um tipo a um intervalo de valores;


uma varivel a um tipo;
uma varivel a um clula de memria; etc.

Clulas novamente livres,


aps a Desalocao

Uma vinculao (binding) uma associao,


como:

smbolos de operadores operaes:

tempo

O Conceito de Vinculao ou Binding

O Conceito de Vinculao

Clulas Memria

Varivel vinculado
clulas de memria

contador := contador + 1;

DESALOCAO

Clulas Memria

Entre um atributo e uma entidade de execuo;


Entre uma operao e um smbolo.

O momento em que uma vinculao se


desenvolve chamado de tempo de
vinculao.

Possveis tempos de Vinculao

Possveis tempos de Vinculao

Tempo de projeto da linguagem:

Vinculao de smbolos de operadores a


operaes, tipos possveis de variveis;
ex. * (multiplicao).

Tempo de Compilao

Tempo de Carregamento

Tempo de implementao da linguagem:

Vinculao de um tipo (float) a um conjunto de


valores possveis;
ex. tipos numricos a intervalo representvel.

Vinculao de uma varivel a um tipo de dado em


particular;
ex.: variveis a tipos (C, Pascal, Java, etc.).

Vinculao de uma varivel clula de memria;


ex.:variveis estticas a clulas de memria.

Tempo de Execuo

Vinculao de uma varivel local no-esttica a uma


clula de memria;
ex. variveis no-estticas a clulas de memria,
valores de variveis.

Declarao de Variveis
- Explcita e Implcita -

Vinculao Esttica e Dinmica

Vinculao Esttica

Ocorre antes do tempo de execuo e


Permanece inalterada ao longo da execuo de um
programa.

Vinculao Dinmica

Ocorre durante a execuo (ex. valores a variveis)


ou
pode ser modificada no decorrer da execuo de um
programa (ex. clula de memria de varivel num
programa recursivo).

Os tipos de variveis so especificados atravs de


convenes que se aplicam na 1 ocorrncia do nome
da varivel no programa.

Ex.: Perl: variveis de tipos string e numrico comeam com $,


de tipo array com @, etc.
Ex.: FORTRAN: variveis sem declarao explicita

(JavaScript e PHP)

A varivel vinculada ao tipo quando lhe atribudo


algum valor,

por exemplo JavaScript

As que comeam comas letras de L a N tm declarao implcita


como sendo INTEGER, e as demais como REAL.

convenincia na programao

Desvantagem:

O tipo da varivel determinado pelo tipo do valor,


varivel ou expresso a ela atribudo quando o
comando de atribuio executado;
Vinculao dinmica de tipos:

Vantagem:

Quando uma instruo de um programa lista


nomes de variveis e especifica (declara) que
elas so de um tipo particular.

Vinculao Dinmica de Tipos

Declarao Implcita:

Declarao Explcita

Declarao de Variveis
- Explcita e Implcita

Vinculaes de Tipos
1. Como um tipo especificado?
2. Quando a vinculao acontece?

LIST = [10.2 5.1 0.0] -> (LIST um array de reais com trs
posies);
LIST = 47; -> (LIST um inteiro).

Mais comum em linguagens interpretadas.

Legibilidade, erros difceis de detectar quando tipos no so


intencionais

Inferncia de Tipos

Vinculao Dinmica de Tipos

Vantagem: flexibilidade na programao leva a


programas mais genricos
Desvantagens:

Inferncia de tipos (ML, Miranda e Haskell)

capacidade de deteco de erros pelo compilador


diminuda;
ex. : i e x inteiros , y - array
i=y
custo: maior espao para armazenamento de variveis e
gerenciamento de memria dificultado

Ao invs de uma instruo de atribuio, tipos so


determinados pelo contexto.

Em ML,

fun circumf(r) = 3.14159 * r * r;


// r inferido real
fun vezes10(x) = 10*x;
// r inferido inteiro
fun quadrado(x) = x * x; // erro: tipo no pode ser inferido
fun quadrado(x): int = x * x; // declarao explcita

Opes

Tempo de Vida de uma Varivel

Vinculao de Armazenamento

Alocao

inicia

Marcar\tomar uma clula de memria de um


conjunto de memria disponvel

Desalocao

fun quadrado(x:int) = x * x;
fun quadrado(x) = (x:int) * x;
fun quadrado(x) = x * (x:int);

encerra

Devolver a clula ao conjunto de memria


disponvel

quando ela vinculada a uma clula de memria


especfica

quando ela desvinculada

Variveis Tempo de Vida

Variveis Estticas

Categorias de variveis de acordo com


vinculao de armazenamento:

As variveis estticas:

Variveis Estticas.
Variveis Dinmicas em Pilha (stack).

FORTRAN I, II e VI, variveis static do C, C++ e JAVA.

Vantagem:

Desvantagens:

Variveis Dinmicas em Heap Explcitas.

so vinculadas a clulas de memria antes que se inicie a


execuo do programa;
e permanecem vinculadas at que a execuo termine;
Exemplo

Variveis Dinmicas em Heap Implcitas.

Eficincia (endereamento direto, aloca uma s vez).


flexibilidade de programao reduzida no suporta recurso,
j que cada cpia ativa do subprograma precisa de sua prpria
verso das variveis locais;
Custo computacional as clulas de memria no podem ser
compartilhadas.

Variveis Dinmicas em Pilha (stack)

Variveis Dinmicas em Pilha (stack)

So aquelas cuja a vinculaes criam-se a


partir da elaborao de suas instrues de
declarao, mas seus tipos so vinculados
estaticamente;
A elaborao ocorre em tempo de execuo;
Exemplo:

Vantagem:

Desvantagens:

Variveis locais em subprogramas C e mtodos


em Java.

Variveis Dinmicas em Pilha

Procedimento A chama Procedimento B.


A varivel Y do procedimento B vinculada na Pilha.
Procedimento
B

Procedimento
A

Exemplo:

int Y

int X

Variveis Dinmicas em Heap Explcitas

clulas de memria sem nome alocadas (abstratas) e


desalocadas por instrues explcitas em tempo de
execuo, especificadas pelo programador;
Essas variveis alocadas no Heap e desalocadas para o
Heap s podem ser referenciadas por meio de variveis de
ponteiro ou de referncia.

Heap

conjunto de clulas de armazenamento desorganizado,


devido ao fato de seu uso ser imprevisvel.

int X

Variveis Dinmicas no Heap


FF
Explcitas

Exemplo:

Objetos dinmicos em C++ (new e delete);


Todos os objetos em Java.
Convenientes para estruturas dinmicas:

C0
BF Stack

Vantagem:

Procedimento B encerra a sua execuo, liberando


a memria destinada ao procedimento B com a
varivel Y.

Procedimento
A

Variveis Dinmicas no Heap


Explcitas

Sobrecarga para alocao e de desalocao em


tempo de execuo.

Variveis Dinmicas em Pilha

Exemplo:

permite recurso;
compartilhamento de espao de memria

listas encadeadas;
rvores.

Desvantagens:

Dificuldade em usar ponteiros e referncia.


Custo das referncias para as alocaes e
desalocaes.

80
7F

Heap
40 DLLs
3F

Heap
Data

08 Text
00

Variveis Dinmicas em Heap Explcitas

As variveis dinmicas em heap implcitas so


vinculadas ao armazenamento do heap somente
quando lhe so atribudos valores.
Alocao e desalocao causadas por instrues de
atribuio:

Exemplo

pode ser encontrado nos array flex da linguagem ALGOL68.


arrays dinmicos permitem que no sejam especificados
limites de subscrito em sua declarao.

Por exemplo, no array lista definido abaixo, o espao do heap s


ser alocado aps a atribuio:

Vantagem:

Todas as variveis em APL


Todas as strings e vetores em Perl e em JavaScript

Variveis Dinmicas em Heap Implcitas

Flexibilidade

Desvantagens:

flex [1:0] int lista

Ineficiente, pois todos os atributos so dinmicos


Perda de grande parte da capacidade de detectar erros

Layout de Memria
(Viso do Processo)

...
Lista := (4, 2, 3, 7)

Neste momento a
memria foi alocada

Memria
Kernel

Processo: programa em execuo


Cdigo: cdigo binrio do programa
Dados: dados estticos
Heap: dados dinmicos
Stack: chamada de subrotinas e
variveis locais

Cdigo
Dados
Heap

Stack

S-ar putea să vă placă și