Académique Documents
Professionnel Documents
Culture Documents
Pg. 1
Tpicos
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Introduo Nomes Variveis O Conceito de Vinculao Verificao de Tipos Tipificao Forte Compatibilidade de Tipos Escopo Escopo e Tempo de Vida Ambientes de Referenciamento Constantes Inicializao de Variveis
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 2
1. Introduo
As linguagens de programao imperativas so baseadas na arquitectura de Von Neumann. Os espaos de memria utilizados pelas variveis so diferentes, de acordo com a especificao do tipo de varivel (propriedade mais importante da varivel).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 3
Pg. 4
2. Nomes
Qual o comprimento mximo de um nome? Quais os caracteres de conexo ($ ? # @ ~; : / \ | ...) que podem ser utilizados em nomes? Os nomes fazem distino entre maisculas e minsculas? As palavras especiais so:
Pg. 5
Nomes
(cont.)
Um Nome uma palavra utilizada para identificar uma entidade de um programa. As primeiras L.P. utilizavam nomes com apenas 1 carcter, pois eram basicamente matemticas. Exs. de comprimentos mximos de nomes:
FORTRAN I: mximo 6 caracteres COBOL: mximo 30 caracteres FORTRAN: 90 e ANSI C: mximo 31 caracteres Ada: no tem limite, e todos so significativos C++: no tem limite, mas as implementaes sim.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 6
Nomes
(cont.)
Em C, C++, Java e Modula-2 os nomes so sensveis s letras maisculas e minsculas; Os nomes em muitas das outras linguagens no so sensveis.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 7
Nomes
(cont.)
A sensibilidade a letras maisculas e minsculas tem a seguinte desvantagem: Nomes que parecem iguais so diferentes (problema de legibilidade). Ex.: Em C++ os seguintes nomes so distintos: rest, Rest, ResT, REST, PIOR problema de legibilidade: Em C++ e Java, os nomes pr-definidos utilizam uma mistura de letras maisculas e minsculas. ex.: IndexOutOfBoundsException()
Alias: Muitas vezes so utilizados nomes diferentes para referir a mesma entidade
Ex. em linguagem C: typedef int myint; - int e myint so nomes diferentes que referem o mesmo tipo nmeros inteiros int .
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 8
Nomes
(cont.)
Palavras Especiais
So utilizadas para tornar programas mais legveis ao denominar aces. Na maioria das L.P., as palavras especiais so classificadas como reservadas, e em algumas, so somente palavras-chave.
Exemplo:
INTEGER REAL (No permitido se REAL for reservada) REAL INTEGER (No permitido se INTEGER reservada)
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 9
Nomes
(cont.)
Palavra-chave: uma palavra que pode tanto ser especial como no, dependendo do contexto onde est a ser utilizada.
Exemplo:
REAL AUXILIAR REAL REAL (Permitido se REAL for palavra-chave) REAL = 3.4 (Permitido se REAL for palavra-chave)
Pg. 10
3. Variveis
Uma Varivel uma abstraco de uma ou mais clulas de memria de um computador. Uma varivel pode ser caracterizada atravs dos seguintes seis atributos:
Pg. 11
Variveis
(cont.)
Endereo: o endereo de memria qual est associada uma varivel. Os Aliases existem quando duas ou mais variveis apontam para o mesmo endereo de memria.
Pg. 12
Variveis
(cont.)
Tipo: determina a faixa de valores que a varivel pode conter, e o conjunto de operaes definidas para os valores deste tipo. Valor: o contedo da clula de memria associada varivel.
ex. Considere a seguinte atribuio: x := x ; x Left-value endereo da varivel x Right-value valor da varivel (ou expresso que evolui para um valor)
Pg. 13
4. O Conceito de Vinculao
Uma vinculao (binding) uma associao entre uma operao e um smbolo, ou entre um atributo e uma entidade.
Associao dos atributos (nome, endereo, tipo, valor, etc.) varivel total.
Exemplo:
Pg. 14
Tempos de Vinculao
Projecto da linguagem (Language design time); Implementao da linguagem (implementao do interpretador/compilador/debuger/etc.) (Language implementation time); Durante a compilao (Compile time); Durante a ligao do programa s bibliotecas (Link); No momento carregamento do programa para execuo (Load time); No tempo de execuo (Run-time).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 15
Tempos de Vinculao
Exemplo de tempos de vinculao: int count = 1;
(cont.)
Conjunto de tipos possveis para count; Conjunto de valores possveis para tipo int; Conjunto de significados possveis para smbolo =. Representao interna em memria do nmero 1. Tipo de count; Significado do operador de atribuio =. Associao de count a um endereo de memria; Valor de count - operao de atribuio do nmero varivel.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 16
Pg. 17
Antes que uma varivel possa ser referenciada, esta deve ser vinculada a um tipo de dados, podendo ser efectuada atravs de:
Declarao explcita: especificado os nomes da variveis e os seus tipos. Declarao Implcita: no especificado o tipo da varivel, ele atribudo atravs de convenes pr-estabelecidas pela L.P.
Exemplo: se o nome iniciar com i,j,k,l,m ou n ser implicitamente declarado como integer, caso contrrio ser do tipo real.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 18
O tipo no especificado por instruo de declarao, mas sim quando atribudo um valor para a varivel.
Vantagem:
Flexibilidade de programao, permitindo a criao de subprogramas genricos (independente do tipo de dados); A capacidade do compilador detectar erros diminuda; Custo elevado para implementao (verificao dinmica de tipo e interpretao do tipo); list = [12.55, 14.99, 7, 10]; list = 11.65;
Engenharia Informtica Linguagens de Programao 2002/2003
Desvantagens:
Ex. JavaScript:
Pg. 19
Vinculaes de memria
Reserva (Alocao) o nome dado a vinculao da varivel a uma ou mais clulas de memria disponvel (da pool de memria). Libertao (Desalocao) o processo de desvincular e devolver a clula de memria ao pool de memria disponvel. Tempo de vida de uma varivel o tempo durante o qual uma varivel est vinculada a uma localizao de memria especfica.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 20
10
Vinculaes de memria
(cont.)
As vinculaes de memria a variveis, podem ser divididas em quatro categorias de acordo com o seu tempo de vida:
Pg. 21
Vinculaes de memria
(cont.)
Variveis Estticas: so vinculadas a clulas de memria antes do incio de execuo do programa, e permanecem associadas s mesmas clulas at o programa terminar. Vantagens:
No existe custo de reservar e libertar memria; Definio de variveis sensveis histria. Endereamento directo de memria (+ rpido).
Desvantagens:
Reduzida flexibilidade na gesto das variveis; A existncia unicamente de variveis estticas no permite recursividade. ex.: C, C++ e Java (usando o especificador static).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 22
11
Vinculaes de memria
(cont.)
Variveis Pilhas-Dinmicas: a associao efectuada em tempo de execuo, na instruo de declarao, e permanece inaltervel at o fim do programa. Vantagens:
Permite recursividade.
Desvantagens:
Custo das operaes de reserva e libertao implcita de memria; ex.: C, C++ (variveis normais): int sum, total;
Pg. 23
Vinculaes de memria
(cont.)
Variveis Heap-Dinmicas Explcitas: as variveis so reservadas e libertadas de memria em tempo de execuo por declaraes explcitas do programador.
Vantagens:
Desvantagens:
Gesto dinmica da memria. Custo das operaes de reserva e libertao de memria; A utilizao de apontadores no segura.
Pg. 24
12
Vinculaes de memria
(cont.)
delete [ ] buffer;
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 25
Vinculaes de memria
(cont.)
Variveis Heap-Dinmicas Implcitas: so reservadas no momento em que lhe so atribudas valores e libertadas por meio de instrues explcitas. Por vezes so nomes que se adaptam a diferentes tipos de variveis. Vantagens:
Elevado grau de flexibilidade do tipo de varivel, permitindo definir cdigo muito genrico. Ineficiente porque todos os atributos da varivel so dinmicos; Dificuldade de deteco de erros por parte do compilador.
Engenharia Informtica Linguagens de Programao 2002/2003
Desvantagens:
Pg. 26
13
5. Verificao de Tipos
Verificao de tipos: a actividade que assegura que os operandos de um operador so de tipos compatveis. Um tipo compatvel o mesmo do operador ou com permisso da linguagem, um tipo que pode ser convertido no tipo do operador. A operao de converso automtica de um tipo noutro, designa-se por coero. Um erro de tipo, a aplicao de um operador a um tipo no compatvel.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 27
Verificao de Tipos
Se as vinculaes de variveis de uma linguagem forem estticas, a verificao de tipos poder ser efectuada em tempo de compilao. A vinculao dinmica de tipos requer a verificao de tipo em tempo de execuo.
Pg. 28
14
6. Tipificao Forte
Linguagem fortemente tipificada: uma linguagem na qual possvel detectar todos os erros de tipos durante o processo de compilao. Vantagens:
Deteco da utilizao indevida de variveis que resultam em erros de tipo. ADA, ML e Java
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 29
7. Compatibilidade de Tipos
Quando duas variveis so de tipos compatveis, qualquer uma delas pode ter seu valor atribudo outra. Existem dois mtodos diferentes de compatibilidade de tipos:
Pg. 30
15
Compatibilidade de Nome
Compatibilidade de Nome: Variveis possuem tipos compatveis se estiverem na mesma declarao ou em declaraes que usem o mesmo nome de tipo.
Vantagens:
Desvantagens:
Pg. 31
Compatibilidade de Nome
(cont.)
Ex. em C++:
// todas as variveis so de tipos compatveis: int x, y, z; // (mesma declarao) int w; // (mesmo tipo de nome das variveis x, y, z)
Ex. em Pascal:
// variveis de tipos no compatveis: type classification= 0...20; var first : integer; last : classification; first := last; -> erro semntico (incompatibilidade de tipos)
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 32
16
Compatibilidade de Estrutura
Compatibilidade de Estrutura: variveis tm tipos compatveis se os seus tipos tiverem estruturas idnticas. Vantagens:
Desvantagens:
Pg. 33
Compatibilidade de Estrutura
(cont.)
Em C++ e Java, a compatibilidade de objectos est relacionado com a hierarquia de herana (ver captulo 11). A linguagem C utiliza equivalncia de tipos por estrutura, enquanto o C++ utiliza equivalncia de nomes. Ex. em Pascal "Padro":
// No existe compatibilidade por estrutura: type type1 = array[1..50]; type2 = array[1..50]; type3 = real; type4 = real; type1 e type2 -> tipos incompatveis (no compatib. por estrut.) type3 e type4 -> tipos compatveis (compatibilidade de nome)
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 34
17
Inferncia de Tipo
Inferncia de tipo: capacidade que a linguagem tem para determinar os tipos das variveis tendo em considerao o contexto em que encontram-se. Desta forma no necessrio especificar todos os tipos das variveis.
Exemplo em ML: fun area(l:int, w:int): int = l*w Funes equivalentes (por inferncia de tipo): fun area(l, w): int = l*w fun area(l:int, w) = l*w Situao de erro (impossvel inferir): fun area(l, w) = l*w
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 35
8. Escopo - Visibilidade
O escopo (scope) de uma varivel, representa a rea do programa onde esta visvel. Ex. em C e C++(escopo definido por bloco):
void foo (int x) { // incio do escopo de x int y; // incio do escopo de y x = y = 0; } // fim do escopo of x and y
As regras de escopo de uma L.P. determinam a forma como as referncias e nomes esto associadas a variveis.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 36
18
Escopo - Visibilidade
1. Procurar variveis localmente 2. Procurar em ordem crescente do escopo at encontrar uma declarao para o nome da varivel.
Escopos aninhados: definio de escopos dentro de outros, formando uma sequncia de escopos com sucessores e antecessores. A redefinio de uma varivel com o mesmo nome (num escopo interior) de uma j existente num escopo exterior, permite "esconder" a definio exterior.
C++, Pascal, ADA, etc. permitem o acesso a estas variveis escondidas em escopos exteriores.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 37
Escopo - Visibilidade
Esttico; Dinmico. Baseado no texto esttico do programa; Para associar uma referncia a uma varivel necessrio procurar a sua declarao; O escopo esttico pode ser determinado estaticamente antes da execuo (Load Time).
Engenharia Informtica Linguagens de Programao 2002/2003
Escopo Esttico
Pg. 38
19
int i = 0; // varivel global ao modulo int main() { int i = 5; { int j = 10; { int k = 15; cout << "i = " << i << endl; cout << "j = " << j << endl; cout << "k = " << k << endl; } // k termina aqui } // j termina aqui cout << "i = " << i << endl; cout << "j = " << j << endl; cout << "k = " << k << endl; return 0; }
Pg. 40
20
program exemplo; var x: integer; procedure sub1; begin x := 1; (1) end; procedure sub2; var x: integer; begin x := 2; (2) end; begin x := 3; (3) sub1(); sub2(); writeln(x); end.
Pg. 41
Soluo para o escopo esttico: encapsulamento; A maioria das linguagens imperativas utilizam escopo esttico: Pascal, C, C++, Java, Ada, etc..
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 42
21
Escopo Dinmico
O escopo dinmico baseia-se na sequncia de chamadas de subprogramas e pode ser determinado somente em tempo de execuo. Para associar uma referncia a uma varivel necessrio procurar a sequencia de invocao at encontrar a sua declarao.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 43
program exemplo; var x: integer; procedure sub1; begin x := x + 1; end; procedure sub2; var x: integer; begin sub1(); end; begin x := 1; (1) sub1(); (1) sub2(); (2) writeln(x); end.
Pg. 44
22
Programas menos confiveis que os de escopos estticos; Problemas com a legibilidade do programa; Execuo mais lenta; Menos utilizado que o escopo esttico; Linguagens que utilizam escopo dinmico: Smalltalk, APL, SNOBOL.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 45
Exemplo em linguagem C: void foo () { static int y; ... } int main() { int x; foo (); }
Escopo da varivel x no se estende para a funo foo(); Tempo de vida da varivel x, estende-se para a funo foo(). Escopo de y vlido na funo foo(); Tempo de vida de y estende-se por todo o programa.
Pg. 46
23
O ambiente de referenciamento de uma instruo o conjunto de todos os nomes visveis na instruo. No escopo esttico, o ambiente de referenciamento constitudo de todas as variveis declaradas em seu escopo local, conjuntamente com o conjunto de todas as variveis de seus escopos ascendentes visveis.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 47
Ambientes de Referenciamento
No exemplo ao lado, os ambientes de referenciamento em cada ponto do programa: (1): x e y de sub1 e a e b de exemplo. (2): x de sub3 e a e b de exemplo. (3): x de sub2 e a e b de exemplo. (4): a e b de exemplo
program exemplo; var a,b: integer; procedure sub1; var x,y: integer begin (1) end; procedure sub2; var x: integer procedure sub3; var x: integer begin (2) end; begin (3) end; (4)
begin end;
Pg. 48
24
11. Constantes
Uma constante uma varivel vinculada a um valor no momento em que vinculada a uma clula de memria. O valor das constantes no pode ser alterado. Ajudam na legibilidade e confiabilidade do programa.
Pg. 49
A vinculao de uma varivel a um valor, no momento em que vinculada a uma clula de memria, designado por inicializao. Exemplos:
Fortran:
Ada:
Pascal no oferece meios de se inicializar variveis, excepto durante a execuo das instrues de atribuio.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 50
25