SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Nomes, ligações
Nomes ligações, checagem de
tipos e escopos
  p         p
Prof. Iális Cavalcante

Engenharia da Computação – UFC/Sobral
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.
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?
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?
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 INTEGER

Exemplo 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)
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.
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
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; (...)
            }
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)
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.
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.
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
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;
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
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.
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.
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.
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
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.
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.
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
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;
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
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;   CeD
C, D : LIST 10;
       LIST_10;                             (compatíveis)
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á.
8.1 Escopo estático
81
 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
                         ã
8.1 Escopo estático
81
p 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 }
8.1 Escopo estático
81
 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
8.2 Blocos
82
 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
                        ...
8.3 Avaliação do Escopo Estático
83
8.3 Avaliação do Escopo Estático
   83
                    main

          A                B


  C             D
                           E
                                          Assuma que MAIN chama A e B
Um 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
8.3 Avaliação do Escopo Estático
83
 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
8.4 Escopo Dinâmico
84
 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
8.4 Escopo Dinâmico
84
                        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 }
8.5 Avaliação do Escopo Dinâmico
85
 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
8.6 Escopo e Tempo de Vida
86
 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
8.7 Ambientes de Referenciamento
87
 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
8.8 Constantes Nomeadas
88
 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
8.9 Inicialização de Variáveis
89
 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 ã
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

Mais conteúdo relacionado

Mais procurados

Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoJose Augusto Cintra
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem csergiocrespo
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETphilipsoares
 
Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica Yuri Camelo
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Algoritmos computacionais
Algoritmos computacionaisAlgoritmos computacionais
Algoritmos computacionaisDérick Platini
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Julian Correa
 
Aula01
Aula01Aula01
Aula01vdlos
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 
Aula01 introducao operacoes
Aula01   introducao operacoesAula01   introducao operacoes
Aula01 introducao operacoesYuri Passos
 

Mais procurados (20)

Fundamentos de Programação
Fundamentos de ProgramaçãoFundamentos de Programação
Fundamentos de Programação
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica Programando em C++ // Estrutura Básica
Programando em C++ // Estrutura Básica
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Algoritmos computacionais
Algoritmos computacionaisAlgoritmos computacionais
Algoritmos computacionais
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2
 
Aula01
Aula01Aula01
Aula01
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
Aula01 introducao operacoes
Aula01   introducao operacoesAula01   introducao operacoes
Aula01 introducao operacoes
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 

Semelhante a Unidade04

Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Programação desktop - apresentação
Programação desktop -  apresentaçãoProgramação desktop -  apresentação
Programação desktop - apresentaçãoRosicleia Frasson
 
Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROGMarcos de Vita
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
Resumo vinculacao aula lp1 10 a
Resumo vinculacao   aula lp1 10 aResumo vinculacao   aula lp1 10 a
Resumo vinculacao aula lp1 10 aPedro Augusto
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoAnderson Ledo
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 

Semelhante a Unidade04 (20)

Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Pged 01
Pged 01Pged 01
Pged 01
 
02 1 algoritmos
02 1 algoritmos02 1 algoritmos
02 1 algoritmos
 
7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
Pged 02
Pged 02Pged 02
Pged 02
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Programação desktop - apresentação
Programação desktop -  apresentaçãoProgramação desktop -  apresentação
Programação desktop - apresentação
 
Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROG
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Cap 2
Cap 2Cap 2
Cap 2
 
Cap 2
Cap 2Cap 2
Cap 2
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Resumo vinculacao aula lp1 10 a
Resumo vinculacao   aula lp1 10 aResumo vinculacao   aula lp1 10 a
Resumo vinculacao aula lp1 10 a
 
Java2
Java2Java2
Java2
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 

Mais de Ialis Cavalcante (15)

Assembleia com os Discentes - SACEC
Assembleia com os Discentes - SACECAssembleia com os Discentes - SACEC
Assembleia com os Discentes - SACEC
 
Minicurso Ercemapi 2011
Minicurso Ercemapi 2011Minicurso Ercemapi 2011
Minicurso Ercemapi 2011
 
Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Unidade06
Unidade06Unidade06
Unidade06
 
Introducao ao greenfoot
Introducao ao greenfootIntroducao ao greenfoot
Introducao ao greenfoot
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
Unidade05
Unidade05Unidade05
Unidade05
 
Unidade03
Unidade03Unidade03
Unidade03
 
Unidade02
Unidade02Unidade02
Unidade02
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009
 
CCT 23Maio2009 Sobral
CCT 23Maio2009 SobralCCT 23Maio2009 Sobral
CCT 23Maio2009 Sobral
 
Introducao ao LaTeX
Introducao ao LaTeXIntroducao ao LaTeX
Introducao ao LaTeX
 

Último

Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfFernandaMota99
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 

Último (20)

Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdf
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 

Unidade04

  • 1. Nomes, ligações Nomes ligações, checagem de tipos e escopos p p Prof. Iális Cavalcante Engenharia da Computação – UFC/Sobral
  • 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. 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. 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. 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 INTEGER Exemplo 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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; CeD C, D : LIST 10; LIST_10; (compatíveis)
  • 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. 8.1 Escopo estático 81 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. 8.1 Escopo estático 81 p 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. 8.1 Escopo estático 81 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. 8.2 Blocos 82 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. 8.3 Avaliação do Escopo Estático 83
  • 31. 8.3 Avaliação do Escopo Estático 83 main A B C D E Assuma que MAIN chama A e B Um 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. 8.3 Avaliação do Escopo Estático 83 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. 8.4 Escopo Dinâmico 84 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. 8.4 Escopo Dinâmico 84 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. 8.5 Avaliação do Escopo Dinâmico 85 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. 8.6 Escopo e Tempo de Vida 86 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. 8.7 Ambientes de Referenciamento 87 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. 8.8 Constantes Nomeadas 88 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. 8.9 Inicialização de Variáveis 89 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. 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