Modelos de
Linguagem de
Programação I
Aula 06
Prof. Silvestri
www.eduardosilvestri.com.br
Tipos de Dados
Em ciência da computação tipos de variáveis ou dados é uma
combinação de valores e de operações que uma variável pode
executar, o que pode variar conforme o sistema operacional e a
linguagem de computador. São utilizados para indicar ao
compilador ou interpretador as conversões necessárias para obter
os valores em memória durante a construção do programa. Por
outro lado, ajudam também o programador a detectar eventuais
erros (sintáticos).
Tipos de Dados
Dependendo da linguagem de programação, o tipo de um dado é
verificado diferentemente, de acordo com a análise léxica,
sintática e semântica do compilador ou interpretador da
linguagem. Os tipos têm geralmente associações com valores na
memória ou com objetos (para uma linguagem orientada a
objeto) ou variáveis.
Tipos de Dados
Estáticos ou Dinâmicos
A verificação do tipo de um dado é feita de forma estática em
tempo de compilação ou de forma dinâmica em tempo de
execução. Em C, C++, Java e Haskell os tipos são estáticos, em
Scheme, Lisp, Smalltalk, Perl, PHP, Visual Basic, Ruby e
Python são dinâmicos.
Em C uma definição estática do tipo de uma variáveis ficaria assim:
printf("O tipo char ocupa %d bytes\n", sizeof(char));
Tipos de Dados
Estáticos ou Dinâmicos
Em Linguagem Python a definição dinâmica do tipo de dado é
feita em tempo de execução, por exemplo:
Variável de tipo "inteiro":
>>> a = 123
>>> type(a)
<type 'int'>
E logo a mudança de estado para tipo string:
>>> a = 'teste'
>>> type(a)
<type 'str'>
>>>
Tipos de Dados
Forte e Fraco
Linguagens implementadas com tipos de dados fortes, tais como
Java e Python, exigem que o tipo de dado de um valor seja do
mesmo tipo da variável ao qual este valor será atribuído.
Exemplo:
Tipos de Dados
Forte e Fraco
(Sintaxe genérica)
1. Declarar Variáveis
2. TEXTO nome
3. INTEIRO idade
4.
5. Atribuições
6. nome = "Fulano"
7. idade = "13"
Ocorrerá um erro ao compilar a linha 7, pois o valor "13" precisa
ser convertido para o tipo de dado INTEIRO.
Tipos de Dados
Forte e Fraco
Em linguagens com tipos de dados fracos, tais como PHP e
VBScript, a conversão não se faz necessária, sendo realizada
implicitamente pelo compilador ou interpretador.
Tipos de Dados
Primitivo e Composto
Um tipo primitivo (também conhecido por nativo ou básico) é
fornecido por uma linguagem de programação como um bloco
de construção básico. Dependendo da implementação da
linguagem, os tipos primitivos podem ou não possuir
correpondência direta com objetos na memória.
Um tipo composto pode ser construído em uma linguagem de
programação a partir de tipos primitivos e de outros tipos
compostos, em um processo chamado composição.
Em C, cadeias de caracteres são tipos compostos, enquanto em
dialetos modernos de Basic e em JavaScript esse tipo é nativo
da linguagem.
Tipos de Dados
Primitivo e Composto
Tipos primitivos típicos incluem caracter, inteiro (representa um
sub-conjunto dos números inteiros, com largura dependente do
sistema; pode possuir sinal ou não), ponto flutuante (representa
o conjunto dos números reais), booleano (lógica booleana,
verdadeiro ou falso) e algum tipo de referência (como ponteiro
ou handles).
Tipos primitivos mais sofisticados incluem tuplas, listas ligadas,
números complexos, números racionais e tabela hash, presente
sobretudo em linguagens funcionais.
Tipos de Dados
Primitivo e Composto
Espera-se que operações envolvendo tipos primitivos sejam as
construções mais rápidas da linguagem. Por exemplo, a adição
de inteiros pode ser feita com somente uma instrução de
máquina, e mesmo algumas CPUs oferecem instruções
específicas para processar sequências de caracteres com uma
única instrução. A maioria das linguagens não permite que o
comportamento de um tipo nativo seja modificado por
programas. como exceção, Smalltalk permite que tipos nativos
sejam estendidos, adicionando-se operações e também
redefinindo operações nativas.
Tipos de Dados
Primitivo e Composto
Uma estrutura em C e C++ é um tipo composto de um conjunto
determinado de campos e membros. O tamanho total da
estrutura para o tipo composto corresponde a soma dos
requerimentos de cada campo da estrutura, além de um possível
espaço para alinhamento de bits. Por exemplo:
struct Conta
{
int numero;
char *nome;
char *sobrenome;
float balanco;
};
Tipos de Dados
Primitivo e Composto
struct Conta define um tipo composto chamado Conta. A partir de
uma variável minhaConta do tipo acima, pode-se acessar o
número da conta através de minhaConta.numero.
Conta minhaConta;
Tipos de Dados
Strings de Caracteres
Em programação e em linguagens formais, uma cadeia de
caracteres (também conhecida como string) é uma sequência
ordenada de caracteres (símbolos) escolhidos a partir de um
conjunto pré-determinado. Em programação, cada símbolo
armazenado na memória é representado por um valor numérico.
Uma variável declarada com tipo de dado cadeia geralmente
armazena um número pré-determinado de caracteres.
Tipos de Dados
Strings de Caracteres – Teoria Formal
Seja Σ um alfabeto, um conjunto finito e não vazio. Os elementos
de Σ são chamados caracteres. Uma cadeia sobre Σ é qualquer
sequência finita de caracteres de Σ. Por exemplo, se Σ = {0, 1},
então 0101 é uma cadeia sobre Σ. O tamanho da cadeia é a
quantidade de caracteres, e pode ser qualquer valor inteiro não
negativo. A cadeia vazia é uma cadeia única sobre Σ de
tamanho 0, sendo denotada por ε ou λ.
Tipos de Dados
Strings de Caracteres – Concatenação e Sub Cadeias.
Concatenação é uma importante operação binária em Σ*. Para
qualquer duas cadeias s e t em Σ*, sua concatenação é definida
pela sequência de caracteres de s seguida pela sequência de
caracteres em t, denotada por st. Por exemplo se Σ = {a, b, …,
z}, s = bear e t = hug, então st = bearhug e ts = hugbear.
A concatenação de cadeias é uma operação associativa, mas não
comutativa. A cadeia vazia serve como um elemento identidade;
par qualquer cadeia s, εs = sε = s. Portanto, o conjunto Σ* e a
operação de concatenação formam um monóide.
A cadeia s é dita uma sub-cadeia (ou fator) de t se existem cadeias
(possivelmente vazias) u e v de forma que t = usv.
Tipos de Dados
Strings de Caracteres – Tipo de Dados.
Um tipo de dado cadeia de caracteres (referido em programação
geralmente como string) é uma modelagem de uma cadeia
formal de caracteres. São bastante usados em programação,
sendo implementados em quase todas as linguagens de
programação. Em algumas linguagens esse tipo é definido
nativamente, em outras é um tipo composto, derivado.
Tipos de Dados
Arrays
Em programação de computadores, um array, também conhecido
como vetor ou lista (para arrays uni-dimensionais) ou matriz
(para arrays bi-dimensionais), é uma das mais simples
estruturas de dados. Os arrays mantêm uma série de elementos
de dados, geralmente do mesmo tamanho e tipo de dados.
Elementos individuais são acessados por sua posição no array.
A posição é dada por um índice, também chamado de
subscrição.
Tipos de Dados
Arrays
O índice geralmente utiliza uma seqüência de números inteiros, (ao
contrário de um array associativo) mas o índex pode ter
qualquer valor ordinal. Alguns arrays são multi-dimensionais,
significando que eles são indexados por um número fixo de
números inteiros, por exemplo, por um seqüência (ou sucessão)
finita de quatro números inteiros. Geralmente, arrays uni- e bidimensionais são os mais comuns.
Tipos de Dados
Arrays
Os arrays podem-se considerar como as estruturas de dado mais
simples que é possível imaginar. Têm a vantagem de que os
seus elementos são acessíveis de forma rápida, mas têm uma
notável limitação: são de tamanho fixo, não podem ser
incrementados ou diminuídos sem implicar complexos
processos de cópia.
Estas estruturas de dado são ajeitadas nas situações em que o
acesso aos dados seja realizado de forma aleatória e
imprevisível. Porém, se os elementos podem estar ordenados e
vai-se empregar um acesso seqüencial, seria mais ajeitada uma
lista.
Tipos de Dados
Arrays – Forma de Acesso.
A forma de acesso aos elementos de um array é direta, ao contrário
das listas. Isto quer dizer que o elemento desejado obtêm-se a
partir do seu índice e não é preciso procurá-lo elemento por
elemento. No caso das listas, por exemplo, para alcançar o
terceiro elemento ter-se-á de acessar primeiro aos dois
anteriores (ou bem de guardar um ponteiro que permita acessar
de maneira rápida a esse elemento em particular).
Tipos de Dados
Arrays – declarando e alocando um array.
Em Java, os arrays são objetos que necessitam ser inicializados.
Isto geralmente é feito usando o operador new. Para um array, o
programador especifica o tipo dos elementos do array e o
número de elementos como parte da operação new. Ex.: int[] A
= new int[5].
String[] S = new String[5];
double[] d = new double[10];
int[][] d2 = new int[10][10]; // matriz 10x10 , array de arrays
double[] a;
a = new double[100];
Tipos de Dados
Arrays – declarando e alocando um array.
Em C, os arrays são declarados, defenindo primeiro o seu tipo, em
seguida do seu nome e por fim a sua dimensão. Ex.: int
array[10];.
int quadro[10];
double array[100];
int matrix[20][10]; /* matriz 20x10 */
Tipos de Dados
Arrays – declarando e alocando um array.
Inicializando arrays no momento da criação
int[] A = {5, 7, 9, 2, 0};
int[][] d2 = { {1,2,3} , {4,5,6} };
long[] a;
a = new long[] {10,20,30,40};
Tipos de Dados
Arrays – declarando e alocando um array.
Automaticamente o Java inicializa com um valor default cada
elemento do array:
Null para tipo Objetos;
0 (zero) para short, byte, int, long, float e double;
Unicode 0 para char;
False para boolean;
Em C, os arrays quando inicializados no momento da declaração,
são definidos do seguinte modo:
int array[5] = {3,4,5,6,3};
double quadro[5] = {3.0,4.0,5.0,6.03,3.0};
int matrix[4][4] = {{3,4,3,4},{5,6,2,3}};
Dúvidas
www.eduardosilvestri.com.br
Eduardo Silvestri
[email protected]
Questões
Publicação
1. Fazer o mapa conceitual da aula.
Download

TiposdeDados - Professor Eduardo Silvestri