230 likes | 438 Views
Tipos de Dados. Paradigmas de Programação Prof. Gláucya Carreiro Boechat glaucyacboechat@gmail.com. Introdução. Um tipo de dado define uma coleção de dados e um conjunto de operações pré-definidas sobre esses dados Um descritor é um conjunto de atributos de uma variável
E N D
Tipos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat glaucyacboechat@gmail.com
Introdução • Um tipo de dado define uma coleção de dados e um conjunto de operações pré-definidas sobre esses dados • Um descritor é um conjunto de atributos de uma variável • Um objeto representa uma instância de um tipo de dado abstrato definido pelo usuário
Tipos de Dados Primitivos • Tipos de dados não-definidos em termos de outros tipos são chamados tipos de dados primitivos • Praticamente todas as linguagens de programação oferecem um conjunto de tipos de dados primitivos
Tipos de Dados Primitivos • Inteiro • Quase sempre um reflexo da plataforma utilizada (hardware e/ou SO) • Muitos computadores suportam diferentes tamanhos para inteiros • Em Java, diferentes tamanhos para inteiros • byte, short, int, long • Existem vários tipos de números inteiros numa linguagem: • inteiro com/sem sinal, inteiro base decimal, • inteiro base binária, precisão simples, etc.
Tipos de Dados Primitivos • Ponto Flutuante • Modelam os números reais, mas são aproximações • Linguagens para fins científicos suportam pelo menos dois tipos ponto flutuante (float e double) • IEEE Floating-Point Standard 754
Tipos de Dados Primitivos: • Ponto Flutuante • Formato: • Precisão Única • Precisão Dupla
Tipos de Dados Primitivos • Booleano • Mais simples de todos • Faixa de valores • Dois elementos: • um para “true” • zero para “false” • Pode ser implementado como bits, mas geralmente são como bytes • Vantagem: legibilidade
Tipos de Dados Primitivos • Caracter • Armazenados como codificações numéricas • O código mais usado: ASCII • Uma alternativa, codificação de 16-bit: Unicode • Inclui caracteres da maioria das linguagens naturais • Usado em Java • C# e JavaScript também suportam Unicode
Tipos cadeia de caracteres • Valores consistem em seqüências de caracteres • Questões de projeto: • É um tipo primitivo ou apenas um tipo especial de vetores de caracteres? • As cadeias devem ter tamanho estático ou dinâmico?
Opções • Operações típicas: • Atribuição e cópia • Comparação (=, >, etc.) • Concatenação • Referências a subcadeias
Aplicação em Linguagens • C e C++ • Não primitivo • Usam vetores char e uma biblioteca de funções que oferecem operações (string.h) • SNOBOL4 (uma linguagem de manipulação de cadeias) • Primitivo • Java • Primitivo através da classe String
Opções de Tamanho • Estático • COBOL, FORTRAN 90, Pascal, Ada e Java classe String • Tamanho dinâmico limitado: C e C++ • Um caractere especial é usado para indicar o final da cadeia, em vez de manter seu tamanho • Dinâmico (sem máximo): SNOBOL4, Perl, JavaScript
Cadeias de Caracteres Avaliação • São importantes para a capacidade de escrita de uma linguagem • Como um tipo primitivo com tamanho estático, não é caro • Por que não usá-las? • Tamanho dinâmico é mais flexível • Mas o custo compensa?
Implementação de Cadeias de Caracteres • Tamanho estático • descritor em tempo de compilação • Tamanho dinâmico limitado • Podem exigir um descritor em tempo de execução para armazenar tanto o tamanho máximo como o tamanho atual (mas não em C e C++) • Tamanho dinâmico • Exigem um descritor em tempo de execução • Exigem um gerenciamento de armazenagem mais complexo • Alocação e desalocação
Implementação de Cadeias de Caracteres • Descritor em Tempo de Compilação para cadeias estáticas
Semântica Axiomática: • Instruções de atribuição • Descritor em tempo de execução para cadeias dinâmicas limitadas
Tipos Ordinários definidos pelo Usuário • Um tipo ordinário é aquele cuja faixa de valores possíveis pode ser associada ao conjunto dos números inteiros positivos • Tipos Enumeração • Tipos Subfaixa • Exemplos de tipos ordinários em Java • integer • char • boolean
Enumerações • Todos os valores possíveis, os quais se tornam constantes simbólicas, são enumerados na definição • Exemplo C# • enum days {mon, tue, wed, thu, fri, sat, sun};
Enumerações • Exemplo Pascal type tipocor = {vermelho, azul, amarelo, verde}; var cor : tipo cor; cor := verde; if (cor > amarelo)
Enumerações • Avaliação • Vantagens em termos de legibilidade • Não é necessário codificar uma cor comoum número • Vantagens em termos de confiabilidade • Operações (não permite adicionar cores) • Nenhum variável de enumeração seráassinalada para valores fora de sua faixa
Subfaixa • É uma subsequência de um ordinal • Exemplo: 12..18 é uma subfaixa dos inteiros • Projeto em Ada type Days is (mon, tue, wed, thu, fri, sat, sun); subtype Weekdays is Days range mon..fri; subtype Index is Integer range 1..100; Day1: Days; Day2: Weekday; Day2 := Day1;
Subfaixa • Avaliação • Legibilidade • Informam ao leitor que as variáveis podem armazenar apenas uma faixa de valores • Confiabilidade • A atribuição de um valor a uma variável fora de sua faixa pode ser detectado pelo compilador como sendo um erro
Outros Tipos especiais • Vetores (array com uma dimensão) • Matrizes (array com n dimensões) • Ponteiros • Referências • Registros (estruturas)