Nomes, Vinculações, Verificação de Tipos e jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/Topico... ·…

Embed Size (px)

Text of Nomes, Vinculações, Verificação de Tipos e...

  • Nomes, Vinculaes, Verificao de Tipos e Escopos

    George Darmiton da Cunha Cavalcanti

    (gdcc@cin.ufpe.br)

  • Tpicos

    Introduo

    Nomes

    Variveis

    O conceito de vinculao (binding)

    Verificao de tipos

    Tipificao forte

    Compatibilidade de tipos

    Escopo e tempo de vida

    Ambientes de referenciamento

    Inicializao de variveis

  • Introduo

    Linguagens Imperativas so abstraes da

    arquitetura do computador de von Neumann

    Memria

    Processador

    Variveis so caracterizadas por atributos

    Tipo

    Projetos de tipo

    escopo, tempo de vida, checagem de tipo, inicializao e compatibilidade de tipos

  • Nomes

    Questes de projeto para nomes:

    Tamanho mximo?

    Caracteres de conexo so permitidos?

    Os nomes fazem distino entre maisculas

    e minsculas?

    As palavras especiais so palavras

    reservadas ou palavras-chave?

  • Nomes

    Tamanho

    Se muito pequeno, no so conotativos

    Exemplos de linguagens:

    FORTRAN I: mximo de 6

    COBOL: mximo de 30

    FORTRAN 90 e ANSI C: mximo de 31

    Ada e Java: sem limite

    C++: sem limite, mas implementadores

    geralmente impem limites

  • Nomes

    Caracteres de conexo

    Pascal, Modula-2 e FORTRAN 77 no

    permitem

    Outras linguagens permitem

  • Nomes

    Distino entre maisculas e minsculas Desvantagem:

    Legibilidade (nomes semelhantes so diferentes)

    Pior em C++ e em Java, pois nomes possuem maisculas e minsculas

    exemplo: IndexOutOfBoundsException

    Nomes em C, em C++ e em Java fazem distino entre maisculo e minsculo

    Os nomes em outras linguagens no fazem

  • Nomes

    Palavras especiais

    Usadas para tornar os programas mais legveis ao dar nome a aes que devem ser executadas

    Usadas para delimitar ou separar as entidades sintticas

    Uma palavra-chave uma palavra que especial em certos contextos, por exemplo em Fortran

    Real VarName (Real um tipo de dado seguido por um nome,

    assim Real uma palavra-chave)

    Real = 3.4 (Real uma varivel)

    Uma palavra reservada uma palavra especial que

    no pode ser usada como nome

  • Variveis

    Uma varivel uma abstrao de um clula

    de memria

    Variveis podem ser caracterizadas por uma

    sxtupla de atributos:

    Nome

    Endereo

    Valor

    Tipo

    Tempo de vida

    Escopo

  • Atributos das variveis

    Nome nem todas as variveis possuem nome

    Endereo o endereo de memria com o qual ela associada Uma varivel pode ter diferentes endereos em diferentes

    tempos no programa

    Uma varivel pode ter diferentes endereos em diferentes lugares no programa

    Se dois nomes so usados para acessar a mesma posio de memria, eles so chamados de apelidos (aliases)

    Apelidos (aliases) so criados atravs de ponteiros, de variveis de referncia e de unies em C e em C++

    Apelidos so um problema para a legibilidade

  • Atributos das variveis

    Tipo

    determina a faixa de valores das variveis e o conjunto de operaes definidas para os valores do tipo

    no caso de ponto flutuante, o tipo tambm determina a preciso

    Valor

    o contedo da clula de memria associada varivel

    Abstrao da clula de memria

    A clula fsica ou o conjunto de clulas associadas a varivel

  • O Conceito de Vinculao

    O valor-l de uma varivel seu endereo

    O valor-r de uma varivel seu valor

    Uma vinculao (binding) uma associao, como, por exemplo, um atributo e uma entidade ou entre uma operao e um smbolo

    O momento em que uma vinculao se desenvolve chamado de tempo de vinculao

  • Possveis tempos de vinculaes

    Tempo de projeto da linguagem Vinculao de smbolos de operao a operao, ex. *

    Tempo de implementao da linguagem Vinculao de um tipo (float) a um conjunto de valores

    possveis

    Tempo de compilao Vinculao de uma varivel a um tipo de dado em particular

    Tempo de carregamento Vinculao de uma varivel clula de memria

    Tempo de execuo Vinculao de uma varivel local no-esttica a uma clula

    de memria

  • Vinculao Esttica e Dinmica

    Uma vinculao esttica se ocorrer antes do tempo de execuo e permanecer inalterada ao longo da execuo de um programa.

    Uma vinculao dinmica se ocorrer durante a execuo ou puder ser modificada no decorrer da execuo de um programa

  • Vinculao de tipos

    Como o tipo especificado?

    Quando a vinculao acontece?

    Tipos podem ser especificados estaticamente por meio de alguma forma de declarao explcita ou implcita

  • Declarao de variveis:

    explcita e implcita

    Uma declarao explcita uma instruo em um programa que lista nomes de variveis e especifica que elas so de um tipo particular

    Uma declarao implcita um meio de associar variveis a tipos por convenes em vez de instrues

    FORTRAN, PL/I, BASIC e Perl dispem de declaraes implcitas Vantagem: capacidade de escrita

    Desvantagem: legibilidade

  • Vinculao dinmica de tipos

    Vinculao dinmica de tipos (JavaScript e PHP)

    A varivel vinculada ao tipo quando lhe atribudo algum valor, por exemplo JavaScript list = [2, 4.33, 6, 8];

    list = 17.3;

    Vantagem: Flexibilidade

    Desvantagens: Alto custo

    Difcil deteco de erros

  • Inferncia de tipos

    Inferncia de tipos (ML, Miranda e Haskell) Ao invs de uma instruo de atribuio, tipos so

    determinados pelo contexto

    Em ML, fun circumf(r) = 3.14159 * r * r;

    fun vezes10(x) = 10*x;

    ML rejeita a funo fun quadrado(x) = x * x;

    Opes fun quadrado(x:int) = x * x;

    fun quadrado(x) = (x:int) * x;

    fun quadrado(x) = x * (x:int);

  • Vinculao de Armazenamento e

    Tempo de Vida

    Alocao Marcar\tomar uma clula de memria de um

    conjunto de memria disponvel

    Desalocao Devolver a clula ao conjunto de memria

    disponvel

    O tempo de vida de uma varivel se inicia quando ela vinculada a uma clula especfica e encerra-se quando ela desvinculada

  • Categorias de variveis baseado no

    tempo de vida

    Variveis Estticas

    Variveis Dinmicas na Pilha

    Variveis Dinmicas no Monte Explcitas

    Variveis Dinmicas no Monte Implcitas

  • Variveis Estticas

    Vinculadas a clulas de memria antes que a execuo do programa se inicie. Exemplo: todas as variveis do FORTRAN 77 e as variveis

    static do C

    Vantagens: eficincia (endereamento direto)

    suporta subprogramas sensveis histria

    Desvantagem: pouca flexibilidade (no permitem recurso)

  • Variveis Dinmicas na Pilha

    So aquelas cujas vinculaes de armazenamento criam-se a partir da elaborao de suas instrues de declarao, mas cujostipos so estaticamente vinculados (Elaborao: processo de alocao e de vinculao de armazenamento)

    Ocorre em tempo de execuo

    Exemplo

    Variveis locais em subprogramas C e mtodos em Java

    Vantagem:

    permite recurso;

    compartilhamento de espao de memria

    Desvantagens:

    Sobretaxa de alocao e de desalocao em tempo de execuo

    Subprogramas no podem ser sensveis histria

  • Variveis Dinmicas no Monte

    Explcitas

    As variveis dinmicas no monte explcitas so clulas de memria sem nome (abstratas) alocadas e desalocadas por instrues explcitas em tempo de execuo, especificadas pelo programador.

    Essas variveis alocadas no monte e desalocadaspara o monte s podem ser referenciadas por meio de variveis de ponteiro ou de referncia.

    O monte um conjunto de clulas de armazenamento altamente desorganizado, devido imprevisibilidade de seu uso.

  • Variveis Dinmicas no Monte Explcitas

    Exemplo:

    Objetos dinmicos em C++ (via new e delete)

    Todos os objetos em Java

    Vantagem:

    Convenientes para estruturas dinmicas: listas encadeadas e rvores

    Desvantagens:

    Dificuldade de usar ponteiros e referncia corretamente

    Custo das referncias para as alocaes e para as desalocaes

  • Variveis Dinmicas no Monte Implcitas

    Alocao e desalocao causadas por instrues de atribuio

    Todas as variveis em APL

    Todas as strings e vetores em Perl e em JavaScript

    Vantagem

    Flexibilidade

    Desvantagens

    Ineficiente, pois todos os atributos so dinmicos

    Perda de grande parte da capacidade de detectar erros

  • Verificao de Tipos

    Verificao de tipos a atividade de assegurar que os operandos de um operador sejam de tipos compatveis.

    Um tipo compatvel aquele vlido para o operador ou com permisso, nas regras da linguagem, para ser convertido pelo compilador para um tipo vlido Essa converso automtica chamada de coero

    Um erro de tipo a aplicao de um operador a um operando de tipo imprprio

  • Tipificao Forte

    Uma linguagem de programao fortemente tipificada se erros de tipos so sempre detectados

    Vantagens Permite a deteco de todos os usos equivocados de variveis

    que resultem em erros de tipo

    Exemplos de linguagens Pascal no : variant records (registros variante)

    C e C++ no so: permitem funes cujos parmetros no so verificados quanto ao tipo

    Ada quase fortemente tipificada (Java similar)

  • Tipificao Forte

    Regras de Coero

    Podem enfraquecer a tipificao forte

    (C++ versus Ada)

    Ada possui poucas regras de coero

    Embora Java possua metade das regras de

    coero do C++, logo sua deteco de erros

    melhor do que a do C++, sua tipificao for