Você está na página 1de 35

PARADIGMAS DE LINGUAGENS DE PROGRAMAO

TIPOS DE DADOS

Prof. Felippe Alex Scheidt

Tpicos da aula
Introduo Tipos de dados primitivos Cadeias de caracteres Tipos ordinais definidos pelo usurio Tipos de matrizes

Introduo
Veremos o conceito de tipo de dados, tipos primitivos, enumeraes e subfaixas Tambm tipos de dados estruturados, como matrizes, registros e unies. Um tipo de dado define uma coleo de valores de dados e um conjunto de operaes pr-definidas sobre eles.

Descritor
Uma forma de abordarmos variveis atravs de descritores. Em uma implementao, um descritor uma rea de memria que armazena os atributos de uma varivel. O descritor utilizado para verificao de tipos e para construir o cdigo para as operaes de alocao e liberao.

Objeto
O termo usado para representar instncias de tipos de dados abstratos definidos pelo usurio.

Tipos de dados primitivos


Praticamente todas as linguagens de programao fornecem um conjunto de tipos primitivos. Tipos de dados no definidos em termos de outros so chamados de tipos de dados primitivos.

Tipos numricos: inteiro


O tipo de dados primitivo mais comum o inteiro. Muitas LP suportam diversos tamanhos de inteiros:
byte short int long

Algumas LPs definem tipos inteiros sem sinal (unsigned int c++)

Tipos numricos: ponto flutuante


Modelam nmeros reais, entretanto todas as representaes so apenas aproximaes dos valores reais. A maioria das LP inclui dois tipos de ponto flutuante:
float (4bytes) double (dobro do float)

Tipos booleanos
Os tipos mais simples, cuja faixa de valores assume apenas dois valores: true e false; Pode ser armazenado em 1 bit, mas como 1 bit de memria no pode ser usado, ele armazenado em pelo menos 1 byte

Caracteres
Dados na forma de caracteres so armazenados como codificaes numricas. Tradicionalmente a codificao mais usada era o ASCII de 8 bits (0 a 127) Devido a globalizao, desenvolveu-se o Unicode, Unicode que usa 16bits e representa a maioria dos caracteres das linguagens. A maioria das LPs modernas suportam unicode.

Cadeia de caracteres
um tipo de dados, que consiste numa sequncia de caracteres. Questes de projeto
As cadeias devem ser apenas um tipo especial de vetor de caracteres ou um tipo primitivo? As cadeias devem ter tamanho esttico ou dinmico?

comuns: Operaes comuns atribuio, concatenao, referncia a subcadeia, comparao e casamento de padres.

Tipos ordinais definidos pelo usurio


um tipo no qual a faixa de valores possveis pode ser facilmente associada com o conjunto dos inteiros. No java, tem-se dois tipos ordinais definidos pelo usurio:
Enumeraes subfaixas

Tipos enumeraes
Um tipo enumerao um no qual todos os valores possveis, os quais so constantes nomeadas, so fornecidos na definio. definio Tipos enumerao fornecem uma maneira de definir e agrupar colees de constantes nomeadas, chamadas de constantes de enumerao.
enum dias {seg,ter,qua,qui,sex,sab,dom};

Constantes nomeadas
Exemplo: criar um sistema para representar cores:
int azul = 231; int vermelho = 211; ...

O problema que no definimos um tipo para nossas cores, no existe uma verificao de tipos quando elas so usadas. Por exemplo, poderamos utilizar operadores vlidos para inteiros mas invlido para o sistema de cores.

Vantagens das enumeraes


Favorece a legibilidade, pois os valores nomeados so facilmente reconhecidos. Confiabilidade, pois temos verificao de tipo no sendo possvel utilizar operadores de outros tipos. Isso previne fazermos uma operao do tipo: segunda + tera =??

Tipos subfaixa
uma subsequncia contgua de um tipo ordinal. Foram introduzidos no pascal e Ada. Exempo:
type Dias is (Seg, Ter, Qua, Qui, Sex, Sab, Dom); subtype Semana is Dias range Seg..Sex; subtype Index is Integer range 1..100;

A restrio nos tipos existentes est na faixa de valores possveis. Todas as operaes definidas para o tipo ancestral tambm so definidas para o subtipo

Vantagens
Melhoram a legibilidade ao deixar claro legibilidade, que variveis sub-faixa podem armazenar apenas certas faixas de valores. A confiabilidade aumentada, pois a atribuo de um valor fora da faixa detectada como erro. Entretanto estranho observar que nenhuma LP moderna implemente tipos subfaixa

Tipos de matrizes
um agregado de elementos do mesmo tipo, sendo identificado por sua posio relativamente ao primeiro elemento. Em muitas linguagens, como C, C++, Java, Ada e C#, todos os elementos de uma matriz precisam ser do mesmo tipo. Em javaScript, python e ruby, as referncias so sem tipo para os objetos, podendo referenciar objetos distintos.

