Hardware
- Inexistência de semântica de tipos para memória
- Linguagens Assembly refletem esta escolha
\pause Linguagens de alto nível quase sempre associam tipos
- Informação de contexto de variáveis
- Checagem de erros
\pause Sistema de Tipos
- Mecanismo para definir tipos e associar às construções
- Tipo de uma variável
- Tipo de uma função
- Tipo de um literal
- \pause Conjunto de regras sobre os tipos da linguagem
- Equivalência
- Compatibilidade
- Inferência
\pause Discussão: Um sistema de tipos é essencial no projeto? \small \url{www.dlugosz.com/Perl6/web/typesystem-summary.html}
A um determinado tipo, temos os valores possíveis
\pause Domínio
- Representa um conjunto (infinito e contínuo) de valores
Exemplos: números inteiros, reais, complexos
\pause Problema: computador tem elementos discretos
- Várias formas de discretizar um domínio contínuo
- Alternativas
- Padronizar a representação
- Usar descritores de dados
- Representação finita
Possuem representação finita
\pause Dependem da forma de implementação
- Caracteres: ASCII, UTF8, ISO-8859?
- Inteiros: quantos bytes?
- Reais: quantos bytes para mantissa e expoente?
\pause Associados a um conjunto de operações válidas
Problema de contínuo versus discreto
Adotar domínios simplificados
\pause Tipos Primitivos
float /* domínio discretizado dos reais */
int /* domínio dos inteiros */
\pause Tipos Definidos pelo usuário
- Enumeração – novo domínio, valores específicos
enum Estacao { Primavera, Verao, Outono, Inverno };
- \pause Restrição – especificam um subdomínio
mandato = 2000..2005
Definir seu nome – \texttt{bool}
Definir seu domínio de valores – lógicos
Definir operações válidas
- Aritméticas – não há para bool
- Conjuntos – negação, conjunção, disjunção
- Relacionais – igualdade, ordem
Definir forma de representação – \texttt{true}, \texttt{false}
Definir espaço ocupado – 1 bit ou 1 byte?