Tipos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat...

Post on 19-Apr-2015

115 views 4 download

Transcript of Tipos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat...

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:

a) Precisão Única

b) 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?

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

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 Pascaltype 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 como um 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 Adatype 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)