Aula 5 Tipos de Dados Universidade do Vale do Rio dos Sinos < Página da Disciplina > www.inf.unisinos.br/~barbosa <Endereço do Professor > barbosa@exatas.unisinos.br
Sumário 1 – Introdução
Sumário 1 – Introdução 2 – Tipos de dados primitivos
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – Tipos União
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – Tipos União 9 – Tipos Conjunto
Sumário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – Tipos União 9 – Tipos Conjunto 10 – Tipos Ponteiro (referências)
Introdução 1 – Introdução - Relação Tipos x Espaço do Problema - Descritor (estático ou dinâmico) - Tabela de Símbolos
Tipos de dados primitivos 1 – Introdução 2 – Tipos de dados primitivos - Tipos básicos - Primitivos + Construtores => Estruturados - Tipos de dados primitivos
Tipos de dados primitivos 1 – Introdução 2 – Tipos de dados primitivos - Tipos básicos - Primitivos + Construtores => Estruturados - Tipos de dados primitivos (esquema)
Tipos de dados primitivos
Tipos de dados primitivos Numéricos Primitivos Booleanos Caracterere
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere – Grupo de bits com sinal - Signal magnitude - Complemento de dois
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere – Frações e expoentes – Padronizado: IEEE Floating Point Standard 754 (1985)
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere – Frações e expoentes – Padronizado: IEEE Floating Point Standard 754 (1985) Tanenbaum (1990) Organização Estruturada de Computadores Apêndice B (p. 448 – 454)
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere – BCD (Binary Coded Decimal) – Pelo menos 4 bits para um decimal
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere – Introduzidos por ALGOL 60 – Menor célula de memória (normalmente um byte)
Tipos de dados primitivos Inteiros Numéricos Ponto-flutuante Decimais Primitivos Booleanos Caracterere – ASCII – Unicode (16 bites): Utilizada no Java
Tipos Strings de caracteres 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres - Strings como tipos primitivos?
Tipos Strings de caracteres 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres - Strings como tipos primitivos? - Tamanho da string => Estático => Dinâmico Limitado => Dinâmico
Tipos Strings de caracteres 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres - Strings como tipos primitivos? - Tamanho da string => Estático => Dinâmico Limitado => Dinâmico - Implementação (Pascal e C)
Tipos ordinais definidos pelo usuário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário - Enumeração Constantes enumeradas na definição
Tipos ordinais definidos pelo usuário 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – 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 Array 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias: Onde e quando é alocado
Tipos Array 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias (esquema): Onde e quando é alocado
Tipos Array: Categorias Estático Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico – Tudo estático – Altamente eficiente
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico – Faixas de índice estáticas – Alocação durante execução
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico – Faixas de índices dinâmicas – Não são alteradas durante execução – Alocação durante execução
Tipos Array: Categorias Estático Código Dados Estáticos Heap Pilha Stack Dinâmico Fixo Categorias Stack Dinâmico Heap Dinâmico – Faixas de índices dinâmicas – Podem ser alteradas na execução – Alocação durante execução – Resumo: Tudo dinâmico – Faixas de índices dinâmica – – Alocação durante execução
Tipos Array 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias
Tipos Array 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias - Operações com Arrays (array é uma unidade)
Tipos Array 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – 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
Arrays associativos 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos - Hash como suporte à associatividade - Registradores associativos
Tipos Registro 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal)
Tipos Registro 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal) - Operações com registros (comparação, atribuição, etc)
Tipos Registro 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – 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 União 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – 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 Conjunto 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – Tipos União 9 – Tipos Conjunto - Coleções não ordenadas de tipos ordinais - Modelagem de conjuntos matemáticos - Implementação: Strings de bits indicando elementos
Tipos Ponteiro 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – Tipos União 9 – Tipos Conjunto 10 – Tipos Ponteiro (referências)
Tipos Ponteiro 1 – Introdução 2 – Tipos de dados primitivos 3 – Tipos Strings de caracteres 4 – Tipos ordinais definidos pelo usuário 5 – Tipos Array 6 – Arrays associativos 7 – Tipos Registro 8 – Tipos União 9 – Tipos Conjunto 10 – Tipos Ponteiro (referências)
Tipos Ponteiro - Usos
Tipos Ponteiro - Usos Poder de endereçamento direto (assembly) Gerenciamento de Heap
Tipos Ponteiro Código - Usos Dados Estáticos Heap Pilha Poder de endereçamento direto (assembly) - Usos Gerenciamento de Heap Código Dados Estáticos Heap Pilha
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - Usos - Operações com ponteiros Gerenciamento de Heap
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - Usos - Operações com ponteiros - Aritmética de ponteiros Gerenciamento de Heap
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - Usos - Operações com ponteiros - Aritmética de ponteiros - Ponteiros oscilantes Gerenciamento de Heap
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - Usos - Operações com ponteiros - Aritmética de ponteiros - Ponteiros oscilantes - Vazamento de memória Gerenciamento de Heap
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - 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 Gerenciamento de Heap
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - 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 Gerenciamento de Heap
Tipos Ponteiro - Usos - Operações com ponteiros Poder de endereçamento direto (assembly) - 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) Gerenciamento de Heap
Exercícios Práticos: Estudo de caso Turbo Pascal 1 – Strings em Pascal
Exercícios Práticos: Estudo de caso Turbo Pascal 1 – Strings em Pascal - Tamanho da String? => Estático ? => Dinâmico Limitado ? => Dinâmico ?
Exercícios Práticos: Estudo de caso Turbo Pascal 1 – Strings em Pascal - Tamanho da String? - Como é controlado o tamanho? => Estático ? => Dinâmico Limitado ? => Dinâmico ?
Exercícios Práticos: Estudo 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.
Exercícios Práticos: Estudo 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.
Exercícios Práticos: Estudo 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.
Exercícios Práticos: Estudo de caso Turbo Pascal 2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?
Exercícios Práticos: Estudo 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;
Exercícios Práticos: Estudo 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
Exercícios Práticos: Estudo 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.
Exercícios Práticos: Estudo 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.
Exercícios Práticos: Estudo de caso Turbo Pascal 3 – Diretivas de compilação:
Exercícios Práticos: Estudo de caso Turbo Pascal 3 – Diretivas de compilação: - Dimensionamento de memória: Diretiva $M
Exercícios Práticos: Estudo de caso Turbo Pascal 3 – Diretivas de compilação: - Dimensionamento de memória: Diretiva $M - Verificação de faixas: Diretiva $R
Exercícios Práticos: Estudo 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