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

PDF
EIS: The lesson plan of science of grade 4
PDF
วิทยาศาสตร์ ม.3
PDF
ใบงานที่ 1.1 คอมพิวเตอร์กราฟิก
PDF
ใบงานที่ 6.1 เรื่อง อินเตอร์เน็ตและการใช้งาน
DOC
เปรียบเทียบปรับ
PPS
ดอกตอนที่ 3
PDF
โครงสร้างผังงานการทำงานแบบลำดับ
EIS: The lesson plan of science of grade 4
วิทยาศาสตร์ ม.3
ใบงานที่ 1.1 คอมพิวเตอร์กราฟิก
ใบงานที่ 6.1 เรื่อง อินเตอร์เน็ตและการใช้งาน
เปรียบเทียบปรับ
ดอกตอนที่ 3
โครงสร้างผังงานการทำงานแบบลำดับ

Mais procurados (20)

PDF
กสพท. ชีววิทยา 2561
PPTX
Sentence (ประโยค)
PDF
งานและพลังงาน
PDF
การขายสินค้าทางอินเตอร์เน็ต
PDF
ใบความรู้ที่ 3
PDF
Nervous system
PDF
ระบบหมุนเวียนเลือด
PDF
ใบงานที่ 1พัฒนาการคอมพิวเตอร์
PDF
ความน่าจะเป็น_9วิชาสามัญ(55-58)
DOCX
แบบทดสอบสมการเชิงเส้นตัวแปรเดียว
PDF
รายงานโครงการผีเสื้อมากมายสีสันสานสัมพันธ์ในดอนปู่ตา2558ศพว ล่าสุด
PDF
ปกนอก ปกใน
PDF
ใบงาน 12.1
PDF
แผ่นพับการสร้างคำ
PDF
โครงงาน
PDF
โครงการปันน้ำใจให้ผู้ป่วย(บทที่1)
PDF
รูปตัวอย่าง สด.8 และ สด.3 และเลขที่ใบสำคัญทางทหาร
PDF
การหางานจากพื้นที่ใต้กราฟ
PDF
บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์กราฟิก
PDF
แนวทางการพัฒนาโครงงานคอมพิวเตอร์
กสพท. ชีววิทยา 2561
Sentence (ประโยค)
งานและพลังงาน
การขายสินค้าทางอินเตอร์เน็ต
ใบความรู้ที่ 3
Nervous system
ระบบหมุนเวียนเลือด
ใบงานที่ 1พัฒนาการคอมพิวเตอร์
ความน่าจะเป็น_9วิชาสามัญ(55-58)
แบบทดสอบสมการเชิงเส้นตัวแปรเดียว
รายงานโครงการผีเสื้อมากมายสีสันสานสัมพันธ์ในดอนปู่ตา2558ศพว ล่าสุด
ปกนอก ปกใน
ใบงาน 12.1
แผ่นพับการสร้างคำ
โครงงาน
โครงการปันน้ำใจให้ผู้ป่วย(บทที่1)
รูปตัวอย่าง สด.8 และ สด.3 และเลขที่ใบสำคัญทางทหาร
การหางานจากพื้นที่ใต้กราฟ
บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์กราฟิก
แนวทางการพัฒนาโครงงานคอมพิวเตอร์
Anúncio

Semelhante a Unidade04 (20)

PDF
Java e orientação a objetos - aula 01
PDF
Resumo vinculacao aula lp1 10 a
PDF
Programação Orientada a objetos em Java
PDF
Programação Orientada a objetos em Java
PDF
PDF
Java 02
PDF
(ED1) Tópico 01 - Conceitos Básicos
PDF
Dinamicas
PDF
7194099-Manual-de-Java
PPT
Java Desktop
PPTX
Curso de Java Capítulo 2 - Aprendendo Novas Técnicas
PPT
Java - Aula 08
PPTX
Poo1 aula 4 - tipos de dados variáveis-constantes - copia
PPTX
Poo1 aula 4 - tipos de dados variáveis-constantes
PPTX
Poo1 aula 4 - tipos de dados variáveis-constantes
PDF
Programação Orientada a Objetos - 001
PDF
A linguagem java
PDF
Estruturação de Linguagens de Programação (Pascal e C++)
PDF
Resumo Anotacoes Certificacao SCJP 5
Java e orientação a objetos - aula 01
Resumo vinculacao aula lp1 10 a
Programação Orientada a objetos em Java
Programação Orientada a objetos em Java
Java 02
(ED1) Tópico 01 - Conceitos Básicos
Dinamicas
7194099-Manual-de-Java
Java Desktop
Curso de Java Capítulo 2 - Aprendendo Novas Técnicas
Java - Aula 08
Poo1 aula 4 - tipos de dados variáveis-constantes - copia
Poo1 aula 4 - tipos de dados variáveis-constantes
Poo1 aula 4 - tipos de dados variáveis-constantes
Programação Orientada a Objetos - 001
A linguagem java
Estruturação de Linguagens de Programação (Pascal e C++)
Resumo Anotacoes Certificacao SCJP 5
Anúncio

