Anda di halaman 1dari 40

Captulo 5

Nomes, Vinculaes
e Escopos
Conceitos de Linguagens de Programao Robert W. Sebesta

Tpicos do Captulo 5
Introduo
Nomes
Variveis
O conceito de vinculao
Escopo
Escopo e tempo de vida
Ambientes de referenciamento
Constantes nomeadas
Conceitos de Linguagens de Programao Robert W. Sebesta

Introduo
As linguagens de programao imperativas so abstraes da
arquitetura de computadores subjacente de von Neumann
Memria
Processador
Variveis caracterizadas por atributos
Para projetar um tipo, deve-se considerar escopo, tempo de vida das
variveis, inicializao e compatibilidade
Conceitos de Linguagens de Programao Robert W. Sebesta

Nomes
Questes de projeto primrias para nomes:
Os nomes so sensveis a capitalizao?
As palavras especiais da linguagem so palavras reservadas ou
palavras-chave?
Conceitos de Linguagens de Programao Robert W. Sebesta

Nomes
Formato
Se for muito pequeno, no pode ser conotativo
Exemplos:
FORTRAN 95: mximo de 31
C99: sem limitao, mas apenas os 63 so significativos; nomes externos so
restritos a 31 caracteres
C#, Ada e Java: sem limite e todos os caracteres so significativos
C++: sem limite, mas os implementadores s vezes o impem
Conceitos de Linguagens de Programao Robert W. Sebesta

Nomes
Caracteres especiais
PHP: todos os nomes de variveis devem comear com cifro ($)
Perl: todos os nomes de variveis comeam com caracteres especiais,
que especificam o seu tipo
Ruby: nomes de variveis que comeam com @ so variveis de
instncia; as que comeam com @@ so variveis de classe
Conceitos de Linguagens de Programao Robert W. Sebesta

Nomes
Sensibilidade capitalizao
Desvantagem: legibilidade (nomes que so parecidos, mas so diferentes)
Nomes em linguagens baseadas com C so sensveis capitalizao
Nomes em outras no so
Em C++, Java e C#, o problema no pode ser evitado porque muitos dos
nomes pr-definidos incluem tanto letras maisculas quanto minsculas
(por exemplo, IndexOutOfBoundsException)
Conceitos de Linguagens de Programao Robert W. Sebesta

Nomes
Palavras especiais
So usadas para tornar os programas mais legveis ao nomearem as
aes a serem realizadas
Uma palavra-chave uma palavra especial apenas em alguns contextos por
exemplo, em Fortran
Real VarName (Real um tipo de dado acompanhado de um nome, portanto
Real uma palavra-chave)
Real = 3.4 (Real uma varivel)
Uma palavra reservada uma palavra especial que no pode ser usada
como um nome
Problema em potencial com as palavras reservadas: se houver muitas,
o usurio tem dificuldade para inventar nomes (por exemplo, COBOL tem
300 palavras reservadas!)
Conceitos de Linguagens de Programao Robert W. Sebesta

Variveis
Uma varivel uma abstrao de uma clula de memria
Uma varivel pode ser caracterizada como um conjunto de
seis atributos:
Nome
Endereo
Valor
Tipo
Tempo de vida
Escopo
Conceitos de Linguagens de Programao Robert W. Sebesta

Atributos de variveis
Nome nem todas as variveis tm
Endereo - o endereo de memria de mquina ao qual ela est
associada
Uma varivel pode ter diferentes endereos em diferentes momentos
durante a execuo
Uma varivel pode ter diferentes endereos em diferentes lugares em um
programa
Quando dois nomes de variveis podem ser usados para acessar a mesma
posio de memria, elas so chamadas de apelidos (aliases)
Apelidos so criados por ponteiros, variveis de referncia, tipos de unio C
e C++
Apelidos so um problema para a legibilidade (um leitor do programa deve
sempre se lembrar de todos eles)
Conceitos de Linguagens de Programao Robert W. Sebesta

