Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paradigmas de Linguagem Valores e Tipos de Dados UFPB – Campus IV Prof. Ana Liz Prof Wagner Emanoel Cota 2 Conceituação Área antes conhecida como processamento de dados o Grandes massas de dados: odados geográficos, odados de catálogos telefônicos de cidades, odados de censo demográfico, o imagens de satélite o cadastro de consumidores o Interesse econômico 3 Conceituação Valor o qualquer entidade que existe durante um processamento o tudo que pode ser avaliado, armazenado, incorporado numa estrutura de dados, passado como argumento para um procedimento ou função, retornado como resultado de funções Ex: 3 2.5 'a' “Ana” 0x1F 026 Conceituação Tipo o Conjunto cujos valores exibem comportamento uniforme nas operações associadas com o tipo {true, 25, 'b', “azul” } não corresponde a um tipo { true, false } corresponde a um tipo 4 Conceituação - Tipo Um valor é de um determinado tipo significa que esse valor pertence ao conjunto de valores definido por aquele tipo. Uma expressão é de um determinado tipo significa que o resultado dessa expressão é um valor pertencente ao conjunto definido por aquele tipo. 5 6 Tipos Primitivos Não podem ser decompostos em valores mais simples o a partir deles todos os demais tipos podem ser construídos Costumam ser definidos na implementação da LP o Sofrem influência direta do hardware o Exemplo em C: o tipo int normalmente corresponde ao intervalo que pode ser representado : o 16 bits: o tipo int varia de –32.768 a +32.767. o 32 bits: o tipo int varia de –2.147.483.648 a +2.147.483.647 Tipos Primitivos A escolha dos tipos primitivos da LP revela a área de aplicação pretendida para a LP. Exemplo: o COBOL (processamento comercial) o Tipos primitivos strings de comprimento fixo e números de ponto fixo o FORTRAN (computação numérica) o Tipos primitivos números reais com precisão variada 7 TIPO INTEIRO Valores e Tipos de Dados Linguagens de Programação 8 9 Tipo Inteiro Corresponde a um intervalo do conjunto dos números inteiros Há vários tipos inteiros numa mesma LP o Em C, intervalos são definidos na implementação do compilador o Qual a vantagem? Em JAVA o intervalo de cada tipo inteiro é estabelecido na definição da própria LP Tipo inteiro em C 10 11 Tipos Inteiros em JAVA Tipo Tamanho (bits) Intervalo Início Fim byte 8 -128 127 short 16 -32768 32767 int 32 -2.147.483.648 2.147.483.647 long 64 -9223372036854775808 9223372036854775807 TIPO CARACTER Valores e Tipos de Dados Linguagens de Programação 12 Tipo Caracter Valores caracteres são armazenados como códigos numéricos. LPs fornecem um tipo primitivo cujos valores correspondem aos símbolos de uma tabela padrão de caracteres o Ex: PASCAL e MODULA 2, Java, C Valores e Tipos de Dados Linguagens de Programação 13 14 Tipo Caracter Armazenados como códigos numéricos o Tabelas EBCDIC, ASCII e UNICODE o ASCII oValores de 0..127, armazenados em 8 bits, para codificar 128 caracteres diferentes o UNICODE o16 bits para armazenar caracteres da maioria das linguagens naturais existentes no mundo o Engloba a tabela ASCII o Java adota UNICODE Tabela ASCII Linguagens de Programação 15 Tabela ASCII 16 Tabela ASCII - Extensão 17 18 Tipo Caractere Curiosidade: Em C, o tipo primitivo char é classificado como um tipo inteiro char d; d = 'a' + 3; o Exemplo de ortogonalidade. O código atribui o valor inteiro 100 a variável d (corresponde a soma de 3 com o código numérico ASCII da letra minúscula ‘a’) TIPO BOOLEANO Valores e Tipos de Dados Linguagens de Programação 19 20 Tipo Booleano Tipo mais simples o Possui apenas dois valores Usados como resultados de: o Expressões condicionais o Variáveis identificadoras de estado (flag) JAVA inclui o tipo de dado boolean Geralmente armazenados em um byte. 21 Tipo Booleano C não possui o tipo de dado booleano o Qualquer expressão numérica pode ser usada como condicional Valores zero verdadeiro Valores = zero falso Exemplo em C: ... if (c += 1) x = 10; …. TIPO DECIMAL Valores e Tipos de Dados Linguagens de Programação 22 23 Tipo Decimal Armazena um número fixo de dígitos decimais o Aplicações comerciais o Armazenar precisamente valores decimais) o Exemplos: COBOL e ADA o Garante que as operações sobre seus valores são sempre precisas Representação BCD (Binary Coded Decimal) TIPO PONTO FLUTUANTE 24 25 Tipo Ponto Flutuante Modela os números reais o Não possuem representação binária direta o Notação que combina representações binárias de frações e expoentes. LPs normalmente incluem dois tipos de ponto flutuante: float e double expoente fração expoente fração Padrão IEEE 754 - Precisão Simples bit de sinal 8 bits 23 bits bit de sinal 11 bits 52 bits Padrão IEEE 754 - Precisão Dupla 26 Tipo Ponto Flutuante Java possui tipos float e double TIPO ENUMERADO Valores e Tipos de Dados Linguagens de Programação 27 28 Tipo Enumerado Permitem definir novos tipos primitivos através da enumeração de identificadores dos valores do novo tipo Exemplos: PASCAL, ADA, C e C++ enum mes_letivo { mar, abr, mai, jun, ago, set, out, nov }; enum mes_letivo m1, m2; Tipo Enumerado 29Fonte: http://pt.wikibooks.org/wiki/Programar_em_C/Enumera%C3%A7%C3%A3o http://pt.wikibooks.org/wiki/Programar_em_C 30 h tt p :/ /p t. w ik ib o o k s. o rg /w ik i/ P ro g ra m ar _ em _ C /E n u m er a% C 3 % A 7 % C 3 % A 3 o http://pt.wikibooks.org/wiki/Programar_em_C 31 Tipo Enumerado Possuem correspondência direta com intervalos de tipos inteiros Usados para indexar vetores e para contadores de repetições Aumentam a legibilidade e confiabilidade do código Java não inclui o tipo enumerado de C e C++ 32 Tipo Intervalo de Inteiros Em PASCAL e ADA é possível definir tipos intervalo de inteiros type meses = 1 .. 12; Tipos intervalos herdam as operações dos inteiros Exemplo de ortogonalidade Tipo Intervalo em Pascal Pode-se ter intervalos de qualquer tipo padrão do Pascal, exceto real: VAR v : 0..100; x : 'a'..'d'; y : '5'..'9'; 33 limite_inferior..limite_superior TIPOS COMPOSTOS 34 35 Tipos Compostos Podem ser criados a partir de tipos mais simples registros, vetores, listas, arquivos Entendidos em termos dos conceitos produto cartesiano, uniões, mapeamentos, conjuntos potência e tipos recursivos Cardinalidade número de valores distintos que fazem parte do tipo 36 Produto Cartesiano São produtos cartesiano os registros de PASCAL, MODULA 2, ADA e COBOL e as estruturas de C struct nome { char primeiro [20]; char meio [10]; char sobrenome [20]; } struct empregado { struct nome nfunc; float salario; } emp; para acessar o campo meio em C, é necessário usar: emp.nfunc.meio VETORES 37 38 Mapeamentos Finitos O conjunto domínio é finito Vetores e matrizes Elementos dos vetores são acessados através de indexação O conjunto índice deve ser finito e discreto a z d r s … f h w o 1 2 3 4 5 … 47 48 49 50 Vetores As notações comuns utilizadas para indexação são parênteses ( ) e colchetes [ ] o Questões de legibilidade A maior parte das LPs restringe o conjunto índice a um intervalo dos inteiros o Limite inferior 0: C, C++ e JAVA o Limite inferior 1: Lua, 39 Vetores Em geral, o erro devido ao uso de índice inexistente só pode ser verificado em tempo de execução Realizam verificação dinâmica de índices o PASCAL, MODULA-2, ADA e JAVA o Vantagem: aumenta a confiabilidade o Desvantagem: reduz a eficiência de execução pois acessoao vetor requer teste do índice o Agravo quando o acesso ocorre dentro de uma repetição 40 Vetores Não realizam verificação dinâmica de índices o C, C++ e FORTRAN o Vantagem: aumenta eficiência o Desvantagem: reduz confiabilidade Exemplo de código em C: 41 42 Categorias de Vetores Categoria de Vetor Tamanho Tempo de Definição Alocação Local de Alocação Exemplos Estáticos Fixo Compilação Estática Base FORTRAN 77 Semi- Estáticos Fixo Compilação Dinâmica Pilha PASCAL, C, MODULA 2 Semi- Dinâmicos Fixo Execução Dinâmica Pilha ALGOL 68, ADA, C Dinâmicos Variável Execução Dinâmica Monte APL, PERL 43 Categorias de Vetores Categoria de Vetor Tamanho Tempo de Definição Alocação Local de Alocação Exemplos Estáticos Fixo Compilação Estática Base FORTRAN 77 Semi- Estáticos Fixo Compilação Dinâmica Pilha PASCAL, C, MODULA 2 Semi- Dinâmicos Fixo Execução Dinâmica Pilha ALGOL 68, ADA, C Dinâmicos Variável Execução Dinâmica Monte APL, PERL • Alocados no início do programa em posição fixa da memória (base). • Permanecem alocada durante toda execução •Vantagem: eficiência de execução, pois não requerem alocação e desalocação de memória •Desvantagem: consomem mais memória do que é necessário, pois vetores usados apenas em regiões do programa ficam alocados durante toda a execução 44 Categorias de Vetores Categoria de Vetor Tamanho Tempo de Definição Alocação Local de Alocação Exemplos Estáticos Fixo Compilação Estática Base FORTRAN 77 Semi- Estáticos Fixo Compilação Dinâmica Pilha PASCAL, C, MODULA 2 Semi- Dinâmicos Fixo Execução Dinâmica Pilha ALGOL 68, ADA, C Dinâmicos Variável Execução Dinâmica Monte APL, PERL • Alocados na pilha sempre que o bloco onde estão declarados começa a ser executado. • Vantagem: economia de memória pois só alocam o vetor na região do programa onde são necessários. • Desvantagem: redução da eficiência de execução. 45 Categorias de Vetores Categoria de Vetor Tamanho Tempo de Definição Alocação Local de Alocação Exemplos Estáticos Fixo Compilação Estática Base FORTRAN 77 Semi- Estáticos Fixo Compilação Dinâmica Pilha PASCAL, C, MODULA 2 Semi- Dinâmicos Fixo Execução Dinâmica Pilha ALGOL 68, ADA, C Dinâmicos Variável Execução Dinâmica Monte APL, PERL • Alocados na pilha • Tamanho do vetor só é conhecido no momento da alocação. • Vantagem: flexibilidade - programador não necessita definir tamanho máximo para o vetor. •Exemplo em ADA: 46 Categorias de Vetores Categoria de Vetor Tamanho Tempo de Definição Alocação Local de Alocação Exemplos Estáticos Fixo Compilação Estática Base FORTRAN 77 Semi- Estáticos Fixo Compilação Dinâmica Pilha PASCAL, C, MODULA 2 Semi- Dinâmicos Fixo Execução Dinâmica Pilha ALGOL 68, ADA, C Dinâmicos Variável Execução Dinâmica Heap APL, PERL • Alocados em qualquer ponto da execução do programa na região de heap do programa • Tamanho do vetor pode ser modificado durante a execução. • Exemplo em APL: 47 Categorias de Vetores Estáticos (C) void f () { static int x[10]; } Semi-Estáticos (C) void f () { int x[10]; } Semidinâmicos (Padrão ISO - 1999) void f (int n) { int x[n]; } Dinâmicos (APL) A (2 3 4) A (2 3 4 15 ) 48 Vetores semi-Dinâmicos Necessário alocar nova memória e copiar conteúdo quando vetor aumenta de tamanho É encargo do programador controlar alocação e cópia. Em C e C++, o programador deve controlar desalocação também. Isso torna a programação mais complexa e suscetível a erros Vetor semi-dinâmico em Java Em java Valores e Tipos de Dados Linguagens de Programação 49 LISTAS 50 Listas em prolog É uma seqüência ordenada de uma quantidade qualquer de elementos Ex: [pam, liz, pat, ana, tom, bob, jim] Existem dois tipos de listas: 1. Listas vazias - representada por [ ] 2. Listas não vazias oCabeça - corresponde ao primeiro elemento da lista oCauda - corresponde aos elementos restantes da lista 51 Listas Exemplo: [a | b, c] = [a, b, c]. Pode-se especificar que um elemento de uma lista é também uma lista: Hobbies1 = [futebol,computador]. Hobbies2 = [ler,dormir]. Lista = [ana, Hobbies1,tom,Hobbies2]. 52 TIPO PONTEIRO 53 54 Tipos Ponteiros Ponteiro é um conceito de baixo nível relacionado com a arquitetura dos computadores O conjunto de valores de um tipo ponteiro são os endereços de memória e o valor nil Ponteiros Ponteiro é uma variável que guarda o endereço de uma outra variável Exemplo em C: int *pa; Há dois operadores unitários utilizados: o Operador *: retorna o valor da variável que está localizada no ponteiro o Operador &: retorna o endereço de memória que está localizado o valor da variável contida no ponteiro 55 Ponteiro do tipo inteiro Ponteiros Para atribuir um valor para o ponteiro é necessário referencia o valor da variável que se encontra no ponteiro utilizando o operador * *px = 20; o Atribui-se o valor 20 para a variável que está contida no ponteiro 56 Ponteiros – Exemplo em C void main( ){ int x, y; int *px; int *py; x= 1; y=2; px = &x; py = &y; printf(“Endereço do ponteiro px: %u “,px); printf(“Endereço da variavel contida no ponteiro px: %u“,&px); printf(“Valor da variável contida no ponteiro px: %d “,*px);} 57 Ponteiros px e py apontam para os endereços de memória das variáveis x e y Ponteiros – Exemplo em C void main( ){ int x, y; int *px; int *py; x= 1; y=2; px = &x; py=&y; printf(“Endereço do ponteiro px: %u “,px); printf(“Endereço da variavel contida no ponteiro px: %u“,&px); printf(“Valor da variável contida no ponteiro px: %d “,*px);} 58 Saída do programa: Endereço do ponteiro px: 1387098 Endereço da variável contida no ponteiro px: 1387090 Valor da variável contida no ponteiro px: 1 Ponteiros – Exemplo em C Abstração do ponteiro 59 13870901387098 1387090 1 ... ... ... 1 *px Ponteiro Linguagens que não possuem ponteiros devem incluir sistema de gerenciamento de memória o Para controlar o espaço utilizado e liberar o espaço que não usado 60 61 Tipo String Valores correspondem a uma seqüência de caracteres Não existe consenso sobre como devem ser tratadas o Tipos primitivos em PERL, SNOBOL e ML o Vetores de caracteres em C e Pascal o JAVA considera strings como uma classe da biblioteca padrão com as suas próprias operações Três formas comuns de implementação o Estática o Semi-Estática o Dinâmica 62 Hierarquia de Tipos Tipos Primitivos Compostos Booleanos Inteiros Caracteres Decimais Ponto Flutuantes Enumerados Intervalos Uniões StringsRecursivos Mapeamentos Conjuntos Potência Produtos Cartesianos Ponteiros Livres Disjuntas Finitos Funções Referências VAREJÃO, Flávio Miguel. Linguagens de programação java, C e C++ e outras: conceitos e técnicas. Rio de Janeiro: Elsevier, 2004. Wikibook de C. Diponível em: http://pt.wikibooks.org/wiki/Programar_em_C/Ponteiros. Acesso em: 28 abr 2014. 63 http://pt.wikibooks.org/wiki/Programar_em_C/Ponteiros
Compartilhar