Mais de Ialis Cavalcante (14)

PPTX
Assembleia com os Discentes - SACEC
PPT
Minicurso Ercemapi 2011
PDF
Unidade7 1
PDF
Programacao logica
PDF
05 poo-ii
PDF
Unidade06
PDF
Introducao ao greenfoot
PDF
Interface grafica
PDF
Unidade05
PDF
Unidade03
PDF
Unidade02
PDF
Técnicas de PDI com Java - Ercemapi 2009
PPT
CCT 23Maio2009 Sobral
PDF
Introducao ao LaTeX
Assembleia com os Discentes - SACEC
Minicurso Ercemapi 2011
Unidade7 1
Programacao logica
05 poo-ii
Unidade06
Introducao ao greenfoot
Interface grafica
Unidade05
Unidade03
Unidade02
Técnicas de PDI com Java - Ercemapi 2009
CCT 23Maio2009 Sobral
Introducao ao LaTeX

Último (20)

PPTX
Basic life Support - suporte tecnico de vida
PPTX
Adaptação Curricular para Alunos com Deficiências - EMEB. ODIR (1).pptx
PDF
Atividades sobre o livro Letras de Carvão
PPTX
História da enfermagem 14.07.2025_040859.pptx
PPTX
AULA 01 - INTRODUÇÃO AO ATENDIMENTO HUMANIZADO.pptx
PPTX
Primeiros Socorros. Aula 1 VEROUVIRSENTIR.pptx
PPTX
Slides Lição 8, Betel, Jesus e a Mulher Adúltera, 3Tr25.pptx
PPTX
SEGURANÇA, MEIO AMBIENTE E SAÚDE Aula 1.pptx
PPT
Aula_02_Logica_Externa_dos_Esportes_de_Invasao_2025.ppt
PDF
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
PPTX
REVISA-GOIAS-6o-ANO-LP-3o-BIMESTRE-PPT.pptx
PDF
_Filosofia_-_SLIDES___questões.pdf.pptx (3).pdf
PDF
639039693-CURSO-DE-PORTUGUES-Prof-Deivid-Xavier.pdf
PPTX
Solos usos e impactos...............pptx
PDF
morfologia5.pdfllllllllllllllllllllllllllll
PPTX
CIPA+-++Mapa+de+Risco-1.pptx levantamento
PPTX
Treinamento de Espaço Confinado_Trabalhadores e Vigias NR 33.pptx
PPTX
Aulwbrivekwohevjeoeiiegeievjebvejeihegeueh
PDF
diário de palestra DDS Online - Apostila.pdf
PDF
Sociologia Cultural, Aspecto teóricos e conceitos
Basic life Support - suporte tecnico de vida
Adaptação Curricular para Alunos com Deficiências - EMEB. ODIR (1).pptx
Atividades sobre o livro Letras de Carvão
História da enfermagem 14.07.2025_040859.pptx
AULA 01 - INTRODUÇÃO AO ATENDIMENTO HUMANIZADO.pptx
Primeiros Socorros. Aula 1 VEROUVIRSENTIR.pptx
Slides Lição 8, Betel, Jesus e a Mulher Adúltera, 3Tr25.pptx
SEGURANÇA, MEIO AMBIENTE E SAÚDE Aula 1.pptx
Aula_02_Logica_Externa_dos_Esportes_de_Invasao_2025.ppt
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
REVISA-GOIAS-6o-ANO-LP-3o-BIMESTRE-PPT.pptx
_Filosofia_-_SLIDES___questões.pdf.pptx (3).pdf
639039693-CURSO-DE-PORTUGUES-Prof-Deivid-Xavier.pdf
Solos usos e impactos...............pptx
morfologia5.pdfllllllllllllllllllllllllllll
CIPA+-++Mapa+de+Risco-1.pptx levantamento
Treinamento de Espaço Confinado_Trabalhadores e Vigias NR 33.pptx
Aulwbrivekwohevjeoeiiegeievjebvejeihegeueh
diário de palestra DDS Online - Apostila.pdf
Sociologia Cultural, Aspecto teóricos e conceitos

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