Tipo matriz
Maioria das LPs usa colchetes para delimitar os ndices de uma matriz. Geralmente dois tipos distintos esto envolvidos em um tipo matriz:
o tipo dos ndices (sub-faixa de inteiros) o do elemento int mapa[][] = 2;
indices valor

Tipo matriz
Entretanto, na LP Ada, possvel utilizar qualquer tipo de dados como ndice. Poderamos fazer algo do tipo:
type dia_da_semana is (seg, ter, qua, qui, sex, sab, dom) type vendas is array (dia_da_semana) of float;

Confiabilidade
Erros de faixas em ndices so comuns em programas. Logo, obrigar a verficao de faixas um fator importante. A maioria das linguagens contemporneas no especifica verificao de faixas de ndices, mas Java, ML, e C# o fazem.

Matriz dinmica
aquela na qual a vinculao das faixas de ndices e da alocao de armazenamento dinmica e pode mudar qualquer nmero de vezes durante seu tempo de vida. O java inclui uma estrtura ArrayList
List intList = new ArrayList();

Entretanto o uso de ndices no suportado, sendo que o acesso feito atravs de chamadas de mtodos get e set.

Inicializao de matrizes
Algumas LPs permitem inicializar matrizes no momento em que seu armazenamento alocado. No C e Java podemos inicializar uma matriz:
int lista[] = {1,4,5,9}

Fatias
Uma fatia de uma matriz alguma subestrutura dela. Por exemplo, se A uma matriz, a primeira linha de A uma fatia. Desse modo possvel referenciar parte de uma matriz. Exemplo no python
vetor = [2,4,6,8,10,12,14,16] vetor[3:6] = [6,8,10] mat = [[1,2,3],[4,5,6],[7,8,9]] mat[0][0:2] = [1,2]

Fatias: exemplos

Matriz associativa
uma coleo no ordenada de elementos de dados indexados por um nmero igual de valores chamados de chaves. Nesse caso os ndice no precisam ser armazenados. Cada elemento de uma matriz associadtiva de fato um par de entidades, uma chave e um valor.

Matriz associativa
No perl uma matriz associativa ou disperses, so definidas:
%salarios = (julio => 4000, marcio=> 3400);

No java podemos usar o Map


salarios.put(julio,4000); salarios.put(marcio,3400);

No php:
<?php $sal = array array(julio" => 4000", marcio" => 3400); ?>

Tipo ponteiro
Um tipo ponteiro aquele em que as variveis tm uma faixa de valores que consistem em endereos de memria e um valor especial, nil Oferece o poder de endereamento indireto Oferece uma alternativa para gerenciar armazenamento dinmico (rvores binrias, filas, listas).

Questes de projetos de ponteiros


Quais so o escopo e o tempo de vida de uma varivel de ponteiro? Qual o tempo de vida de uma varivel dinmica no heap? Os ponteiros so restritos quanto ao tipo de valor para o qual eles apontam?

Operaes com ponteiros


Duas operaes fundamentais
Atribuio e desreferenciamento

Atribuio usada para fixar o valor de uma varivel de ponteiro em um endereo til Desreferenciamento referencia o valor da clula de memria (no apenas o endereo)
Desreferenciamento pode ser implcito ou explcito C++ usa uma operao explcita *

j = *ptr fixar j ao valor ao valor alocado em ptr

Operaes com ponteiros


Na linguagem C,
& um operador que devolve o endereo na memria do seu operando.
m = &count; (m recebe o endereo de count)

* um operador que devolve o valor da varivel localizada num endereo.


q = *m; (coloca o valor de count em q)

C tambm permite o uso de operadores de incremento e decremento em ponteiros (aritmtica de ponteiros).

Ilustrao de atribuio de ponteiro


A operao de atribuio j = *ptr

Problemas com Ponteiros


Ponteiros Pendurados (Dangling pointers)
Um ponteiro que contm o endereo de uma varivel dinmica no heap que foi desalocada

Variveis dinmicas no heap perdidas


Uma varivel dinmica no heap alocada no mais acessvel ao programa usurio (geralmente chamada de lixo) Ponteiro p1 ajustado para apontar para uma varivel dinmica no heap recm-criada Mais tarde, ponteiro p1 ajustado para outra varivel dinmica no heap recm-criada Vazamento de memria

Exerccios
Quais so as vantagens dos tipos de enumerao definidos pelo usurio? Quais so as questes de projeto para tipos ponteiros? Quais so os dois problemas comuns com ponteiros?

Bibliografia
Conceitos de Linguagens de programao; Robert W. Sebesta; 9 Edio.