Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unidade04

1,213 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Unidade04

  1. 1. Nomes, ligaçõesNomes ligações, checagem detipos e escopos p pProf. Iális CavalcanteEngenharia da Computação – UFC/Sobral
  2. 2. 1.1 Introdução As linguagens de programação imperativas são abstrações da arquitetura do computador de von Neuman; Componentes principais: ◦ Memória -> armazena instruções e dados; ◦ Processador -> fornece operações para modificar o conteúdo da memória; úd d ói Células de memória -> variáveis.
  3. 3. 2.2 Nomes Associado a variável, rótulo, subprograma, variável rótulo subprograma parâmetros formais e demais construções identificador... ◦ Qual o tamanho máximo de um nome? ◦ Caracteres de conexão podem ser usados em nomes? ◦ Os nomes fazem distinção entre maiúsculas e minúsculas? ◦ Palavras especiais são palavras reservadas ou palavras-chave? palavras chave?
  4. 4. 2.2 Nomes 2.1. 2 1 Formas de nomes ◦ Nome: cadeia de caracteres usada para identificar alguma entidade de um programa programa. ◦ Primeiras linguagens: nome de único caractere incógnita na definição matemática; ◦ FORTRAN I rompe com a idéia: até seis caracteres em um nome; ◦ FORTRAN 91 e C: permitem até 31 caracteres; ◦ Java e Ada: sem limite de tamanho tamanho. ◦ Distinção CASE SENSITIVE! E a legibilidade? E a capacidade de escrita?
  5. 5. 2.2 Nomes 2.1. 2 1 Formas de nomes Palavras-chave ou reservadas? REAL APPLE int apple; (!) REAL = 3.4 int i t = x + 2; (?) 2 ou public class interface{ (...) ( ) INTEGER REAL } REAL INTEGERExemplo em FORTRAN Exemplo em Java Palavras-chave: Palavras reservadas: REAL e INTEGER int, public, class e interface(especial pelo contexto) (não usadas para nomes)
  6. 6. 3.Variáveis Abstração de célula ou conjunto de células d memória; él l de ói ◦ Ling. de máquina -> ling. de montagem Endereços de memória numéricos -> nomes Endereçamento absoluto ◦ Variável: sêxtuplo de atributos Nome; Endereço; Valor; Tipo; Tempo de vida; p Escopo.
  7. 7. 3.3 Variáveis 3.1. 3 1 Nomes ◦ ...identificadores... 3.2. Endereço ◦ Endereço de uma variável é o mesmo da memória à qual ela está associada. ◦ Mas não é tão simples simples... ... e vetores, matrizes? int sub1{ (...) int soma; (...) } Mesmo nome, diferentes void sub2{ ( ) int soma; (...) } { (...) ( ) endereços
  8. 8. 3.3 Variáveis 3.2.1. 3 2 1 Apelidos ◦ Mais de um nome de variável pode ser usado para acessar uma única localização d memória ú i l li ã de ói Nomes -> Apelidos. ◦ U d ponteiros; Uso de ◦ Passagem por referência; Ponto ponto = new Ponto(); ponto.x = 10; ponto.y ponto y = 12; (...) void setPonto(Ponto p){ (...) p.x = p.x + 15; (...) }
  9. 9. 3.3 Variáveis 3.3. Tipo p ◦ Faixa de valores que uma variável pode ter ◦ Conjunto de operações definidas para o tipo ◦ Em Java: int -2.147.483.648 a 2 147 483 647 2 147 483 648 2.147.483.647 Operadores: +, -, *, /, %, etc. 3.4.Valor ◦ Conteúdo da(s) célula(s) de memória () () associadas à variável. valor-l valor-r x = y + 10; left side right side(endereço) (valor)
  10. 10. 4.4 Vinculação Vinculação: associação ◦ Atributo e entidade | operação e símbolo ◦ Tempo de vinculação: momento de seu desenvolvimento; Projeto de linguagem; Implementação de linguagem; p g g Compilação; Ligação (link); g ç ( ) Carregamento; ç Execução.
  11. 11. 4.Vinculação çint cont; (...) cont = cont + 5; Conjunto dos tipos possíveis para cont: ◦ Vinculado no tempo de projeto da linguagem; Tipo de cont: ◦ Vinculado no tempo de compilação; Conjunto dos valores possíveis de cont: ◦ Vinculado no tempo de projeto do compilador; Valor de cont: ◦ Vinculado no tempo de execução com essa instrução; Conjunto dos significados possíveis para o símbolo do operador +: ◦ Vinculado no tempo de definição da linguagem; Significado d í b l do Si ifi d do símbolo d operador + nessa i d instrução: ã ◦ Vinculado no tempo de compilação; Representação interna do literal 5: ◦ Vinculada no tempo de projeto do compilador.
  12. 12. 4.Vinculação Vinculação de atributos a variáveis V l ã d b á estática, ocorre em tempo de compilação; d il ã permanece inalterado ao longo da execução; c.c., c c , dinâmica; ◦ Declaração de variáveis Explícita Lista nomes de variáveis e especifica seus tipos; Implícita p Associação de variáveis por convenção padrão Inexistente nas linguagens atuais Em FORTRAN, uma variável sem tipo definida inteiro, se começa com I, J, K, L, M ou N c.c., Real c c é Real. Problema na legibilidade
  13. 13. 4.4 Vinculação Vinculação dinâmica de tipos ◦ A variável atribuída e vinculada ao tipo da expressão do lado direito apenas no momento da instrução List = [10.2 5.1 0.0] List = 47 ◦ Diminui a detecção de erros; ◦ cast em C e Java J ◦ Pode gerar resultados errôneos; ◦ Alto custo de implementação;
  14. 14. 4.4 Vinculação Inferência de Tipo ◦ Exemplo em ML fun circumf(r) = 3.14159 * r * r fun vezes10(x) = 10 * x fun quadrado(x) = x * x fun quadrado(x) : int = x * x fun quadrado(x : int) = x * x fun quadrado(x) = (x : int) * x fun quadrado(x) = x * (x : int) ◦ Também presente em Miranda e Haskell p
  15. 15. 4.4 Vinculação Vinculações de armazenamento e tempo de vida ◦ Alocação: célula de memória vinculada a uma variável é tomada da memória disponível; ◦ Desalocação: devolve a célula de memória desvinculada de uma variável à memória disponível. ◦ Tempo de vida: tempo durante a variável está vinculada a uma localização de memória específica.
  16. 16. 4.4 Vinculação Variáveis estáticas ◦ Vinculadas a células de memória antes da execução e permanece até o fim da execução do programa; Vantagens: uso como globais, endereçamento direto; Desvantagens: não suporta recursividade, sem compartilhamento de armazenamento; variáveis em diferentes subprogramas subprogramas. Exemplo em C, C++ e Java: aplicação de static.
  17. 17. 4.4 Vinculação Variáveis dinâmicas na pilha ◦ Vinculações de armazenamento criadas a partir da elaboração das instruções de declaração Mas com tipo estaticamente vinculados; ◦ Permite recursividade, com armazenamento local dinâmico; Desvantagem: sobretaxa de alocação e desalocação em tempo de execução.
  18. 18. 4.4 Vinculação Variáveis dinâmicas no monte explícitas p ◦ Células de memória abstratas (sem nome) (des)alocadas por instruções explícitas em tempo de execução; Variáveis de ponteiro ou referências; ◦ Monte: conjunto de células de armazenamento altamente desorganizado devido à imprevisibilidade do uso; ◦ E C++ e J Em Java: new (mais um nome de tipo) – cria uma variável no monte e um ponteiro retorna para ela
  19. 19. 4.4 Vinculação Variáveis dinâmicas no monte explícitas ◦ Variáveis vinculadas ao monte em compilação Mas armazenadas em tempo de execução; p ç ; int *intnode; (...) intnode = new int; /* aloca uma célula int */ (...) delete intnode; d l ( ) d l t i t d /* desaloca a célula para a qual él l l intnode aponta */ Em Java, os objetos são dinâmicos no monte J j explícitos; Esse tipo de variável é utilizado para estruturas dinâmicas (listas encadeadas, árvores, ...). Desvantagens: dificuldade de usar variáveis de ponteiro corretamente e custo de referência.
  20. 20. 4.4 Vinculação Variáveis dinâmicas no monte implícitas ◦ Vinculadas ao armazenamento somente quando lhe são atribuídos valores. ◦ Elevado grau de flexibilidade Código genérico; ◦ Sobretaxa para manter atributos dinâmicos; p ; Perda de capacidade de detecção de erros.
  21. 21. 5.5 Verificação de Tipos Atividade de assegurar que os operandos de um operador sejam de tipos compatíveis ◦ Válid para o operador; Válido d ◦ Pelas regras da linguagem, pode ser convertido pelo compilador para um tipo válido (coerção); Erro de tipo ◦ A li ã d um operador a um operando de tipo Aplicação de d d d i impróprio; Pode P d ser dinâmica ou estática. di â i táti
  22. 22. 6.6 Tipificação Forte Definição mais simples: ◦ Cada nome de um programa escrito na linguagem tem um único tipo associado a ela; FORTRAN não é fortemente tipificado; Pascal, Ada e Java são quase fortemente P l Ad J ã f tipificadas ◦ Ada exige a função UNCHECKED_CONVERSION ◦ Regras de coerção para Java: int x = 10; float y, y2 = 4.59; y = y2 + x;
  23. 23. 7. 7 Compatibilidade de Tipos Duas variáveis são de tipos compatíveis quando qualquer uma delas pode ter seu valor atribuído à outra; ◦ Compatibilidade de nome: Variáveis na mesma declaração ou em declarações de mesmo nome de tipo; ◦ Compatibilidade de estrutura: Variáveis em que seus tipos possuem estruturas idênticas;type indextype = 1..100; type celsius = real;var fahrenheit = real; cont: integer; indice: indextype; tipos compatíveis pela estrutura cont e indice não são compatíveis
  24. 24. 7. 7 Compatibilidade de Tipos Em Pascal:type tipo1 e tipo2 tipo1 = array [1..10] of integer; (incompatíveis) tipo2 = array [1..10] of integer; tipo3 = tipo2; tipo2 e tipo3 (compatíveis)C : array (1..10) of INTEGER; Em Ada:D : array (1..10) of INTEGER; CeD (incompatíveis)type LIST_10 is array (1..10) of INTEGER; CeDC, D : LIST 10; LIST_10; (compatíveis)
  25. 25. 8.8 Escopo O escopo de uma variável é a faixa de instruções na qual a variável é visível. ◦ Visível em uma instrução: se puder ser referenciada nesta mesma. As variáveis não-locais de uma unidade ou de um bloco de programa são as visíveis dentro deste, mas não são declaradas lá lá.
  26. 26. 8.1 Escopo estático81 Método para vincular nomes a variáveis não-locais Para conectar uma referência a uma variável, o compilador precisa encontrar a declaração Processo de busca: ◦ Caso a declaração não for encontrada localmente, passa-se a passa se buscar em escopos mais amplos O pai-estático (static parent) é o subprograma no qual encontra-se a declaração Os ancestrais estáticos são todos os subprogramas até se chegar a d l é h declaração ã
  27. 27. 8.1 Escopo estático81p ocedu e b g;procedure big; var x: integer; procedure sub1; begin { sub1 } A variável x em sub1 é ...x... declarada end; { sub1 } no procedimento big p g procedure sub2; var x: integer; begin { sub2 } ... end;begin { big } ...end; { big }
  28. 28. 8.1 Escopo estático81 Variáveis podem ser escondidas de uma unidade quando a mesma possui uma variável com o mesmo nome program main; var x: integer; procedure sub1; var x: integer; begin { sub1 } ...x... end; { sub1 } begin b i { main } i ... end; { main } C++ e Ada permitem acesso a essas variáveis escondidas ◦ Em Ada: unit.name ◦ E C++: class_name::name Em C l
  29. 29. 8.2 Blocos82 Um método para criar novos escopos estáticos no meio do código executável – introduzido no ALGOL 60 Permite que uma seção de código tenha suas próprias variáveis locais cujo escopo é minimizado Essas variáveis são tipicamente dinâmicas na pilha p p ◦ Alocada quando a seção é iniciada e desalocada quando ela é finalizada ... Exemplo em Ada declare TEMP: integer; begin TEMP := First First := Second Second := TEMP end ...
  30. 30. 8.3 Avaliação do Escopo Estático83
  31. 31. 8.3 Avaliação do Escopo Estático 83 main A B C D E Assuma que MAIN chama A e BUm grafo com chamadas potenciais A chama C e D a procedimento no sistema procedimento, sistema. B chama A e E main A B Um grafo com as chamadas g desejáveis do programa exemplo. C D E
  32. 32. 8.3 Avaliação do Escopo Estático83 Suponha que a especificação é alterada e E deve acessar algum variável em D Soluções: S l õ ◦ Colocar E em D (porém, E não poderá acessar o escopo de B) d ◦ Mover as variáveis de D, que são necessárias em E, para MAIN (isso permite o acesso por todos os procedimentos) De maneira geral: escopo estático encoraja o uso de variáveis globais
  33. 33. 8.4 Escopo Dinâmico84 Baseia-se Baseia se na seqüência de chamada de subprogramas, não em suas relações espaciais (temporal versus espacial) Desta forma o escopo pode ser determinado apenas em tempo de execução Quando a procura por declarações locais falha, as declarações do pai-dinâmico (procedimento de pai dinâmico chamada) são pesquisadas, e assim sucessivamente Caso nenhuma declaração seja encontrada em qualquer ancestral dinâmico, haverá um erro em tempo de execução
  34. 34. 8.4 Escopo Dinâmico84 BIG chama SUB2 procedure big; SUB2 chama SUB1 var x: integer; g SUB1 usa x procedure sub1; begin { sub1 } ...x... end; { sub1 } procedure sub2; var x: integer; begin { sub2 } Nesse caso, SUB1 usa o x N ... declarado em SUB2 end; begin big b i { bi } ... end; { big }
  35. 35. 8.5 Avaliação do Escopo Dinâmico85 Vantagem ◦ Conveniência Desvantagem ◦ Pouca legibilidade Linguagens que usam escopo dinâmico ◦ APL, SNOBOL4 e nas primeiras versões do LISP ◦ Perl também permite que as variáveis sejam declaradas com escopo dinâmico
  36. 36. 8.6 Escopo e Tempo de Vida86 Escopo e Tempo de Vida, algumas vezes, parecem estar Vida vezes relacionados, mas são conceitos diferentes void printheader(){ ... } /* fim de printheader */ void compute() { int sum; ... printheader(); } /* fim de compute */ f d O escopo da variável sum é completamente contido pela função f ã compute. Porém, o tempo de vida de sum estende-se ao longo do tempo durante o qual printheader é executado
  37. 37. 8.7 Ambientes de Referenciamento87 O ambiente de referenciamento de uma instrução é o conjunto de todos os nome visíveis na instrução Em uma linguagem com escopo ◦ O ambiente de referenciamento é formado pelas variáveis locais mais todas as variáveis de seus escopos ancestrais visíveis Um b U subprograma é ativo se sua execução tiver i ã i começado, mas ainda não tiver terminado Em E um li linguagem com escopo di â i dinâmico ◦ O ambiente de referenciamento é formado pelas variáveis locais, locais mais as variáveis de todos os subprogramas ativos
  38. 38. 8.8 Constantes Nomeadas88 Uma constante nomeada é uma variável vinculada a um valor somente no momento em que ela é vinculada a um armazenamento ◦ Seu valor não pode ser mudado por uma instrução de atribuição Exemplo ◦ uso da constante pi ao i é d valor 3,14159 d i invés do l 3 14159 Vantagem ◦ Legibilidade ◦ Confiabilidade
  39. 39. 8.9 Inicialização de Variáveis89 Inicializações são geralmente feitas através de instruções de declaração ◦ Exemplo: em Java ◦ int sum = 0; ; Nem Pascal, nem Modula-2 oferecem uma maneira de inicializar variáveis exceto variáveis, durante a execução através de instruções de d atribuição b ã
  40. 40. 9.9 Revisão Nomes ◦ Tamanho; caracteres de conexão; distinção entre maiúsculas e minúsculas; palavras especiais Variáveis ◦ nome, endereço, valor, tipo, tempo de vida, escopo Vinculação é a associação de atributos a entidades do programa Tipificação forte é conceito de exigir que todos os erros de tipo sejam detectado

×