Atributos de variveis
Tipo - determina a faixa de valores que a varivel pode armazenar e o
conjunto de operaes definidas para valores do tipo
Valor - o contedo da(s) clula(s) de memria associada(s) a ela
O lado esquerdo (l-value) de uma varivel seu endereo
O lado direito (r-value) de varivel seu valor
Clula abstrata de memria clula fsica ou coleo de clulas
associadas a uma varivel
Conceitos de Linguagens de Programao Robert W. Sebesta

O conceito de vinculao
Uma vinculao uma associao, como entre um atributo e uma
entidade ou entre uma operao e um smbolo
Tempo de vinculao o momento no qual uma vinculao ocorre
Conceitos de Linguagens de Programao Robert W. Sebesta

Possveis tempos de vinculao


Tempo de projeto de linguagem - vincula smbolos de operadores
a operaes
Tempo de implementao de linguagem vincula tipo de ponto-
flutuante a uma representao
Tempo de compilao vincula uma varivel a um tipo em C ou Java
Tempo de carga vincula uma varivel static de C ou C++ a uma
clula de memria
Tempo de ligao vincula uma varivel local no esttica a uma clula
de memria
Conceitos de Linguagens de Programao Robert W. Sebesta

Vinculaes estticas e dinmicas


Uma vinculao esttica se ocorre pela primeira vez antes do tempo
de execuo e permanece intocada ao longo da execuo do programa
Uma vinculao dinmica se ocorre pela primeira vez durante o tempo
de execuo ou pode ser mudada ao longo do curso da execuo
do programa
Conceitos de Linguagens de Programao Robert W. Sebesta

Vinculao de tipos
Como o tipo especificado?
Quando a vinculao ocorre?
Se for esttico, o tipo pode ser especificado por alguma forma de
declarao explcita ou implcita
Conceitos de Linguagens de Programao Robert W. Sebesta

Declarao explcita/implcita
Uma declarao explcita uma sentena em um programa que lista
nomes de variveis e especifica que elas so de um certo tipo
Uma declarao implcita uma forma de associar variveis a tipos
por meio de convenes padronizadas, em vez de por sentenas
de declarao (primeira apario de um nome de varivel em
um programa)
FORTRAN, BASIC e Perl tm declaraes implcitas (Fortran tem
explcita e implcita)
Vantagem: facilidade de escrita
Desvantagem: confiabilidade (menos problemas com Perl)
Conceitos de Linguagens de Programao Robert W. Sebesta

Vinculao de tipos dinmica


Vinculao de tipos dinmica (JavaScript e PHP)
Especificada por meio de uma sentena de atribuio
por exemplo, JavaScript
list = [2, 4.33, 6, 8];
list = 17.3;
Vantagem: flexibilidade (unidades de programa genricas)
Desvantagens:
Custo elevado
Deteco de erros de tipo pelo compilador difcil
Conceitos de Linguagens de Programao Robert W. Sebesta

Atributos de variveis
Inferncia de tipos (ML, Miranda e Haskell)
Em vez de por sentenas de atribuio, tipos so determinados (pelo
compilador) a partir do contexto da referncia
Vinculaes de armazenamento e tempo de vida
Alocao - obter uma clula de um conjunto de clulas disponveis
Liberao colocar a clula de volta no conjunto
O tempo de vida de uma varivel o tempo durante o qual ela est
vinculada a uma posio especfica da memria
Conceitos de Linguagens de Programao Robert W. Sebesta

Categorias de variveis por tempo de vida


Estticas - vinculadas a clulas de memria antes do incio da execuo
de um programa e permanecem vinculadas a essas mesmas clulas de
memria at que a execuo do programa termine
Vantagens: eficincia (endereamento direto), subprogramas sensveis
ao histrico
Desvantagens: reduo da flexibilidade (sem recurso)
Conceitos de Linguagens de Programao Robert W. Sebesta

Categorias de variveis por tempo de vida


