Post on 17-Apr-2015
1
Aula 5Aula 5Tipos de DadosTipos de Dados
Universidade do Vale do Rio dos Sinos
< Página da Disciplina >
www.inf.unisinos.br/~barbosawww.inf.unisinos.br/~barbosa
<Endereço do Professor >
barbosa@exatas.unisinos.brbarbosa@exatas.unisinos.br
2
SumárioSumário
1 – Introdução
3
1 – Introdução2 – Tipos de dados primitivos
SumárioSumário
4
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres
SumárioSumário
5
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário
SumárioSumário
6
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array
SumárioSumário
7
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos
SumárioSumário
8
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro
SumárioSumário
9
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União
SumárioSumário
10
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto
SumárioSumário
11
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto10 – Tipos Ponteiro (referências)
SumárioSumário
12
IntroduçãoIntrodução
1 – Introdução - Relação Tipos x Espaço do Problema - Descritor (estático ou dinâmico) - Tabela de Símbolos
13
1 – Introdução2 – Tipos de dados primitivos - Tipos básicos - Primitivos + Construtores => Estruturados - Tipos de dados primitivos
Tipos de dados primitivosTipos de dados primitivos
14
1 – Introdução2 – Tipos de dados primitivos - Tipos básicos - Primitivos + Construtores => Estruturados - Tipos de dados primitivos (esquema)
Tipos de dados primitivosTipos de dados primitivos
15
Tipos de dados primitivosTipos de dados primitivos
Primitivos
16
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
17
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
Decimais
18
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
Decimais
– Grupo de bits com sinal - Signal magnitude - Complemento de dois
19
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
– Frações e expoentes– Padronizado: IEEE Floating Point Standard 754 (1985)
Decimais
20
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
– Frações e expoentes– Padronizado: IEEE Floating Point Standard 754 (1985)
Tanenbaum (1990)Organização Estruturada de ComputadoresApêndice B (p. 448 – 454)
Decimais
21
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
Decimais
– BCD (Binary Coded Decimal)– Pelo menos 4 bits para um decimal
22
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
Decimais
– Introduzidos por ALGOL 60– Menor célula de memória (normalmente um byte)
23
– ASCII– Unicode (16 bites): Utilizada no Java
Tipos de dados primitivosTipos de dados primitivos
Primitivos
Numéricos
Booleanos
Caracterere
Inteiros
Ponto-flutuante
Decimais
24
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres - Strings como tipos primitivos?
Tipos Tipos StringsStrings de caracteres de caracteres
25
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres - Strings como tipos primitivos? - Tamanho da string => Estático => Dinâmico Limitado => Dinâmico
Tipos Tipos StringsStrings de caracteres de caracteres
26
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres - Strings como tipos primitivos? - Tamanho da string => Estático => Dinâmico Limitado => Dinâmico - Implementação (Pascal e C)
Tipos Tipos StringsStrings de caracteres de caracteres
27
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário - Enumeração Constantes enumeradas na definição
Tipos ordinais definidos pelo usuárioTipos ordinais definidos pelo usuário
28
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário - Enumeração Constantes enumeradas na definição - Subfaixa Subseqüência de um ordinal Introduzidos pelo Pascal Herdam todas as operações do pai Implementação: Verificação de faixa
Tipos ordinais definidos pelo usuárioTipos ordinais definidos pelo usuário
29
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias: Onde e quando é alocado
Tipos Tipos ArrayArray
30
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias (esquema): Onde e quando é alocado
Tipos Tipos ArrayArray
31
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico Fixo
32
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
33
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
34
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
35
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
36
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
37
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
– Tudo estático– Altamente eficiente
38
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
– Faixas de índice estáticas– Alocação durante execução
39
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
– Faixas de índices dinâmicas– Não são alteradas durante execução– Alocação durante execução
40
Tipos Tipos Array: CategoriasArray: Categorias
Categorias
Estático
Stack Dinâmico
Heap Dinâmico
Stack Dinâmico FixoCódigo
DadosEstáticos
Heap
Pilha
– Faixas de índices dinâmica– – Alocação durante execução
– Faixas de índices dinâmicas– Podem ser alteradas na execução– Alocação durante execução– Resumo: Tudo dinâmico
41
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias
Tipos Tipos ArrayArray
42
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias - Operações com Arrays (array é uma unidade)
Tipos Tipos ArrayArray
43
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias - Operações com Arrays (array é uma unidade) - Implementação: Alocação: Linha ou Coluna Acesso: Função de acesso
Tipos Tipos ArrayArray
44
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos - Hash como suporte à associatividade - Registradores associativos
Arrays associativosArrays associativos
45
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal)
Tipos RegistroTipos Registro
46
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal) - Operações com registros (comparação, atribuição, etc)
Tipos RegistroTipos Registro
47
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal) - Operações com registros (comparação, atribuição, etc) - Implementação: Campos diferentes
Tipos RegistroTipos Registro
48
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União - Verificação de tipos é sempre dinâmica (tag) - Registros variantes em Pascal - Verificação: Trocar tag sem trocar variante - Elimina a tipificação forte (Pascal, Fortran, etc)
Tipos UniãoTipos União
49
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto - Coleções não ordenadas de tipos ordinais - Modelagem de conjuntos matemáticos - Implementação: Strings de bits indicando elementos
Tipos ConjuntoTipos Conjunto
50
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto10 – Tipos Ponteiro (referências)
Tipos PonteiroTipos Ponteiro
51
1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto10 – Tipos Ponteiro (referências)
Tipos PonteiroTipos Ponteiro
52
Tipos PonteiroTipos Ponteiro
- Usos
53
Tipos PonteiroTipos Ponteiro
- UsosPoder de endereçamento direto (assembly)
Gerenciamento de Heap
54
Tipos PonteiroTipos Ponteiro
- UsosPoder de endereçamento direto (assembly)
Gerenciamento de Heap
Código
DadosEstáticos
Heap
Pilha
55
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
56
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros- Aritmética de ponteiros
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
57
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
58
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
59
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória- Variável de referência Ponteiro constante inicializado Sem aritmética
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
60
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória- Variável de referência Ponteiro constante inicializado Sem aritmética- Java: Não possibilita ponteiros oscilante
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
61
Tipos PonteiroTipos Ponteiro
- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória- Variável de referência Ponteiro constante inicializado Sem aritmética- Java: Não possibilita ponteiros oscilante- Implementação (2 ou 4 bytes): - Soluções para ponteiros oscilantes - Gerenciamento do Heap (Garbage Collection)
Poder de endereçamento direto (assembly)
Gerenciamento de Heap
62
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
1 – Strings em Pascal
63
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
1 – Strings em Pascal - Tamanho da String?
=> Estático ?
=> Dinâmico Limitado ?
=> Dinâmico ?
64
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
1 – Strings em Pascal - Tamanho da String?
- Como é controlado o tamanho?
=> Estático ?
=> Dinâmico Limitado ?
=> Dinâmico ?
65
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
1 – Strings em Pascal - Tamanho da String?
- Como é controlado o tamanho?
=> Estático ?
=> Dinâmico Limitado ?
=> Dinâmico ?
program teste; var x : string[10]; begin x := ‘teste’; x[0] := 3; write(x); end.
66
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
1 – Strings em Pascal - Tamanho da String?
- Como é controlado o tamanho?
=> Estático ?
=> Dinâmico Limitado ?
=> Dinâmico ?
program teste; var x : string[10]; begin x := ‘teste’; x[0] := ‘3’; write(x); end.
67
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
1 – Strings em Pascal - Tamanho da String?
- Como é controlado o tamanho?
=> Estático ?
=> Dinâmico Limitado ?
=> Dinâmico ?
program teste; var x : string[10]; begin x := ‘teste’; x[0] := chr(3); write(x); end.
68
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?
69
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?
program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes; conj_int = set of integer;
70
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?
program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes; conj_int = set of integer;
Acima do limite
71
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?
program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes;
var var_conj : conj_dias; begin if seg in var_conj then write(‘Esta no conjunto’) else write(‘Não esta no conjunto’);; end.
72
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?
program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes;
var var_conj : conj_dias; begin var_conj := [seg]; if seg in var_conj then write(‘Esta no conjunto’) else write(‘Não esta no conjunto’);; end.
73
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
3 – Diretivas de compilação:
74
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
3 – Diretivas de compilação:
- Dimensionamento de memória: Diretiva $M
75
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
3 – Diretivas de compilação:
- Dimensionamento de memória: Diretiva $M
- Verificação de faixas: Diretiva $R
76
Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal
3 – Diretivas de compilação:
- Dimensionamento de memória: Diretiva $M
- Verificação de faixas: Diretiva $R
- Curto-circuito em expressões booleadas $B