É 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
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
\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}
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
É 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)
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
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 tiposunion { 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