Dinmicas da pilha - Vinculaes de armazenamento so criadas
quando suas sentenas de declarao so elaboradas, mas cujos tipos
so estaticamente vinculados
(A declarao elaborada quando a execuo alcana o cdigo com o
qual a declarao est anexada)
Se escalar, todos os atributos exceto o endereo so vinculados
estaticamente
Variveis locais em subprogramas C e mtodos Java
Vantagem: permite recurso; conserva o armazenamento
Desvantagens:
Sobrecarga da alocao e liberao
Subprogramas no so sensveis ao histrico
Referncias ineficientes (endereamento indireto)
Conceitos de Linguagens de Programao Robert W. Sebesta

Categorias de variveis por tempo de vida


Dinmicas do monte explcitas - Alocadas e liberadas por instrues explcitas
em tempo de execuo
Referenciadas apenas por ponteiros ou variveis de referncia, por exemplo,
objetos dinmicos em C++ (via new e delete), todos os objetos em Java
Vantagem: prev o gerenciamento de armazenamento dinmico
Desvantagem: ineficientes e no confiveis
Conceitos de Linguagens de Programao Robert W. Sebesta

Categorias de variveis por tempo de vida


Dinmicas do monte implcitas Alocadas e liberadas por sentenas de
atribuio
Todas as variveis em APL; todas cadeias e matrizes em Perl, JavaScript
e PHP
Vantagem: flexibilidade (cdigo genrico)
Desvantagens:
Ineficiente, pois todos os atributos so dinmicos
Perda de deteco de erro
Conceitos de Linguagens de Programao Robert W. Sebesta

Atributos de variveis: escopo


O escopo de uma varivel a faixa de sentenas nas quais a varivel
visvel.
As variveis no locais de uma unidade ou de um bloco de programa
so aquelas que esto visveis, mas no so declaradas nessa unidade
ou bloco
As regras de escopo de uma linguagem determinam como uma
ocorrncia em particular de um nome associada com uma varivel
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo esttico
Baseado no texto do programa
Para ligar um nome de referncia para uma varivel, voc (ou o
compilador) deve encontrar a declarao
Processo de busca: declaraes de busca, primeiro localmente, depois
em escopos cada vez maiores, at encontrar o nome dado
Enclosing escopo esttico (para um escopo especfico) so chamados
ancestrais estticos; o mais prximo chamado de pai esttico
Algumas linguagens permitem subprogramas aninhados, que criam
escopos estticos aninhados (por exemplo, Ada, JavaScript, Fortran
2003 e PHP)
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo (continuao)
Variveis podem ser ocultas de outros segmentos de cdigos, uma
unidade com uma varivel com o mesmo nome
Em Ada, variveis ocultas de escopos ancestrais podem ser acessadas
com referncias seletivas, que incluem o nome do escopo ancestral
Exemplo, unit.name
Conceitos de Linguagens de Programao Robert W. Sebesta

Blocos
Um mtodo de criar escopos estticos em unidades de programa - do
ALGOL 60
Exemplo em C:
void sub() {
int count;
while (...) {
int count;
count++;
...
}

}
Note que o cdigo legal em C and C++, mas ilegal em Java e C#
Conceitos de Linguagens de Programao Robert W. Sebesta

Ordem de declarao
C99, C++, Java e C# permitem que as declaraes de variveis
aparecam em qualquer lugar que uma sentena poderia aparecer em
uma unidade de programa
Em C99, C++ e Java, o escopo de todas as variveis locais de suas
declaraes at o final dos blocos
Em C#, o escopo de quaisquer variveis declaradas em um bloco o
bloco inteiro, independentemente da posio da declarao
C# ainda requer que todas as variveis sejam declaradas antes de serem
usadas
Conceitos de Linguagens de Programao Robert W. Sebesta

Ordem de declarao (continuao)


Em C++, Java e C#, variveis podem ser declaradas em sentenas for
O escopo dessas variveis restrito construo for
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo global
C, C++, PHP e Python permitem uma estrutura de programa que uma
sequncia de definio de funes, nas quais as definies de variveis
podem aparecer fora das funes
C e C++ tm declaraes e definies
Uma declarao de uma varivel fora das definies de funes
especifica que a varivel definida em um arquivo diferente
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo global (continuao)


