Skip to content

Latest commit

 

History

History
120 lines (105 loc) · 3.29 KB

tipos.org

File metadata and controls

120 lines (105 loc) · 3.29 KB

Vinculação de Tipo

1 Vinculação de Tipo

É o ato de associar um tipo à uma variável

Como o tipo é especificado e Quando a vinculação ocorre

Tipos

  • Estática
  • Dinâmica
  • por Inferência

2 Estática

Declaração explícita

int contador;
PajeSimulator *simulator;

\pause Declaração implícita

  • Utiliza alguma convenção na especificação da linguagem
  • Regra comum: primeira aparição da variável define seu tipo
contador = 3;
simulator = [[PajeSimulator alloc] init];

\pause Abordagem Implícita $\leadsto$ problemas de confiabilidade
\small Erros de programação indetectáveis pelo compilador \pause

Solução: primeiro caractere do nome indica tipo

  • Perl: \texttt{\$contador}, \texttt{@contador}, \texttt{\%contador}

3 Dinâmica

Não há uma declaração explícita do tipo da variável

Nem pode ser determinado pela sua primeira ocorrência

  • A vinculação ocorre a cada atribuição da variável
    list = [1.2, 3.4];
    list = 56;
        

\pause Vantagens

  • Flexibilidade
  • Programação “genérica”

\pause Desvantages

  • Falta de confiabilidade – como verificar tipos?
  • \pause Custo
    • Checagem de tipos em tempo de execução
    • Cada variável deve ter um descritor de tipo
    • Estocagem deve poder mudar a cada atribuição

\pause Normalmente encontrada em linguagens interpretadas

4 por Inferência

É um tipo de vinculação de tipo implícita

  • Os tipos são determinados automaticamente
  • Normalmente para um tipo padrão (se nada é especificado)

Exemplo

  • ML, Miranda, Haskell (Linguagens Funcionais)

5 Checagem de Tipos

Assegura que operandos e operadores são compatíveis

Tipos compatíveis

  • É um tipo legal para um determinado operador
  • Tipo que pode ser convertido automaticamente – coerção
    Exemplo: somar \texttt{int} e \texttt{float} em Java

Vinculação estática implica em checagem estática

Vinculação dinâmica implica em checagem dinâmica

\pause Exemplos

  • Objective-C tem as duas abordagens
    \small (programador pode desabilitar checagem estática)
  • JavaScript e PHP só permitem checagem de tipo dinâmica

6 Fortemente Tipada

Todos os erros de tipo são detectados (ML)

  • ML
  • \pause Quase fortemente tipada: Ada, Java, C#
    Desabilitar a checagem para algumas conversões de tipo
  • \pause Não são fortemente tipadas: C, C++
    Tipos \texttt{union} sem checagem de tipos
    union {
       int i;
       double d;
       _Bool b;
    };
        

\pause Coerção na checagem de tipos

  • Diminue a confiabilidade
  • Bastante coerção: Fortran, C, C++
  • Pouca coerção: Ada
  • Intermediário: Java