PHP
Programas so embutidos em documentos XHTML
O escopo de uma varivel (implicitamente) declarada em uma funo
local funo
O escopo das variveis globais se estende de suas declaraes at o fim
do programa, mas pulam sobre quaisquer definies de funes
subsequentes
Variveis globais podem ser acessadas em uma funo por meio do vetor
$GLOBALS
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo global (continuao)


Python
Uma varivel global pode ser referenciada em uma funo, mas uma
varivel global pode ter valores atribudos a ela apenas se ela tiver sido
declarada como global na funo
Conceitos de Linguagens de Programao Robert W. Sebesta

Avaliao do escopo esttico


Funciona bem em muitas situaes
Problemas:
Em muitos casos, fornece mais acesso do que necessrio
Como um programa evolui, a estrutura inicial destruda e as variveis
locais muitas vezes se tornam globais
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo dinmico
Baseado na sequncia de chamadas de subprogramas, no em seu
relacionamento espacial uns com os outros
As referncias a variveis so conectadas com as declaraes por meio
de buscas pela cadeia de chamadas a subprograma que foraram a
execuo at esse ponto
Conceitos de Linguagens de Programao Robert W. Sebesta

Exemplo de escopo
Big
- declarao de X
Sub1
- declarao de X -
...
chama Sub2
...
Big chama Sub1
Sub1 chama Sub2
Sub2
... Sub2 usa X
- referncia a X -
...

...
chama Sub1

Conceitos de Linguagens de Programao Robert W. Sebesta

Exemplo de escopo
Escopo esttico
Referncia a X ao X declarado em Big
Escopo dinmico
Referncia a X ao X declarado em Sub
Avaliao do escopo dinmico:
Vantagem: convenincia
Desvantagens:
1. Enquanto um subprograma executado, suas variveis so visveis aos
subprograma que ele chama
2. Impossibilidade de verificar os tipos das referncias a no locais estaticamente
3. Programas so mais difceis de ler
Conceitos de Linguagens de Programao Robert W. Sebesta

Escopo e tempo de vida


Escopo e tempo de vida s vezes parecem ser relacionados, mas so
conceitos diferentes
Considere uma varivel static em uma funo C ou C++
Conceitos de Linguagens de Programao Robert W. Sebesta

Ambientes de referenciamento
O ambiente de referenciamento de uma sentena a coleo de todas
as variveis visveis na sentena
Em uma linguagem de escopo esttico, composto pelas variveis
declaradas em seu escopo local mais a coleo de todas as variveis
de seus escopos ancestrais visveis
Um subprograma est ativo se sua execuo comeou, mas ainda no
terminou
Em uma linguagem de escopo dinmico, composto pelas variveis
declaradas localmente, mais as variveis de todos os outros
subprogramas que esto atualmente ativos
Conceitos de Linguagens de Programao Robert W. Sebesta

Constantes nomeadas
Uma constante nomeada uma varivel que est vinculada a um valor
apenas uma vez
Vantagens: legibilidade e confiabilidade
Usadas para parametrizar programas
A vinculao de valores a constantes nomeadas podem ser estticas
(chamadas de constantes de manifesto) ou dinmicas
Linguagens:
FORTRAN 95: expresses constantes
Ada, C++ e Java: expresses de qualquer tipo
C# tem dois tipos, readonly e const
Os valores de const so vinculados em tempo de compilao
Os valores de readonly so dinamicamente vinculados
Conceitos de Linguagens de Programao Robert W. Sebesta

Resumo
Sensibilidade capitalizao e a relao de nomes com palavras
especiais so problemas para os nomes
Variveis so caracterizadas por: nome, endereo, valor, tipo, tempo de
vida e escopo
A vinculao a associao de atributos com entidades de programa.
Variveis escalares podem ser categorizadas em: estticas, dinmicas
da pilha, dinmica do monte explcitas e dinmicas do monte implcitas.
Tipagem forte permite detectar todos os tipos de erros. Strong typing
means detecting all type errors

Anda mungkin juga menyukai